diff --git a/contracts/interfaces/modular_commitment.sol b/contracts/interfaces/modular_commitment.sol new file mode 100644 index 0000000..e5925b1 --- /dev/null +++ b/contracts/interfaces/modular_commitment.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Elena Tatuzova +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// + +pragma solidity >=0.8.4; + +import "../types.sol"; + +interface ICommitmentScheme { + function initialize( + bytes32 tr_state_before + ) external returns(bytes32 tr_state_after); + + // Append commitments + function verify_eval( + bytes calldata blob, + uint256[5] memory commitments, + uint256 challenge, + bytes32 transcript_state_before + ) external view returns (bool); +} \ No newline at end of file diff --git a/contracts/interfaces/modular_gate_argument.sol b/contracts/interfaces/modular_gate_argument.sol new file mode 100644 index 0000000..08d7c97 --- /dev/null +++ b/contracts/interfaces/modular_gate_argument.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Elena Tatuzova +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity ^0.8.0; + +interface IGateArgument { + function verify( + bytes calldata blob, + uint256 theta + ) external view returns (uint256 F); +} diff --git a/contracts/interfaces/modular_lookup_argument.sol b/contracts/interfaces/modular_lookup_argument.sol new file mode 100644 index 0000000..64bb91c --- /dev/null +++ b/contracts/interfaces/modular_lookup_argument.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Elena Tatuzova +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity ^0.8.0; + +interface ILookupArgument { + function verify( + bytes calldata blob, // Table values and permutations' values + bytes calldata sorted, // Sorted batch values + uint256 lookup_commitment, // Lookup commitment + uint256 l0, + bytes32 tr_state_before // It's better than transfer all random values + ) external view returns (uint256[4] memory F, bytes32 tr_state_after); +} diff --git a/contracts/interfaces/modular_permutation_argument.sol b/contracts/interfaces/modular_permutation_argument.sol new file mode 100644 index 0000000..a8d188d --- /dev/null +++ b/contracts/interfaces/modular_permutation_argument.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Elena Tatuzova +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity ^0.8.0; + +interface IModularPermutationArgument { + function verify( + bytes calldata blob, + uint256 beta, + uint256 gamma + ) external view returns (uint256[3] memory F); +} diff --git a/contracts/interfaces/modular_verifier.sol b/contracts/interfaces/modular_verifier.sol new file mode 100644 index 0000000..7624bbb --- /dev/null +++ b/contracts/interfaces/modular_verifier.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Elena Tatuzova +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity ^0.8.0; + +interface IModularVerifier { + function initialize( +// address permutation_argument_contract_address, + address lookup_argument_contract_address, + address gate_argument_contract_address, + address commitment_contract_address + ) external; + + function verify( + bytes calldata blob, + uint256[] calldata public_input + ) external view returns (bool result); +} diff --git a/contracts/zkllvm/circuit1/commitment.sol b/contracts/zkllvm/circuit1/commitment.sol new file mode 100644 index 0000000..f16048c --- /dev/null +++ b/contracts/zkllvm/circuit1/commitment.sol @@ -0,0 +1,637 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_commitment.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../containers/merkle_verifier.sol"; +import "../../algebra/polynomial.sol"; +import "hardhat/console.sol"; + +library modular_commitment_scheme_circuit1 { + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint64 constant batches_num = 4; + uint256 constant r = 3; + uint256 constant lambda = 40; + uint256 constant D0_size = 256; + uint256 constant max_degree = 15; + uint256 constant D0_omega = 23692685744005816481424929253249866475360293751445976741406164118468705843520; + uint256 constant unique_points = 4; + uint256 constant permutation_point = 2; + uint256 constant quotient_point = 0; + uint256 constant lookup_point = 0; + bytes constant points_ids = hex"01010101010101010303010100000000"; + uint256 constant omega = 14450201850503471296781915119640920297985789873634237091629829669980153907901; + uint256 constant _etha = 14062721881273474090606415031361994540585550571695842571456013353340629726555; + + struct commitment_state{ + bytes leaf_data; + uint256 roots_offset; + uint256 initial_data_offset; + uint256 initial_proof_offset; + uint256 round_proof_offset; + uint256 round_data_offset; + uint256[r] alphas; + uint64[batches_num] batch_sizes; + uint64 poly_num; + uint256 points_num; + uint256 theta; + uint256 x_index; + uint256 x; + uint256 max_batch; + uint256 domain_size; + uint256[] final_polynomial; + uint256 leaf_length; + uint256[][unique_points] denominators; + uint256[unique_points] factors; + uint256[][unique_points] combined_U; + uint256[][unique_points] unique_eval_points; + uint256[2] y; + uint256 j; + uint256 offset; + } + + function calculate_2points_interpolation(uint256[] memory xi, uint256[2] memory z) + internal pure returns(uint256[2] memory U){ +// require( xi.length == 2 ); +unchecked { + U[0] = addmod(mulmod(z[0], xi[1], modulus),modulus - mulmod(z[1], xi[0], modulus), modulus); + U[1] = addmod(z[1], modulus - z[0], modulus); +} + } + +// coeffs for zs on each degree can be precomputed if necessary + function calculate_3points_interpolation(uint256[] memory xi, uint256[3] memory z) + internal pure returns(uint256[3] memory U){ +// require( xi.length == 3 ); +unchecked { + z[0] = mulmod(z[0], addmod(xi[1], modulus - xi[2], modulus), modulus); + z[1] = mulmod(z[1], addmod(xi[2], modulus - xi[0], modulus), modulus); + z[2] = mulmod(z[2], addmod(xi[0], modulus - xi[1], modulus), modulus); + + U[0] = mulmod(z[0], mulmod(xi[1], xi[2], modulus), modulus); + U[0] = addmod(U[0], mulmod(z[1], mulmod(xi[0], xi[2], modulus), modulus), modulus); + U[0] = addmod(U[0], mulmod(z[2], mulmod(xi[0], xi[1], modulus), modulus), modulus); + + U[1] = modulus - mulmod(z[0], addmod(xi[1], xi[2], modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[1], addmod(xi[0], xi[2], modulus), modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[2], addmod(xi[0], xi[1], modulus), modulus), modulus); + + U[2] = addmod(z[0], addmod(z[1], z[2], modulus), modulus); +} + } + + function prepare_eval_points(uint256[][unique_points] memory result, uint256 xi) internal view { + uint256 inversed_omega = field.inverse_static(omega, modulus); + result[0] = new uint256[](1); + result[0][0] = xi; + result[1] = new uint256[](2); + result[1][0] = xi; + result[1][1] = _etha; + result[2] = new uint256[](2); + result[2][0] = xi; + result[2][1] = mulmod(xi, omega, modulus); + result[3] = new uint256[](3); + result[3][0] = xi; + result[3][1] = mulmod(xi, omega, modulus); + result[3][2] = _etha; + + } + + function prepare_U_V(bytes calldata blob, commitment_state memory state, uint256 xi) internal view returns(bool result){ + +unchecked { + result = true; + uint64 ind = 0; + prepare_eval_points(state.unique_eval_points, xi); + // Prepare denominators + for( ind = 0; ind < state.unique_eval_points.length;){ + state.denominators[ind] = new uint256[](state.unique_eval_points[ind].length + 1); + if( state.unique_eval_points[ind].length == 1 ){ + state.factors[ind] = 1; + state.denominators[ind][0] = modulus - state.unique_eval_points[ind][0]; + state.denominators[ind][1] = 1; + } else + if( state.unique_eval_points[ind].length == 2 ){ + // xi1 - xi0 + state.factors[ind] = + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][0], modulus); + state.denominators[ind][2] = 1; + + state.denominators[ind][1] = + modulus - addmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + + state.denominators[ind][0] = + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + } else + if( state.unique_eval_points[ind].length == 3 ){ + state.factors[ind] = modulus - + mulmod( + mulmod( + addmod(state.unique_eval_points[ind][0], modulus - state.unique_eval_points[ind][1], modulus), + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][2], modulus), + modulus + ), + addmod(state.unique_eval_points[ind][2], modulus - state.unique_eval_points[ind][0], modulus), + modulus + ); + state.denominators[ind][3] = 1; + state.denominators[ind][2] = + modulus - addmod( + state.unique_eval_points[ind][0], + addmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][1] = + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus), + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][2], modulus), + mulmod(state.unique_eval_points[ind][1], state.unique_eval_points[ind][2], modulus), + modulus + ), + modulus + ); + state.denominators[ind][0] = + modulus - mulmod( + state.unique_eval_points[ind][0], + mulmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + state.denominators[ind][3] = mulmod(state.denominators[ind][3], state.factors[ind], modulus); + } else { + console.log("UNPROCESSED number of evaluation points"); + return false; + } + ind++; + } + + // Prepare combined U + for( uint256 ind = 0; ind < unique_points;){ + uint256[] memory point = state.unique_eval_points[ind]; + state.combined_U[ind] = new uint256[](state.unique_eval_points[ind].length); + uint64 cur = 0; + uint256 offset = 0x8; + for( uint256 k = 0; k < batches_num;){ + for( uint256 i = 0; i < state.batch_sizes[k];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(k == 2) cur_point = permutation_point; + else if(k == 3) cur_point = quotient_point; + else if(k == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + polynomial.multiply_poly_on_coeff( + state.combined_U[ind], + state.theta, + modulus + ); + if( cur_point == ind ){ + if( point.length == 1 ){ + state.combined_U[ind][0] = addmod( + state.combined_U[ind][0], + basic_marshalling.get_uint256_be(blob, offset), + modulus + ); + } else + if( point.length == 2 ){ + uint256[2] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp = calculate_2points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + } else + if( point.length == 3){ + uint256[3] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp[2] = basic_marshalling.get_uint256_be(blob, offset + 0x40); + tmp = calculate_3points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + state.combined_U[ind][2] = addmod(state.combined_U[ind][2], tmp[2], modulus); + } else { + return false; + } + } + offset += state.unique_eval_points[cur_point].length * 0x20; + i++;cur++; + } + k++; + } + ind++; + } +} + } + + function compute_combined_Q(bytes calldata blob,commitment_state memory state) internal view returns(uint256[2] memory y){ + +unchecked { + uint256[2][unique_points] memory values; + { + uint256 offset = state.initial_data_offset - state.poly_num * 0x40; // Save initial data offset for future use; + uint256 cur = 0; + for(uint256 b = 0; b < batches_num;){ + for(uint256 j = 0; j < state.batch_sizes[b];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(b == 2) cur_point = permutation_point; + else if(b == 3) cur_point = quotient_point; + else if(b == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + for(uint256 k = 0; k < unique_points; ){ + values[k][0] = mulmod(values[k][0], state.theta, modulus); + values[k][1] = mulmod(values[k][1], state.theta, modulus); + k++; + } + + values[cur_point][0] = addmod(values[cur_point][0], basic_marshalling.get_uint256_be(blob, offset), modulus); + values[cur_point][1] = addmod(values[cur_point][1], basic_marshalling.get_uint256_be(blob, offset + 0x20), modulus); + offset += 0x40;j++; cur++; + } + b++; + } + } + for(uint256 p = 0; p < unique_points; ){ + uint256[2] memory tmp = values[p]; + tmp[0] = mulmod(tmp[0], state.factors[p], modulus); + tmp[1] = mulmod(tmp[1], state.factors[p], modulus); + uint256 s = state.x; + tmp[0] = addmod(tmp[0], modulus - polynomial.evaluate(state.combined_U[p], s , modulus), modulus); + tmp[1] = addmod(tmp[1], modulus - polynomial.evaluate(state.combined_U[p], modulus - s, modulus), modulus); + tmp[0] = mulmod(tmp[0], field.inverse_static(polynomial.evaluate(state.denominators[p], s, modulus), modulus), modulus); + tmp[1] = mulmod(tmp[1], field.inverse_static(polynomial.evaluate(state.denominators[p], modulus - s, modulus), modulus), modulus); + y[0] = addmod(y[0], tmp[0], modulus); + y[1] = addmod(y[1], tmp[1], modulus); + p++; + } +} + } + + function initialize( + bytes32 tr_state_before + ) internal returns(bytes32 tr_state_after){ + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + uint256 etha = transcript.get_field_challenge(tr_state, modulus); + require(etha == _etha, "Wrong etha"); + tr_state_after = tr_state.current_challenge; + } + + function copy_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + c + ) + mstore( + add(leaf, 0x40), + d + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_reverted_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + d + ) + mstore( + add(leaf, 0x40), + c + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool b){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, offset)) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function copy_reverted_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, offset)) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function colinear_check(uint256 x, uint256[2] memory y, uint256 alpha, uint256 colinear_value) internal pure returns(bool){ + +unchecked { + uint256 tmp; + tmp = addmod(y[0], y[1], modulus); + tmp = mulmod(tmp, x, modulus); + tmp = addmod( + tmp, + mulmod( + alpha, + addmod(y[0], modulus-y[1], modulus), + modulus + ), + modulus + ); + uint256 tmp1 = mulmod(colinear_value , 2, modulus); + tmp1 = mulmod(tmp1 , x, modulus); + if( tmp != tmp1 ){ + console.log("Colinear check failed"); + return false; + } + return true; +} + } + + function verify_eval( + bytes calldata blob, + uint256[5] memory commitments, + uint256 challenge, + bytes32 transcript_state + ) internal view returns (bool){ + +unchecked { + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + commitment_state memory state; + + { + uint256 poly_at_eta; + /* 1 - 2*permutation_size */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 40);// 0 + if(poly_at_eta != 0x1f1737f0f9693494b37fd517f70fe4d844c0e4dd11e9df8639a0be9abfccb55b) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x68);// 0x1 + if(poly_at_eta != 0x1b7417b4df0e06e7817f2977d34f78391337465946f76b67edc9572bbeff8ac5) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xa8);// 0x2 + if(poly_at_eta != 0x94476885b462285877bcf57208d591d1b872dc6503b26d072945200bafdb5d7) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xe8);// 0x3 + if(poly_at_eta != 0x2e5650a9c85eac9ba56b0cb3a2c2bd9189a3e4df9127c2123ce59a03a6f48d33) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x128);// 0x4 + if(poly_at_eta != 0x1f1737f0f9693494b37fd517f70fe4d844c0e4dd11e9df8639a0be9abfccb55b) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x168);// 0x5 + if(poly_at_eta != 0x1b7417b4df0e06e7817f2977d34f78391337465946f76b67edc9572bbeff8ac5) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1a8);// 0x6 + if(poly_at_eta != 0x94476885b462285877bcf57208d591d1b872dc6503b26d072945200bafdb5d7) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1e8);// 0x7 + if(poly_at_eta != 0x2e5650a9c85eac9ba56b0cb3a2c2bd9189a3e4df9127c2123ce59a03a6f48d33) return false; + /* 2 - special selectors */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x248);// 0x8 + if(poly_at_eta != 0xf3114c664f481e6028c47f122b53b12f6aa455ea26f54aad80ad778950b2177) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2a8);// 0x9 + if(poly_at_eta != 0x2acd90c58b8637d005a76e69a474de1cc5f432a41724e855b2a0b19b71a52150) return false; + /* 3 - constant columns */ + /* 4 - selector columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2e8);// 0xa + if(poly_at_eta != 0x277b3d077e65208b010bc2f62957e87b900bd1f007ef61acf14649463be06cbb) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x328);// 0xb + if(poly_at_eta != 0x308efe88baf9b3bc3787b68d279234d783ef3e4064de84b20dc2a1d72eb2e0e3) return false; + } + + + { + uint256 offset; + + if (challenge!= transcript.get_field_challenge(tr_state, modulus)) return false; + + for(uint8 i = 0; i < batches_num;){ + transcript.update_transcript_b32(tr_state, bytes32(commitments[i])); + i++; + } + state.theta = transcript.get_field_challenge(tr_state, modulus); + + state.points_num = basic_marshalling.get_length(blob, 0x0); + offset = 0x8 + state.points_num*0x20 + 0x8; + for(uint8 i = 0; i < batches_num;){ + state.batch_sizes[i] = uint64(uint8(blob[offset + 0x1])); + if( state.batch_sizes[i] > state.max_batch ) state.max_batch = state.batch_sizes[i]; + state.poly_num += state.batch_sizes[i]; + i++; offset +=2; + } + + offset += 0x8; + offset += state.poly_num; + state.roots_offset = offset + 0x8; + offset += 0x8; + + for( uint8 i = 0; i < r;){ + transcript.update_transcript_b32(tr_state, bytes32(basic_marshalling.get_uint256_be(blob, offset + 0x8))); + state.alphas[i] = transcript.get_field_challenge(tr_state, modulus); + i++; offset +=40; + } + + + bytes calldata proof_of_work = blob[blob.length - 4:]; + transcript.update_transcript(tr_state, proof_of_work); + uint256 p_o_w = transcript.get_integral_challenge_be(tr_state, 4); + if (p_o_w & 0xffff8000 != 0) return false; + + + offset += 0x8 + r; + state.initial_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + + state.round_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + offset += 0x8; + + state.initial_proof_offset = offset; + for(uint8 i = 0; i < lambda;){ + for(uint j = 0; j < batches_num;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != commitments[j] ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + offset += 0x8; + state.round_proof_offset = offset; + + for(uint256 i = 0; i < lambda;){ + for(uint256 j = 0; j < r;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != basic_marshalling.get_uint256_be(blob, state.roots_offset + j * 40 + 0x8) ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + + state.final_polynomial = new uint256[](basic_marshalling.get_length(blob, offset)); + offset += 0x8; + for (uint256 i = 0; i < state.final_polynomial.length;) { + state.final_polynomial[i] = basic_marshalling.get_uint256_be(blob, offset); + i++; offset+=0x20; + } + } + if( state.final_polynomial.length > (( 1 << (field.log2(max_degree + 1) - r + 1) ) ) ){ + console.log("Wrong final poly degree"); + return false; + } + + if( !prepare_U_V(blob, state, challenge) ) return false; + + state.leaf_data = new bytes(state.max_batch * 0x40 + 0x40); + for(uint256 i = 0; i < lambda;){ + // Initial proofs + state.x_index = uint256(transcript.get_integral_challenge_be(tr_state, 8)) % D0_size; + state.x = field.pow_small(D0_omega, state.x_index, modulus); + state.domain_size = D0_size >> 1; + for(uint256 j = 0; j < batches_num;){ + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } + state.leaf_length = state.batch_sizes[j] * 0x40; + state.initial_data_offset += state.batch_sizes[j] * 0x40; + state.initial_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.initial_proof_offset); + j++; + } + { + state.y = compute_combined_Q(blob, state); + if( state.x_index < state.domain_size ){ + if( !copy_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + }else{ + if( !copy_reverted_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + } + } + if( !colinear_check(state.x, state.y, state.alphas[0], basic_marshalling.get_uint256_be(blob,state.round_data_offset)) ){ + console.log("Colinear check failed"); + return false; + } + + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + for(state.j = 1; state.j < r;){ + state.x_index %= state.domain_size; + state.x = mulmod(state.x, state.x, modulus); + state.domain_size >>= 1; + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } + state.y[0] = basic_marshalling.get_uint256_be(blob, state.round_data_offset); + state.y[1] = basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20); + if( !colinear_check(state.x, state.y, state.alphas[state.j], basic_marshalling.get_uint256_be(blob,state.round_data_offset + 0x40)) ){ + console.log("Round colinear check failed"); + return false; + } + state.j++; state.round_data_offset += 0x40; + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + } + + state.x = mulmod(state.x, state.x, modulus); + if(polynomial.evaluate(state.final_polynomial, state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset)) { + console.log("Wrong final poly check"); + return false; + } + if(polynomial.evaluate(state.final_polynomial, modulus - state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20)){ + console.log("Wrong final poly check"); + return false; + } + state.round_data_offset += 0x40; + + i++; + } + return true; +} + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit1/gate_argument.sol b/contracts/zkllvm/circuit1/gate_argument.sol new file mode 100644 index 0000000..ad6070c --- /dev/null +++ b/contracts/zkllvm/circuit1/gate_argument.sol @@ -0,0 +1,74 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_gate_argument.sol"; +import "hardhat/console.sol"; + + +contract modular_gate_argument_circuit1 is IGateArgument{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + // Append commitments + function verify( + bytes calldata blob, + uint256 theta + ) external view returns (uint256 F){ + uint256 theta_acc = 1; + uint256 eval; + uint256 x; + + uint256 prod; + uint256 sum; + uint256 gate; +// gate === 0 === + gate = 0; +// constraint 0 + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 192); + prod = mulmod(prod, 28948022309329048855892746252171976963363056481941560715954676764349967630336, modulus); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 160); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 128); + sum = addmod(sum, prod, modulus); + sum = mulmod(sum, theta_acc, modulus); + theta_acc = mulmod(theta, theta_acc, modulus); + gate = addmod(gate, sum, modulus); + gate = mulmod(gate, basic_marshalling.get_uint256_be(blob, 0), modulus); + F = addmod(F, gate, modulus); +// gate === 1 === + gate = 0; +// constraint 0 + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 192); + prod = mulmod(prod, 28948022309329048855892746252171976963363056481941560715954676764349967630336, modulus); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 128); + prod = mulmod(prod, basic_marshalling.get_uint256_be(blob, 160), modulus); + sum = addmod(sum, prod, modulus); + sum = mulmod(sum, theta_acc, modulus); + theta_acc = mulmod(theta, theta_acc, modulus); + gate = addmod(gate, sum, modulus); + gate = mulmod(gate, basic_marshalling.get_uint256_be(blob, 64), modulus); + F = addmod(F, gate, modulus); + + } +} \ No newline at end of file diff --git a/contracts/zkllvm/circuit1/lookup_argument.sol b/contracts/zkllvm/circuit1/lookup_argument.sol new file mode 100644 index 0000000..13d3288 --- /dev/null +++ b/contracts/zkllvm/circuit1/lookup_argument.sol @@ -0,0 +1,22 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the +// License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +library modular_lookup_argument_circuit1{ +} diff --git a/contracts/zkllvm/circuit1/modular_verifier.sol b/contracts/zkllvm/circuit1/modular_verifier.sol new file mode 100644 index 0000000..e9febc4 --- /dev/null +++ b/contracts/zkllvm/circuit1/modular_verifier.sol @@ -0,0 +1,246 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_verifier.sol"; +import "./commitment.sol"; +import "./gate_argument.sol"; +import "./lookup_argument.sol"; +import "./permutation_argument.sol"; +import "hardhat/console.sol"; +import "../../algebra/field.sol"; + +contract modular_verifier_circuit1 is IModularVerifier{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + bool constant use_lookups = false; + bytes32 constant vk1 = bytes32(0xd01dad89947ad38adc7e68ae52f8fb2a1c430fd535887b78fd3ac57a2cbc5f09); + bytes32 constant vk2 = bytes32(0xf347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703); + bytes32 transcript_state; + address _gate_argument_address; + address _permutation_argument_address; + address _lookup_argument_address; + address _commitment_contract_address; + uint64 constant sorted_columns = 0; + uint64 constant f_parts = 8; // Individually on parts + uint64 constant z_offset = 0xa1; + uint64 constant table_offset = z_offset + 0x80 * 4 + 0xc0; + uint64 constant table_end_offset = table_offset + 256; + uint64 constant quotient_offset = 320; + uint64 constant rows_amount = 16; + uint256 constant omega = 14450201850503471296781915119640920297985789873634237091629829669980153907901; + uint256 constant special_selectors_offset = z_offset + 4 * 0x80; + + function initialize( +// address permutation_argument_address, + address lookup_argument_address, + address gate_argument_address, + address commitment_contract_address + ) public{ + types.transcript_data memory tr_state; + transcript.init_transcript(tr_state, hex""); + transcript.update_transcript_b32(tr_state, vk1); + transcript.update_transcript_b32(tr_state, vk2); + +// _permutation_argument_address = permutation_argument_address; + _lookup_argument_address = lookup_argument_address; + _gate_argument_address = gate_argument_address; + _commitment_contract_address = commitment_contract_address; + +// ICommitmentScheme commitment_scheme = ICommitmentScheme(commitment_contract_address); +// tr_state.current_challenge = commitment_scheme.initialize(tr_state.current_challenge); + tr_state.current_challenge = modular_commitment_scheme_circuit1.initialize(tr_state.current_challenge); + transcript_state = tr_state.current_challenge; + } + + struct verifier_state{ + uint256 xi; + uint256 Z_at_xi; + uint256 l0; + uint256[f_parts] F; + uint256 gas; + bool b; + } + + // Public input columns + function public_input_direct(bytes calldata blob, uint256[] calldata public_input, verifier_state memory state) internal view + returns (bool check){ + check = true; + + uint256 result = 0; + uint256 Omega = 1; + + for(uint256 i = 0; i < public_input.length;){ + if( public_input[i] != 0){ + uint256 L = mulmod( + Omega, + field.inverse_static( + addmod(state.xi, modulus - Omega, modulus), + modulus + ), + modulus + ); + + result = addmod( + result, + mulmod( + public_input[i], L, modulus + ), + modulus + ); + } + Omega = mulmod(Omega, omega, modulus); + unchecked{i++;} + } + result = mulmod( + result, addmod(field.pow_small(state.xi, rows_amount, modulus), modulus - 1, modulus), modulus + ); + result = mulmod(result, field.inverse_static(rows_amount, modulus), modulus); + + // Input is proof_map.eval_proof_combined_value_offset + if( result != basic_marshalling.get_uint256_be( + blob, 224 + )) check = false; + } + + function verify( + bytes calldata blob, + uint256[] calldata public_input + ) public view returns (bool result) { + verifier_state memory state; + state.b = true; + state.gas = gasleft(); + state.xi = basic_marshalling.get_uint256_be(blob, 0x79); + state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus); + state.l0 = mulmod( + state.Z_at_xi, + field.inverse_static(mulmod(addmod(state.xi, modulus - 1, modulus), rows_amount, modulus), modulus), + modulus + ); + + //0. Direct public input check + if(public_input.length > 0) { + if (!public_input_direct(blob[865:865+320], public_input, state)) { + console.log("Wrong public input!"); + state.b = false; + } + } + + //1. Init transcript + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + + { + //2. Push variable_values commitment to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x9); + + //3. Permutation argument + uint256[3] memory permutation_argument = modular_permutation_argument_circuit1.verify( + blob[0xa1:865+320], + transcript.get_field_challenge(tr_state, modulus), + transcript.get_field_challenge(tr_state, modulus), + state.l0 + ); + state.F[0] = permutation_argument[0]; + state.F[1] = permutation_argument[1]; + state.F[2] = permutation_argument[2]; + } + + //4. Lookup library call + //No lookups + + //5. Push permutation batch to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x31); + + { + //6. Gate argument + IGateArgument modular_gate_argument = IGateArgument(_gate_argument_address); + state.F[7] = modular_gate_argument.verify(blob[table_offset:table_end_offset], transcript.get_field_challenge(tr_state, modulus)); + state.F[7] = mulmod( + state.F[7], + addmod( + 1, + modulus - addmod( + basic_marshalling.get_uint256_be(blob, special_selectors_offset), + basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), + modulus + ), + modulus + ), + modulus + ); + } + + // No public input gate + + uint256 F_consolidated; + { + //7. Push quotient to transcript + for( uint8 i = 0; i < f_parts;){ + F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus); + unchecked{i++;} + } + uint256 points_num = basic_marshalling.get_length(blob, 0x79 + 0x20); + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59); + } + + //8. Commitment scheme verify_eval + { +// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address); + uint256[5] memory commitments; + commitments[0] = uint256(vk2); + for(uint16 i = 1; i < 4;){ + commitments[i] = basic_marshalling.get_uint256_be(blob, 0x9 + (i-1)*(0x28)); + unchecked{i++;} + } + if(!modular_commitment_scheme_circuit1.verify_eval( + blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge + )) { + console.log("Error from commitment scheme!"); + state.b = false; + } + } + + //9. Final check + { + uint256 T_consolidated; + uint256 factor = 1; + for(uint64 i = 0; i < uint64(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf]));){ + T_consolidated = addmod( + T_consolidated, + mulmod(basic_marshalling.get_uint256_be(blob, table_offset + quotient_offset + i *0x20), factor, modulus), + modulus + ); + factor = mulmod(factor, state.Z_at_xi + 1, modulus); + unchecked{i++;} + } + if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) { + console.log("Error. Table does't satisfy constraint system"); + state.b = false; + } + if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!"); + } + + console.log("Gas for verification:", state.gas-gasleft()); + result = state.b; + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit1/params.json b/contracts/zkllvm/circuit1/params.json new file mode 100644 index 0000000..2c7ed2e --- /dev/null +++ b/contracts/zkllvm/circuit1/params.json @@ -0,0 +1,54 @@ +{ + "test_name": "circuit1", + "modulus": "28948022309329048855892746252171976963363056481941560715954676764349967630337", + "rows_amount": "16", + "usable_rows_amount": "13", + "omega": "14450201850503471296781915119640920297985789873634237091629829669980153907901", + "verification_key": "d01dad89947ad38adc7e68ae52f8fb2a1c430fd535887b78fd3ac57a2cbc5f09 f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703", + "ar_params": [ + "3", + "1", + "0", + "3" + ], + "columns_rotations_node": [ + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0" + ] + ], + "commitment_params_node": { + "type": "LPC", + "r": "3", + "m": "2", + "lambda": "40", + "max_degree": "15", + "step_list": [ + "1", + "1", + "1" + ], + "D_omegas": [ + "23692685744005816481424929253249866475360293751445976741406164118468705843520", + "7356716530956153652314774863381845254278968224778478050456563329565810467774", + "17166126583027276163107155648953851600645935739886150467584901586847365754678" + ], + "grinding_params": { + "mask": "4294934528" + } + } +} diff --git a/contracts/zkllvm/circuit1/permutation_argument.sol b/contracts/zkllvm/circuit1/permutation_argument.sol new file mode 100644 index 0000000..e88590d --- /dev/null +++ b/contracts/zkllvm/circuit1/permutation_argument.sol @@ -0,0 +1,93 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "hardhat/console.sol"; + +library modular_permutation_argument_circuit1{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint256 constant permutation_size = 4; + uint256 constant special_selectors_offset = 4 * 0x80; + uint256 constant table_values_offset = 4 * 0x80 + 0xc0; + bytes constant zero_indices = hex"008000a000c000e000000040"; + + function uint16_from_two_bytes(bytes1 b1, bytes1 b2) internal pure returns( uint256 result){ + unchecked{ + result = uint8(b1); + result = result << 8; + result += uint8(b2); + } + } + + // Append commitments + function verify( + bytes calldata blob, + uint256 beta, + uint256 gamma, + uint256 l0 + ) internal view returns (uint256[3] memory F){ + uint256 V_P_value = basic_marshalling.get_uint256_be(blob, table_values_offset + 256); + uint256 h = 1; + uint256 g = 1; + + for(uint256 i = 0; i < permutation_size;){ + uint256 tmp = addmod( + gamma, + basic_marshalling.get_uint256_be( + blob, table_values_offset + uint16_from_two_bytes(zero_indices[i<<1], zero_indices[(i<<1)+1]) + ), + modulus + ); + + g = mulmod(g, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, (i *0x40 )), modulus), + tmp, + modulus + ), modulus); + h = mulmod(h, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, permutation_size * 0x40 + (i *0x40 )), modulus), + tmp, + modulus + ), + modulus + ); + unchecked{i++;} + } + + F[0] = mulmod(l0, addmod(1, modulus - V_P_value, modulus), modulus); + F[1] = mulmod( + addmod(addmod(1, modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset), modulus), modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), modulus), + addmod( + mulmod(basic_marshalling.get_uint256_be(blob, table_values_offset + 256 + 0x20), h, modulus), + modulus - mulmod(V_P_value, g, modulus), + modulus + ), + modulus + ); + F[2] = mulmod( + mulmod(basic_marshalling.get_uint256_be(blob, permutation_size * 0x80), V_P_value, modulus), + addmod(V_P_value, modulus-1, modulus), + modulus + ); + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit1/proof.bin b/contracts/zkllvm/circuit1/proof.bin new file mode 100644 index 0000000..128da32 --- /dev/null +++ b/contracts/zkllvm/circuit1/proof.bin @@ -0,0 +1 @@ +0x03000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b000000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b86864390843455559a33435d7ea0e466a55ff1cd88cbdb9b23da131de61fabcd7fcaa0000000000000023390843455559a33435d7ea0e466a55ff1cd88cbdb9b23da131de61fabcd7fcaa1f1737f0f9693494b37fd517f70fe4d844c0e4dd11e9df8639a0be9abfccb55b1d29505aaac030050d3792476013adfb07205bc47b474fb794a32631b037ef4e1b7417b4df0e06e7817f2977d34f78391337465946f76b67edc9572bbeff8ac511ce91c555c0f0194215db64e06265e6df1498de55ca9c5eb4d55d1e7117ac84094476885b462285877bcf57208d591d1b872dc6503b26d072945200bafdb5d71908d8daacc4b07e4a6d48f861ebfd823920635ba3a814bdeefda0ab35765e932e5650a9c85eac9ba56b0cb3a2c2bd9189a3e4df9127c2123ce59a03a6f48d33390843455559a33435d7ea0e466a55ff1cd88cbdb9b23da131de61fabcd7fcaa1f1737f0f9693494b37fd517f70fe4d844c0e4dd11e9df8639a0be9abfccb55b1d29505aaac030050d3792476013adfb07205bc47b474fb794a32631b037ef4e1b7417b4df0e06e7817f2977d34f78391337465946f76b67edc9572bbeff8ac511ce91c555c0f0194215db64e06265e6df1498de55ca9c5eb4d55d1e7117ac84094476885b462285877bcf57208d591d1b872dc6503b26d072945200bafdb5d71908d8daacc4b07e4a6d48f861ebfd823920635ba3a814bdeefda0ab35765e932e5650a9c85eac9ba56b0cb3a2c2bd9189a3e4df9127c2123ce59a03a6f48d3300a3dff88bd9509adea9da707a0f8ed8dd100d7759fdee4f61dbf448532e3cbb36424a2464e95c40fde398f8ce172f3ff19b15feff8f068637d0c102005d19d60f3114c664f481e6028c47f122b53b12f6aa455ea26f54aad80ad778950b21773da8d6f3b802e97c62207f400077969769aab69ed1e315cf8d7c7abe9560ce5b2d3e5cc6659cd3288008607dcd20d37d3bd464e21db1280e83838b6d6ab524d82acd90c58b8637d005a76e69a474de1cc5f432a41724e855b2a0b19b71a52150268af7a9c709ba4ccea993bdb6b7e4e6ab971e9e695b77ca73e7ae951e8b9289277b3d077e65208b010bc2f62957e87b900bd1f007ef61acf14649463be06cbb39e427f6c488214d4a4b6ed7d9c800d6c61c36db465ff836773e825334bc9a6c308efe88baf9b3bc3787b68d279234d783ef3e4064de84b20dc2a1d72eb2e0e30b33ae6368f06867ba84e35431096c288d88168a04c90c594de03c8ce09ed7673f9f27c0c15a9aead606186784b9df044f52c817a559e5273c9398043a3083613895862bf8977c1d84d582a2a22ba128dc3ff08e1ad0381928c07f01e2ff2e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001397aef946f4a2f3d330955086a9c61d967f0000d540c04a068b6e14b519f27392d94c6a0eae33625cea4cdc34f2c46200f14fd0f10bbb313c40e3ca46a8430a008bb54962c0c3dd8caf254437324e7440dd82041de60bb1c8e2961498c075f810000000000000008000c0104020103030000000000000014020202020202020203030202010101010201010100000000000000030000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000301010100000000000006401e1b8b7383e2e5b905aaf5ff8e73df2f3669ec6d652e68218193404fd92a5cde21e4748c7c1d1a46fa550a00718c20d0ebdcac8ea41e90fa1799f09d26d5a3231689b941936e7c9d1c56cdfdc8435bebcb846c2ae74e16705585dfb53dd3d054297646be6c918362e3a9320237bca41456c22cd121fee2ab43a75137c22c2fad30b09e47e1286f118db205f4e950cb9ad74f83da7b39771612702d9d352311a30f4f61b81ed790ee724dfa0b16af34654af715218e13820586bd034fcadcee5e3373176765ca2b57c47a1dc88e93fa05cdb9c8504c38681b90a9514b09af582c0c8ce8989a35d4a83b85e237716c05fa548cd0abbd1491000883dfa1f650a7d51e1b8b7383e2e5b905aaf5ff8e73df2f3669ec6d652e68218193404fd92a5cde21e4748c7c1d1a46fa550a00718c20d0ebdcac8ea41e90fa1799f09d26d5a3231689b941936e7c9d1c56cdfdc8435bebcb846c2ae74e16705585dfb53dd3d054297646be6c918362e3a9320237bca41456c22cd121fee2ab43a75137c22c2fad30b09e47e1286f118db205f4e950cb9ad74f83da7b39771612702d9d352311a30f4f61b81ed790ee724dfa0b16af34654af715218e13820586bd034fcadcee5e3373176765ca2b57c47a1dc88e93fa05cdb9c8504c38681b90a9514b09af582c0c8ce8989a35d4a83b85e237716c05fa548cd0abbd1491000883dfa1f650a7d521b211d3615f6a0bc517ca1b91a1cc830ee9d10623e044212550b98106a27de812f9112b3ffe1fbb8534d6b63a3b4d2e7da3f363777e292381bae4b529915a2a29a96393d22f2715d04ccd8a859503311c08fa7aa2a0260ac9536a844ae905db1eddc2099265b17d3c4315c335a3b21e34ac930c9def205e05e1ed4b7eb30b1b10c341dd597b65bc43da9db380092aaa25bb172f8f4bd01504be99aca81122a6174e98a02beb7bcf1a6efac0895188bf9d22520860af10311b08a47ec189489436fc2fb7fc4e1123bf41b15ce416bdc9e154385260c89cdb847c3a225652cbb10e78865c9400f3aca5f50472d90efe5b7ff79fe8a337ed890b14ae808899681f3891d43743e7c6ea9ef2b4668dd0cab181ffa9c7d65709fbd8c6f1458aa7f2f8115e6655b2217413d0319b05623e865febdc6b3d05b84495c24b331b91e9ea873b7f224a7b4ace293b6f562a3e2af552c14d76c6f85d0564f5b021da6788e94f3fe11c4f35bc8932ff469649b25a3379c4719e4c5650887eee2a41a26093af4705e3508fe05fb27232cc0e9a5b56133139667f0a530c0810d2c44abe825386d00a13c1aa98287cbc53273351635ddb9a631663fd04c1807c68294bedd13227a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013b074e03204f4cad7435d08f6ca6914d3bfbeb3b59c3db122d949b9c20d08c6709188e0f7507e9c5f02958cdef3ec3662a5a05b18535050775de705665d6c8e8249c577886d36f674db0073cc7dfaf47b059979e6e6126dbb1437a83e2e654e70b729613d8bfa5cac111607798d8e9f51fa06190ab2802a29672f229b73854f43a1408253886d2cf38ff9f1c150310310f9c5a07af9ff7f6b28b4c518e162e733ccb99d80bfbdfc6e9c69e587ea1db15503a1a9d33b487c4d37f80e1c328534209423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c72488509423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c7248850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000030d5089697900f486566b25f937f0c13c19035483fae49286eebf770f651fd0d3450935f5c08b5ba732fec2aae8bc669e710b184f199794f62f0f1119def62f43bb05ba472fe9f607276cf0eae181f3df3e75bece43ce943391be0b4a39054f837bc0fccaab13923f84568390f6aefa9196a6fe7b297f541e70051016fe153780eaa767ff83871ece09a83b6b7081c6132dd314a36e56ca2610a002c374fa4612c0ca32c06b9eede6b755463bdf6b612de3488709ae47575b0c411260dd0b66b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013c5c59aa5381eb0793a266f332e604bfa9586714b997c0e69f62d86ff3d0bdba1eced22b1fe4ad3fb2dd796efa07efdb1876f1d2c8b4ec89dee8678f46497e620a898b9c12d595e62186a40699b2fb175a7bbf5a863310119e1710997888b04d00dd803e8573f4f5e2efa4ad24a77d03052b667076c31991da02a42511c2632b37e19db43c4cc56bed77a7a9303a422616c9b7025f170bb5c47acfce69afa17f0345761d7080e24e209afd6a601b6a044d7ecaa82f5221dcc6d3b708c2177ae5259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e81a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c6193c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc47218603e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b2c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58671e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba02259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e81a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c6193c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc47218603e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b2c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58671e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba020a4cbbb39b871defcf4bc6dd245aaf529dd9b08e97e7f2c46f9e9979d78825562e2b46ffc36d4f5685eb00c7ee014f48e8153f1f919ebfe151c8d6542e6cbaaa2b328097c5d2e75095a089fb6c5a6a784c55b5a6c101c81a2655e6066e33eeee2e5068f2500b62e78899f359b075324e60c92cad6ac5f5e3f1facd7f51f5c52313eb6578a5913238011c1163652ecd7eeb27476da593b0d4ae86ccb3f1a9f13603c736fbd97c2ca6fa8b1d62e93c6a00af516e598f9023c35254ff28582fd2a825d3645f6e411b3bee85a0adf374008ca3b61b5db5f7e46ddac27139047548c82ae9ac07bf19b73bf8be12e85a75563d086eaa37414a37d9ea20cea4043125070ffe80a5f23019e0ec880642a3959f86b64383cb2e460f25501f1c138bc12a930cbc44318fb49535b2ebc087c7de5dadef0623c6e789d2738e02813db54a097713ae7a52f4129b5e613854042e2b675db092a3928f1e5e133a424dc1f6de38231a098260efa5254e77a1eab0c4bd7f60d42653d1fb07953aeddb8b390dc20cdd3fb50d2f53229e58bd441cee45c940dcba139bd8e785eefe840ac2d181cd94ce1bbf121fe1c3aacd74d0d3605b05e0efb61a43729e22c874722597510560922c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000126a5f2925168380670d3f83a7bd3928c36b0d1d9f3303053e4453cecd10dccd02ca244ea7bb6dcc27df8e39c6932c4e07910a5affd6b00bd098462c0a784835c3470b9538776dd1b6c7c5cf1fb2e46b5c97ea31c3a93f392e6600d348686a904215e65df09ef8acd4f87d8c2b6aea41090729954662e6805302be0474d3631c30662df001373161663f7efbe2fd27d0026cf46a6840996930fa6021ee5d2ddb62c6727b4734283bebabc09dbcd16d7a7626618b1dffd0ef23222002c369aee74235ada66b30d9ea891e5d5862b7a632a32acd508c18862d2b81d2fc8f3768de01ca525994cf261576e1a2a79d4859cd5ef99c3f347c49648e11001240c89722130c644017f44194ad97d2b9ed963efd2b8d2f733b50ffbe666378d12c150c55e0f39bbfe80bbe6b52682d461269c102d6973a1c8543cfd3532f5a3da3eaf3aa333df54077c547e763f71da1a3ef3af1d354b090e6d69002d338e2e96c693dad30c20abf883ab8189c08e25e5c10c50e2ecfb8fed9be3f8ee659f0256396c252e035ca4256da6784f3d3942833ac26b91815cc957fdd91c739d12253de0e3461b3ca35bda925987b0c2c6bd7cc53d946ea0e9cfa40b73dca7fc1b0baf1f1cb9e6235ada66b30d9ea891e5d5862b7a632a32acd508c18862d2b81d2fc8f3768de01ca525994cf261576e1a2a79d4859cd5ef99c3f347c49648e11001240c89722130c644017f44194ad97d2b9ed963efd2b8d2f733b50ffbe666378d12c150c55e0f39bbfe80bbe6b52682d461269c102d6973a1c8543cfd3532f5a3da3eaf3aa333df54077c547e763f71da1a3ef3af1d354b090e6d69002d338e2e96c693dad30c20abf883ab8189c08e25e5c10c50e2ecfb8fed9be3f8ee659f0256396c252e035ca4256da6784f3d3942833ac26b91815cc957fdd91c739d12253de0e3461b3ca35bda925987b0c2c6bd7cc53d946ea0e9cfa40b73dca7fc1b0baf1f1cb9e61450b86881ee62ce14e2dc3dd9ec39fecd54d905e2116a08bcaf35074d0252d41a44f4b3245abdbba3add948fb9198013d7b5228006fa191e326d18c182b5fdf06334b596acdc68e54a65a54b3b9ab02de3ccea8bfdf7a022d54627b12a1e5ae17627d86ad2c57da40acf56e94a279678d2c4e6f242c9713399a1f630701dc041cefd86a95dc4b582147fe23cb6bdda62b2e13f63893352d8106ec2a7c51c4ce22dff2fc045e13c1a58de8c94855dcc2bbada54864782b02b04a6944aca452be0ae7592f64362eeb6c7da0c74fa53312397567d73678fb7209bb2333079be6620b4be4333bed2bd25c32590eb7a4670c482e784ac56040cdabb79588bbedac1b1bd573db3ee65572df86d66b2fd88163d94159a3b93651e2102d590782dedc9a250ace7d466517268157648e3ffa8f12b8867a0aea07087232f3c955f5a6d0a224402d27dd806593b819c36d5bdb17c967dc04890c7695a05366f840b1d7c918194445848f7a136ef48a363cdadcba8257c234ef1e1577f24323bd9b611eb00711ef7b42deaba5db5f2ab63f9abd1335f446c94fadd4056398fe1553143a73a11084c20d2cbdb2ff4ec115bc2146c5506cc3c1120455f360db4f5c72ec16fef300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011beb16ee188c239b27700cf98c43b24b27665d7d2e3fe7582b2720b534f6b391367c242c816bd311cb88bd53e79ad84f5783a2c6350cb8ca28b9adeeb9fde55421816b9474487a26380456b6987add95a210991569b27a6cf987c2abbf17b08b1b555d4e96d1a1fcce869e7334dbe6f819c62c8f406d3f495ebb84b1318eb31824349747045c816d3a7876c6d7c65a7aaf924e2735e6e53206a7ffbf8a07c79b35f671a13d4902d69e127b3f98ebbb30aa316c57bd5f74660e6cc9b314c07566199708d32e6449e450523f4e624c14d8be8baccc0b83f0e5bd5d9dfff78b4ffc2668f72cd19bb61bafadc0b19db3eb2763baec2ffdc90835dbcf92ed0874b0053ff32c1fe7f57175919b3c87eb7c683b9673c7003046bb6119a6e512d5b88feb000cd3e0180a8e8a6e64c378148397c48bd2d1fbd9063dba7f864bda2a4770163fbfdc9f87cb374bd8082ea7996e092967287f10cc2dc4771b8db5aa2c9acf93004023607834c8b427f7d1586691f6d6bb1e19eb3d1f34a47d9f7b42d365306e3ebf4f1da6f8147b3828e945ff262dce7ab01763d7b0f1e5250fc89edf060ddb0140b0e25907eb84c7d716ba00d9d231a7968198319c0736741d684e20f9f226199708d32e6449e450523f4e624c14d8be8baccc0b83f0e5bd5d9dfff78b4ffc2668f72cd19bb61bafadc0b19db3eb2763baec2ffdc90835dbcf92ed0874b0053ff32c1fe7f57175919b3c87eb7c683b9673c7003046bb6119a6e512d5b88feb000cd3e0180a8e8a6e64c378148397c48bd2d1fbd9063dba7f864bda2a4770163fbfdc9f87cb374bd8082ea7996e092967287f10cc2dc4771b8db5aa2c9acf93004023607834c8b427f7d1586691f6d6bb1e19eb3d1f34a47d9f7b42d365306e3ebf4f1da6f8147b3828e945ff262dce7ab01763d7b0f1e5250fc89edf060ddb0140b0e25907eb84c7d716ba00d9d231a7968198319c0736741d684e20f9f226038f178447887833d083f5f9a8eecdd760e68df98af3bed13f90683ba6e87fef29ad42a69c2e93f392aa66d7ed3b9df457f55990ffdac14b3659ebb609322be7188d2630c17464fb4fbb7de52171a8dc6a328c843021e0e91252173a441c440230b8c30a5d818e72164dfc87a25d6f6527306b39ec7541253196e00cd1d61e0f0f4cf45a56fae7a75c66bbac8cec0f932ab0fa0a2745341b4f14adafa0f5d1131539839b16dcf5dbafd6930df0d999b5f222708d23f1e1977a29e984f4c7b5f0010cb1362eeab2224898ba3f6a90622881a1643e8d9a66fe6b515398b0cacb2d08af2e59baaaf9f222d0b8f921328b312c533b717b05968c6720b2b1bdab162a0679d7a997174d5c8a53e7338cf77a54a055d546e4c6e93c63918aed1f87b18c12ec8cccd6af177c0e2620749e1163989007659920e35aa91024023fe4fff24911daf319db04cf2ed44b826a3fb1153d8a66070abc09575acc8bd7976038b82b3af1b8676a9c6715613248afff088ad1e72b661557f376afb5b111a386c66ec236c607af4a3782480462bddcbb955b8bfa052184fcb056d951dd8282068c0c9e2084388c021785ab4703cf673ba086e5d1f8f0becbbfd85ebcfe4fdafc8a3875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000116d3b1db91737ef1d5de49f8026bb04fc6d3241e5863eef519ab29f189f68294096c2b5b04baed35e9cf07fd7a6d1ccba9a43c176caef07f87ddf7007a358cbb1878eff685cc564b57c7c96b708955eb47716f4ca7a74c670b0ad965b9b62ff3008beb0fb6ad44266273ea5660ac2ce3336d48e16bd72c12b8bba910ef3c1c8924b0f9649626789290420e7cd9c80f1aeca4e39c53b888e5e82572cefc81e0a62a0b604225db8906be57d35f6f784ef72c5b8e2436c19449e8bae6548b0cb3612bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1871b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a2075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d938a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c62824af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d1b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec42bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1871b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a2075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d938a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c62824af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d1b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec43f2dfc56a569b232fb0cd164124b4a1e052b4717ad55508e134cb9e5129703ba3d9d000d72a76e20d6b8687807415d47d0c422b094cc1d1f9a10deaf8daff36704f22585549da1e68539d3d36cdc2659ce51f63b25470aff1ddf5ced5598676b16cd476b360228fe65b0b9a7056b4e59fa3726f9afd6da459c5518229693f19a165e70d81fa89ff379620cc0a77eb1f40a5c5c384f0ff180105cc548ef874c7c19a18f27e057600c869df33f58814e0c0f589684b7e9c954a2851f68d078b386069905e02e02d8387c19bd3dcbb7baa7d9413faddb8f71dcf9dcb32297f41b6106887301806dbc3e19d032ea7e4059720b2a46eebfabb9612a0461482c62782f31e97f7e1a62f828b9e84050ed2b73fad35c1c170d5cb5aecfbcdfc1301f61452d3e5d8707fecb838d78079e0e2e1bb84a57aa8f0161a99086a1976b2baf64fb0c49a1b45ea7f25482a0ac4ed04664e0eee8a9691c7d6901db9aa3abf48ba7893322e8fa845ee3f84ff9597992abf8947a23eb02db9fb1649f92651459092a253b2a4af4f3090a24615865f0bab7589741152f134cc0b6c825f3d8b9db248292168796af202ed7d6d64441efe438e03066abb1ce30edaa9751f0937626387a5b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000102724c839ac2868a79b3abea5d4b3a393d8c96f8cb8de831d2a82bd3e227496f0845947f943e84d3c5d9e5e7ad501401fb51b3657cb392d5287ca3f5d609a81939a35dba926df99b6c5a07cde0f60cc9ab3351f7d08a905715179b4c62f3293b2cb44da81a573ff3c5171cbed85fbc8f89a41d1e18d4dfd889fb8d9c156338092c8a101d2733526d7e8102e90621bfd94e67fc3435717b680d2dde7ff1f6e539302203d45abc159ab973bfb271be1ae3e51adac2c9584841fe437c314395c57e2ef652b3ae7c09697e77730e53638cdce761b53eaca34b8d647514d2ee86b9da1109ad4c5183f69681888cf1ac9c73233ae4e3bd5ca9ad8e34b81c1a117946272acf9d82686c2f0f78553f47a0f1c0501e14bf4543498e702ac1d557a8a1a13f1530627d9793d0f087aac0b85f0e3fb00431d9b6c6036aab6e6b5b95575e5ec2160e138c0a1ceb4d59aa3c6624b8c1902f93f1663488dcde0a4197ef4b28263829f1ec73f5e314b2a655c399db473e6ff2b2a795d4c41c3d8eeb98fdb4d7d9c92e4661bc32909882c0532dfeb79bc7d0cb9d1e02fd5f573a9a1ac6bf77c8bf1711b99e43cd6f677d3facd2014864382f56a97af90beda1e0ff126a2d883740ea2ef652b3ae7c09697e77730e53638cdce761b53eaca34b8d647514d2ee86b9da1109ad4c5183f69681888cf1ac9c73233ae4e3bd5ca9ad8e34b81c1a117946272acf9d82686c2f0f78553f47a0f1c0501e14bf4543498e702ac1d557a8a1a13f1530627d9793d0f087aac0b85f0e3fb00431d9b6c6036aab6e6b5b95575e5ec2160e138c0a1ceb4d59aa3c6624b8c1902f93f1663488dcde0a4197ef4b28263829f1ec73f5e314b2a655c399db473e6ff2b2a795d4c41c3d8eeb98fdb4d7d9c92e4661bc32909882c0532dfeb79bc7d0cb9d1e02fd5f573a9a1ac6bf77c8bf1711b99e43cd6f677d3facd2014864382f56a97af90beda1e0ff126a2d883740ea1de3d4bce06b42198eae94a6f1dfdc75dc24f6997510e65a24910425e021ae2333f2b7ed47f7856ef53c59d1176dc340e16dbd4ffbeaa34b8f12f425e46753030e336e2e5226abe8fbcdff736db4e3f738e8b6205468b8d67aa5c343273535b0047753774a51f6cfa571f34fe94a79e3ecb46f1877dd157c8ba2e5c75ff3b4ff0fa1ae59fddb6b9adaf526975e39df5458f9932fa9e19ad1fa451d7ab12745a415ea52416e7a587aec0b33c1f23bf92f14f4cfcdb7542338aa763af82c0cfaf52c0495ad8dee3910777e6ff0726b913a16209edefb4df9e6d4040a1e2c1ff6161c23a9dd8057d4424e0aa40a65228e8ad90ea49260f18f97874f0461b4902bf8115f91808ea4f0d3608dee915625e47cae0fe746151e4ea622de1a4ec99bd0052c160ccdcc3eccbd04f689f695d8c129f99a4962fcb2f2cff6efb9c305db3cd32508dd874cee153ed8dd03aedd20fd55c2ce6fa932b5ccacc5bb60761ae953251552905690cfcfc984cb1e90e3bcc995106535da7ee5771176a716317c7958352eee419f3d7ce03e589c2ebe6647954bc31ee10efa8985d0bd778ed4d6a200110add71751236b3a5ab2c12dc6512d1442a976a95082255e9cdaeb8f4b836b9ed00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010bdcf3a50e1c2740f10c63fafb9213dc1372c8907669bd12bd59edcf78f5382a2319485744650301d738d25c6acea202161badc3e30d202c1690b054fc2a2d4b37deb4d6275a0eb18a4b7d8e05e8e841cfe268cfdffbb59d4f61663e6b29da0738081f39d703d8783385ee00278e66981eb640edb2f13651b9094d917936131908b4a353c69d8e35bef969d0fe364da8cc5cce5c7ffb963b665c4b7c7d08360b2a2e814d9bbbf39db37ed3d6a06a179a25b97be86d0da12aa83798b1a31a2e4934016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe00bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f861250210407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c3bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a51423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d33524b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200634016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe00bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f861250210407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c3bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a51423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d33524b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f120063d02f7a85a011ab3d193efa523c5d182e55a5787410c926429866125060f3aa428d4513e02feb3da4b5ca97f23845ccd2494d1c529f1e012ca0e61d129edba562ae9ac07bf19b73bf8be12e85a75563d086eaa37414a37d9ea20cea40431250725d3645f6e411b3bee85a0adf374008ca3b61b5db5f7e46ddac27139047548c80ecb69fa9e2459cff953c2509f39e344097798a0225f99849aa7eafb331f51720ab77f8f77b9f06824e6bb047d95b9828160b0b8001b2b5de47b979d8d0a629f1b1cab55855384e9b66f3a59f489a5b3877df175e591c7aecb6fa1ae9433943d1c540f1f7b7f2291d1eb33f1471739d15d07e38e9aad0f94396f5db86d0a74f03f03b651336479cf7e5f8e176e2dc3bdb8cb77b08c79330524d0c7c37a077c6e292e9dc6880900dedba48d1d694b3b26fc8fe3ecec53611c003a1900b101b5093ac0d231ab34d03d1e7f80e5a225b34fdd32e8189f4a590e142acc9ccea949d91ba9c8c6afbe6cbab07fc606b34f4399859b369b265719a5c9481f37e65c5a3a1224da528dde0285944d29f07843b8aacdce3e7002b30e8a85bd90230a9c258e1d5da3e25fa63f43fa34e304957ff5d1a3d35de359b816331b4beeb998868c2e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010143cefbbaf645c7636246b17a3d9dd7c17193c380ba635b4497d7873d59ac2c139440638326766193946c8df7df1acfcc2d51b34b4ce2eb1d3f88fe8b2983420e0d025664586f2340986e96c7431a1cbb961b962ad55815e8272c5f8c02f07726951aa9ad6c828ab5f225e060a8f17da3f990faa09b507ec8611a888378785732337d5aa6f5a19910865a962b09061c4f4ab8195a2c6e64d32bef72d824289020e655e5c0ac823e70207e1a51e86c5669f3162317d8e8f40265932637baaf1101844652b7767569126315e53419b86ba772190d84ec0ef1b498b7f94d9e39fe3e7bb9ad48898a96ed9cea1acbe647947ad47fee8460ea29e49478f3b261c60307955f9d95504b0d5bef6d7a04809a1a453a7d43989c4ab886fb97de841721f6386aa0626aafb4f2a4109285fb7f65e5dd0c1bb870b0ae631231990e7be8de0b25eade13ea917742cbad2362168302835a247251fb0d759aa2e9f7589473a9ce1a1521ec156e88bd3452dc9de97cfd7cc82226aa0e3f8380f64339946b8c56333d96566394d7544dfa61b0ea708f0c907e2909a1d4a959cdfc3772e0e64251040269a99c6b28abb2059e4f158f70f36fa41d8f5a34a39f4d9cf5be0c19bdaefd01844652b7767569126315e53419b86ba772190d84ec0ef1b498b7f94d9e39fe3e7bb9ad48898a96ed9cea1acbe647947ad47fee8460ea29e49478f3b261c60307955f9d95504b0d5bef6d7a04809a1a453a7d43989c4ab886fb97de841721f6386aa0626aafb4f2a4109285fb7f65e5dd0c1bb870b0ae631231990e7be8de0b25eade13ea917742cbad2362168302835a247251fb0d759aa2e9f7589473a9ce1a1521ec156e88bd3452dc9de97cfd7cc82226aa0e3f8380f64339946b8c56333d96566394d7544dfa61b0ea708f0c907e2909a1d4a959cdfc3772e0e64251040269a99c6b28abb2059e4f158f70f36fa41d8f5a34a39f4d9cf5be0c19bdaefd2813fcc45e8a5285e1cbacf5e834ff98a3fcc1b460a42b7d0660eb37cdfa139401abfccce5b34abbe8de6249bb2c8c7771066efce6bff4153e2ce331f0dd5ea81f2bd313a18b1e42d89b7d207b2f2c1e05d28aef36909fdc84213eedbe51e19214e27fca6323d4584eed848a4f11be91bd8da27317e54d1045a1f1580a1c351c014e8ca1340b71803f6c6aca735bbfcd6e44bec4594c9fbf3aa18eef149d74730f7ce8acd88fdc066f58801ff563035b4821eadbea8931193a84e1a44e9ea2901f98ffbd8a3da345af88fb7fe10645f12fb00c65b19dbc221d0bcb634a1002f613ce0233883d7e84dede2a35057430ae15ae6c3f69e55db5a012308e304b9caf386e50ac287fdf164671aa74a1a0fbcd991e733b3c4d22cd3ad54fd414983f86154741743258f7f3339586900485c8b8b9db97e47dcd0c7472c86185bf6287ef0950f3cbfb7c66bf4cab00062a21cbdb172eb8b53313b03a0e5493a79246a0521920edba972c04b4413bd718855927b0832e20f636920f806c5e0072a06de3b81d7d530514521efdf9645ba452bc7a87c60ede23b639ad37aa2b388abc959ad10d3193efe14d043381cee2719185b8426a97e763868ff513629e61d6323caf3700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013b6b9c73a07dbcbb9623b54515234117aee9dd9b895762a8bac498ce487388e010abd2693f80de75d448bf4fc83fc6d09a6e8667dde5788732c48435e913dc73104bde2ad832adf4b8fdb681fcebbf5f5f79f2eed0959504933e03ea6b0942ce0045343ed52ed0e08ff6152fb0e4621aaa4bad90e352f9808dedabde2e394da81100079377da2ee8d79b8ba882f94451afe9a4578c0503ce6f00c3d8b2ed11e931db04cd50ad0d5ff8a795b8e223f933d9dc4cc4f0fd431b1bbb87d25b32bcd90076cafb6cbb7b6b52f780fabf054594d215b7b6ed9bf098f08207613d4d66803f89350493448494ad087f0540faba6b5030e1451bb10882a8ab298bc2b299810251f6e91fa969189ed584e5bb1a5be81a6c9692a40bb2fcb28a24e6328300803dae0916e05696e7612a7b1a44e5a41807da02696541461ee6a30c06cd7cff810b99d28d9e4f0d7b1a2b987ca783cb88841ef0dd343a7eef7cb2b87efc8f028034662d7261b0f284e5d46783587c34779e27a81ed5127a2c1c7a786e0370fd813a011cc4178b436782d9fa6f4592f9aa949ab45205247aad6f7d9a7aeecb0c8005fee33be874bc987d260590ba6d06558dabe4aa04287e6e29af96721134f3810076cafb6cbb7b6b52f780fabf054594d215b7b6ed9bf098f08207613d4d66803f89350493448494ad087f0540faba6b5030e1451bb10882a8ab298bc2b299810251f6e91fa969189ed584e5bb1a5be81a6c9692a40bb2fcb28a24e6328300803dae0916e05696e7612a7b1a44e5a41807da02696541461ee6a30c06cd7cff810b99d28d9e4f0d7b1a2b987ca783cb88841ef0dd343a7eef7cb2b87efc8f028034662d7261b0f284e5d46783587c34779e27a81ed5127a2c1c7a786e0370fd813a011cc4178b436782d9fa6f4592f9aa949ab45205247aad6f7d9a7aeecb0c8005fee33be874bc987d260590ba6d06558dabe4aa04287e6e29af96721134f3811409ce8c93f7f811e4366bad70c664e8906d7d5143809c2eb157f590d918d5c922b237df1957211ad9bb329c95503a3a65dfa1e2e6862db3065a1725c63affb0010cb1362eeab2224898ba3f6a90622881a1643e8d9a66fe6b515398b0cacb2d08af2e59baaaf9f222d0b8f921328b312c533b717b05968c6720b2b1bdab162a0a2127e241e898c75310b86d757662367ff7d7149f5f38db6df53d1481a724163f24c158dd0d5aa612f8c1ff4e58b60b116b20a97d37e932d5f3ba32944b3dfc1d3940d6b3ac44d0af9c2bac064408e12f59525e0ddefe41cefe42734d8cbb072bcc95c7b2c1f6595dd0eb930de8e6956b4073653d487c9551bf2306de9c8047229fafd6c6001f8451e1521cb0adc57ef569af29ef1ef974b5cc2377a18a929b10d8d57f4bf168b9a643d118f18f504093c97d50b25e9f2954726d5e927afa9b2612e27fa4d5782e70f00cfe75824a65c6420d99628ebc29cd8b5a628f0b2e192628a912af774137b0850073a52f6dc427126f570d49018794a9c0706733ef08068974e58f253445a77093ffc604ae5c8530c7cde8bc5dd49ac7813f1f5c26d920aac848056eced72587dc83fba8af2b70a95c19c5a37577233cf3ada6bb6cff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011ef76be62ad6e7e02da14a928ca9b3e101b5a6712dd859d213a063fb74e55e8b1591b5d002ab0bc1bd96a2dac2e8c7271c681da4f39a3f1eaf8f4b4ca6d7b944127d873b22104d0f0b46375ad78960db322003ce6a07ed94a2aadeceb42c18672defb1a5454faeb43acad301a70ab42518687d10fa14e9269b31ced6d7a65c68303f73320521c1731a2de80485b99196bda820a588904619cebb18d61ecd79b030174d1407cd3d6e0f9eee99117562f9aa89ce3de0a2853abaae283abb50c9e22536d7ae9327c01d3159ed3ae3849187e4fded6c3b9bbd494a7b15ae78e51dfe1ac928516cd83fe2cea612c51c7b6e783d48ab8fcdb13bd24eb21b3e871ae2033a123668dfc6c091f6c1a2267196d7a7346871251770c037420d0a8e5c7995f405edc99720393f6e093e5dd98e692858edde27d6f1dc38e45720265ea3866a0d225b100c5ee1c2d9d1c82ac037f236437cefd1c94fffdca5e58c7113ce5fedc01da4eff3a11e3d262e37d53fc80dc9bca556c732b94d1c75b3a0bfd931a012412bc7503dda68ce4118e8d5c117bb0f512c21e6f67d655d064963d38907dfa4be1438afc2259731bee7172a3ee844f0aef624b2058be79c154fc95d63f8205b432536d7ae9327c01d3159ed3ae3849187e4fded6c3b9bbd494a7b15ae78e51dfe1ac928516cd83fe2cea612c51c7b6e783d48ab8fcdb13bd24eb21b3e871ae2033a123668dfc6c091f6c1a2267196d7a7346871251770c037420d0a8e5c7995f405edc99720393f6e093e5dd98e692858edde27d6f1dc38e45720265ea3866a0d225b100c5ee1c2d9d1c82ac037f236437cefd1c94fffdca5e58c7113ce5fedc01da4eff3a11e3d262e37d53fc80dc9bca556c732b94d1c75b3a0bfd931a012412bc7503dda68ce4118e8d5c117bb0f512c21e6f67d655d064963d38907dfa4be1438afc2259731bee7172a3ee844f0aef624b2058be79c154fc95d63f8205b432adc0f1222742d33d793127796e834835158809590c722740b4b4811d9b7276b3b11c964189a71f114f8dba1ca7ac39f51d688fe8f7cfe6545df9575e3243c762200324024e69b70ced70d6d249c0adcdf0349867da0ff2750147c07c241622c27ba0c8147fe4844a8ef6668d2dd569ed454cb97387302e7142b452a2ef65a3c16854b42245a4704e7faa14323a277476b3acca92230f419d5c4f75a134fc6b007ae7619936a478d41c026fd88646efe6a9e4b19fc4acdf037604271383db15d0abe003460a462f4fc31a0637f8d253719132698391ea5d48d2a75d69693a9322b06f1edd79995c579b3c01d6adf168779937cc9dc173181c73c00ff50f7a9851a41181f640a7403918b2c004e2f502ff7f0bb47ada97039c8f9d36a7842d4552f0307cd4acf9a6b1384492e6263d501fcee8a18e58a41afc686146ff1ee4ba91781e5119e26caaf6fb92129f0a492650d195901f356d80689ff27635e3594ce0902a95e3d089d845901c437ddffa764910f58ee88434d4ada59fa79f38f25850ba0c5c1b728a963a4ed4bc85075192a68444ed9e670f2982d89aaa858b7423113b5c6893b3b2420508f6a10f58e0fc150e23935a2be4fc7a1dd3afe4324af0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013d63118ee0faf133dc4700cd42aa9925ba57e373071764e4a1d4befdce01ad7e1650d05af8c79e4e162826167c3205b1d9334e7261dafc200a0068a7d309299f2c2d20c6eae1c8e4207d1e617c9ea297b0415a352d9098c8e89574c9834ba31c370c6a9cc1b25bb7dd86dd97b019175ecabebecb29e0ee628742d0db4cf3bda70b8e9dca6f315a0fa44f5af56e0898fb8ae5f5eb0af5843f7a563621333a4d323917e0fe9bc744e38d5bb00144dcef1c420810a58913ce26b0def3a812d0aeb31961932c86c70d27431b51514f0a4e8ee6d185fb5db2d86e2d066bab217aefa8269e6cd37938f2d8bce4aeaeb0f5b1713b751300ab9a20ad6c26c541de8510593ee7dfdea1e341c44f8896968b3388ca5fd104eccb31410b47f2e96aa766ae47011820215e1cbe3bb077696974cc7735c275940f3e1bb810513a4782589951ba3a875f59297048d58daaf0f0b801abf355fab4afd2c260ca0309cb614501675f0578a0a6d68fb72a72550f0f47fe540ccc4be44c368a98519623658bbafe98a224a4dcbdcf316c2bc456b4b398085bc024cb237ef897ff83aa7c3532590704d71b5b234230ce93d43ba94b4c67f7a43ffd7b757d10b4f997eeb0fbbaa6f8fb2a1961932c86c70d27431b51514f0a4e8ee6d185fb5db2d86e2d066bab217aefa8269e6cd37938f2d8bce4aeaeb0f5b1713b751300ab9a20ad6c26c541de8510593ee7dfdea1e341c44f8896968b3388ca5fd104eccb31410b47f2e96aa766ae47011820215e1cbe3bb077696974cc7735c275940f3e1bb810513a4782589951ba3a875f59297048d58daaf0f0b801abf355fab4afd2c260ca0309cb614501675f0578a0a6d68fb72a72550f0f47fe540ccc4be44c368a98519623658bbafe98a224a4dcbdcf316c2bc456b4b398085bc024cb237ef897ff83aa7c3532590704d71b5b234230ce93d43ba94b4c67f7a43ffd7b757d10b4f997eeb0fbbaa6f8fb2a23e05acac8a61cb993ec659c0d776d653174f6fb40fe18fe66557cc5aef96e892256a7084415371e03a09af0c5e9eaef22518cb5c24cc2f8985c7adc3ba2275d07bac4c07890e1569b02f52c0b753f5d714001955f6fccc2da327d9f914ca2211d346632101230652aed2e08b58ff02fb85157667fbd12938e868e28895fa9a006b63c5784298261fdbcd42f0eaca7b5553714b0d469db00708bf2789107b57b04371e0860c4a6721f59ff5befb1777b7a1f05f519d1b74b388c5ddefcf9939511c1adfd13df51e88b6d12f4c8b0f50a84ed479ac4e13d93ba2a32c692cd94653e2aefb3fdc36a87911a687680f69e292b5a7586b5396fea7aa6d6029b271a8c0f7703060bb5570f74d3fb958399eb74d829e54cd901369c0066cac3a1e560cd33f0579fde0f34c6e16b75f5ce232f41531279794b06d084ea4344c4b8c2125620637bf5fd7292eb3cd32c758105d23add806b301422f8891b91030e8313ca9b1c7d4f27373a4af6a313c9a16932525ba15f047df135b30eb3ab227b2174438127c3c5602d2129ca10eb09c5123b6a7b040e5579b407bdbb1de3f870123d7184130924584301a804419c19381a5491f0f891ec80cf3c5c2ced1f5566fe02fbd700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b5cdac5added3ca6f7985ba98cc73cac9c693fc242533c7cd5cb14d9b043536310cfa1903dabbdd69cca8e0e9a298b6369483e59b0eaf7bbff78b19cb5db05812b8922a9115daefdf287be3d169ea87de16853281125a96fc26b57103ce18730f4ffcfd88eb83a05627feae7fec419f74f20a5b98b407a498b0bccf8ae01e3937e5149d21d3338ee3babc23e7e9603e12002913752dbd0aebb7353672ce74ee27f49c4c7e586b835d37c7392d6cd39ca385ab8957b83f273e74a5b405c921913aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e10e4e19dca1485e517e39daefc575641d746eb11f4563553daf7a6f130f4014e3324cc91bdb2b0a03184c9d7ad2a1f6ad781260fb608c498f05cf42411a40a082127b5ed4b84224af25f7a00784c5c52d51b856314ca63a6521dfe290651040e3e9eee022eac85cc17783034e145d8fd266831d6482545cae9be6ec01cd1aada13a6a00bf3edb5ed0b5d75f6a8de22fc1fb43f3650806a15376b5ecc5913e8bb3586f7b75a49b576d8f16d07100fa281d7bff044fdb68e1795cc3bc13b46c4363e7c5f19caff670ba36df508fc7ff2867ffec62dd9d891c2cca2c51239f22b9e288c7ec125a3eed1e9e87e3537c636ea3fc9a93862aa8bff3df8245926a94ce930592c2a209f517b40c2d7304132ec6c487a8ff34d3f48a643e15fb655ede290229b4337fd5e58c6a70e25e2358f1d3c1c1469e96a664a487876094f589fcfe50f1e11a45a52518e313e7a56b36820d828eb5388c28d0aa3848d39a4dd32ccb72041c61194b848a54952adee12b07ac6bcbad718d914f7c133c4b106d7af0b881d6a21b7d74f870100b8293d2e07d11d0685508ffaf71d13f2b79a9a10e940d732730a72287ecd2932ae7dfeca084af70d77b7d4c70a8ed6a5caea70c4fdab1f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012a011a4f7331bc20e8d872dce61ac4be0333a5483b73f6844110ad3dca8c186c37809903bfced672e0f320b5d4dbebe53e9747aebe9dce65b24aa4d095bab53324c3d84c9a73622946d9738151cee29e727ec77bd8ef1b5fb7829c7f1f2daf87141bca7feabc44065ffa1d528b32fc949936bb28028c6aa26da654a3a4bb665f1b4c8742764394f14aa5db7b75a3087a422ec28ee2ae6d74967f52d068e7578303f031d4c4fb8a88314ec1406a1cbecd77eed488dd17bd849157bcac39dcf5fb21f02393c200cfb387aefbe2a2edf95f5cb0e406348608fa9b876c53a651c0931e0fdc6c3dff304c7851041d5d1206a0c595b4f5d4c6f020fda5c49959ae3f6e29b0b1e2ca040e81a66aeb6d2ea5dedc8ae74226f4043aadd74abbc83f98c2dd164f4e1d35fbf17e59951492d15a2123975f56d51548be6dc1e27524c0673d241073796df214488840169921e93d5a4e4fb07fcea82e3a1268ee18223dfbce4e2f8c86920debb777bfe966de16c2a5b1d296192d611ebf09303f18cac20431b312415f25ba656aa94070fda98e32c3876c2be60d3f9a2940737947be35eb07852dbea0da459a9556bf8f025671cd3c78b61ab2eec9b2cfdb25b3e92eca14f87c21f02393c200cfb387aefbe2a2edf95f5cb0e406348608fa9b876c53a651c0931e0fdc6c3dff304c7851041d5d1206a0c595b4f5d4c6f020fda5c49959ae3f6e29b0b1e2ca040e81a66aeb6d2ea5dedc8ae74226f4043aadd74abbc83f98c2dd164f4e1d35fbf17e59951492d15a2123975f56d51548be6dc1e27524c0673d241073796df214488840169921e93d5a4e4fb07fcea82e3a1268ee18223dfbce4e2f8c86920debb777bfe966de16c2a5b1d296192d611ebf09303f18cac20431b312415f25ba656aa94070fda98e32c3876c2be60d3f9a2940737947be35eb07852dbea0da459a9556bf8f025671cd3c78b61ab2eec9b2cfdb25b3e92eca14f87c0f261953e056fc73fc3a18fa43a59b459f165b12cd7cfc28fabadfaf919f81c71d763af3cdbb5bd24300924a36f9fdc11899615f61b1ee7f430d03231ebd938e2926bfac18d1a361bc491e6f1d1da80702f89b095993225e2bf4d0175db1a83e2f585a47608182c75e22660eb0c6e35429cfe3576a764686b84d8367c6c7ba443f1e0f01026dde2c64f62e9ccf87c56c4abc660ace5907cb8fcdfb66917fb24529be6f2422a6108e5f6233e47627412e1bd318da147ac47795282d7ee6c8b5ce239d3c6c76f208cbfc3674abe80a682cf4365a1ed0f2a375e20c939d130c63091761239d4fb718c435abbb5f2cc7dfe5b3f06a28fb937500bda236c456ee8c722f739046b8d5f8caa60dcaaa86df6f7f6e25eecd3fb2f3ca5734439108d4b78b0ef3842e128504b12bcd03af94a592d8b744ab6296cd43a42060ac5c477f1bb81d56a167d6b76e2d9410b4a6620a003aefd9cd6193c5b87207d2b7805573221438fab99eabcb14621010c09757adc50dd16c299800deccf74cea8c0d194d957c3eaa1496b527b496a8113838287f632946778f5df6e67f06596a2b0884e92aae103064ca39cc102c089a804ceea623ef61cc3e4fd78dbf8941ccb89faf5ede2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000110c8886208ce36bde7237baf5a345edfac3023acf9b883dc5b3a2bd13cb652e10bc796d908cc2ab6c9e44358ed778564566a133d20bed05b8461a0d3ad4ddabe15d9b3626ed3a492b70deac0adf67ebcbb2fbe3f3de6713894a0b478751cd7853d4a61121319187ac38799b7961ad3f9193886243eb684f253f50a9586d7dcac31c00435cd5482bce8e03a06da3fa30e29f5caf58a3a5cf5c9b695d80d062f503962e0b79fee462083923d50823e59a0823cdbbd529a4a7e72264c5e01c071740a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff770a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff773028cef393b3254af4291ab729ba2e2c73a7728cc6a4bff3b6d500b56f9a3a043bd0694f2b7a3ad746f17d50e5fe37e91abe551ae86d56809a63c9ce35b4e64f17bef5c294c16a4f0d8fbf9fede424fa622ca71b64559b0a6df07e7121375e35316ea200b9760114d6bf235dcb09a0839547885fe9e15d225f471c1c73234ebb1e77d7bba44487cb752bcd5c16594c585ff77d2337cbb0674f1e0246f515c70904e9de920a39c96247b149e10dfe800f1676decb03e7d2f4b97e0faf9f7e4c503e9eee022eac85cc17783034e145d8fd266831d6482545cae9be6ec01cd1aada2127b5ed4b84224af25f7a00784c5c52d51b856314ca63a6521dfe290651040e3902a76361ae17a62722c3fa45ba1290b286d61bf7d9ffb0d099fc5724d63c3c2f616a24365573c958cc48d37b4806cf1bfb7c49a76ead000a105c17a13082c13c2fea06e74fc7cc2e9946b68ebb048cf5c8e38c8e611f7562def6c3ff951f7d299bf7227cad9d22d79843d62848e4983bdd282d0de807c86c77255c2117add5287a45f9da3ac701bb356c255a1a9bb0f7840ddcb536f0fe9e27a51e00424ace028eb257184eb3f4e99cb46cbe4697473cae24af90dddd71a4419770594586540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001025f0ffca969cea05b4332041c59f82c70b16d7e5c44ed89127b2dda824de3f930bfbce1976ed3a01c6aaa75c6ff98f2873eef4c008908592af8252cbe9c4d110daee137e62b1b95b1720daf5ca613201654685a1a965c8ee32488e800d2a9d737324f45bce792ba69305fe7b2a5df35a86d99c37607e4c1e55baafb5d83ee7708988eb7966c12422fd5f30769b5d1df2f5c40ec2950b20f87b892c4d5776fd61f5f8256d6bfbb813cc93cc02ed3567ac3cea3c221adad72a80115353bcb9e461569f4d3abaea12fd118434a90511e828ce4c46bc52b8ac40231ab03b177b1932a960b2c54515ed02ee7bcb56faee17d9561d49044216e5796fb85e94e884e6e2b11c8225a6925ef15795074d195988c9e313d1ed08cbcb871cb2625775677de14ee37dda596da10ea86af8b2e6a677384155bdd38c03c6327620ac788a988231758e8abc40dbdab6b5e924817ebfabeb02266a5f6d8c4476d702bf454b0575328a717543bf2425494a16db7e814054172243256127434d42bbd04f8ab4fa8ae34bc8b5ad444b45918d8db68779be5b94e656841c8eedc498a03aad8a771b49e0b4374a52bbb4ba6e727249788641a46d3e130ba405e1cd20f298614588e4b631569f4d3abaea12fd118434a90511e828ce4c46bc52b8ac40231ab03b177b1932a960b2c54515ed02ee7bcb56faee17d9561d49044216e5796fb85e94e884e6e2b11c8225a6925ef15795074d195988c9e313d1ed08cbcb871cb2625775677de14ee37dda596da10ea86af8b2e6a677384155bdd38c03c6327620ac788a988231758e8abc40dbdab6b5e924817ebfabeb02266a5f6d8c4476d702bf454b0575328a717543bf2425494a16db7e814054172243256127434d42bbd04f8ab4fa8ae34bc8b5ad444b45918d8db68779be5b94e656841c8eedc498a03aad8a771b49e0b4374a52bbb4ba6e727249788641a46d3e130ba405e1cd20f298614588e4b631eaeb505a7e79a10e66bfe193f5c9dcdac9682ed54bfb16a772b4e9d65b2cbc2365b4dec169784e5ff693bdcd0c7a2a1cd2567a3d664142dbb5234aef9f1df190f127cced7eb0ea1c02cf6af23a9147ad40d422b9a66d1b30ad25c173b74f6800a32a59dff1dd7eb5df51328ce1801e61ca302baa5a425b367f4cbb1b75148cc19b3bd19be75aab658636ee3ef0833c3dfda1156aea3d795be49fa20c0dff32b2adb6f2a2e2296d7a18485030dd13110ff4489dabd22d985cbd8b9196542b4ed10407c31b841422e86976109dd7c949f151072730ca1d2fd121be47700bbb21a309e7795e020f0d75d268302558f2d73f8605da99ba7ebfbaacd7556fd20a1430e8496034aedcc30f42af459aa231c1a8bc69876893fa9c01c7274c2bb326c620ea1b6ab368ebcf860ac265f962fe650c551564ac3875de6a28288320774ddd22b08a8c7dfbb45f308bedc96c6e958c3a3e5e806896a8daca3a30ee9cfa6efe6073b51dd2b7ec1656fe2910743df336d1f24793190a46c086e81e5b130ac9d803d6b3ab5b2ea9fd321134178b072ed7ef6eda2fe211e738c3a0afb46afa585f42a462438cef16b9dbf1b5b279643f2190843748e77c1be660691869f2924e49c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012b3316b1d1e6a3fc6d8eb076f97d9ccd1be3779882ad9d5bea13e56bb2def191011a189ffb82756e16a5a42a2906299a777d65fa8c91cbbf294792f794cb5d0f11be203761c293390befc670e8a92e0001f637e63653b5054af54ec9dae3c0ae2c92f5819266ca23cb9111987f1b60f9722eaaad11e5652beb871838d26b890b016def64b49cb5bc66d7601e6a9e3ca5d50c49a736323111b0cd679198491d9218e70d51196f6a34d8a1af651cac8270faed231d3dd1676d2a386fd6564548c035eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5600a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa10da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c8525044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b61584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff772a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a35eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5600a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa10da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c8525044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b61584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff772a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a3bd0694f2b7a3ad746f17d50e5fe37e91abe551ae86d56809a63c9ce35b4e64f3028cef393b3254af4291ab729ba2e2c73a7728cc6a4bff3b6d500b56f9a3a04316ea200b9760114d6bf235dcb09a0839547885fe9e15d225f471c1c73234ebb17bef5c294c16a4f0d8fbf9fede424fa622ca71b64559b0a6df07e7121375e3504e9de920a39c96247b149e10dfe800f1676decb03e7d2f4b97e0faf9f7e4c501e77d7bba44487cb752bcd5c16594c585ff77d2337cbb0674f1e0246f515c7092127b5ed4b84224af25f7a00784c5c52d51b856314ca63a6521dfe290651040e3e9eee022eac85cc17783034e145d8fd266831d6482545cae9be6ec01cd1aada2f616a24365573c958cc48d37b4806cf1bfb7c49a76ead000a105c17a13082c13902a76361ae17a62722c3fa45ba1290b286d61bf7d9ffb0d099fc5724d63c3c299bf7227cad9d22d79843d62848e4983bdd282d0de807c86c77255c2117add53c2fea06e74fc7cc2e9946b68ebb048cf5c8e38c8e611f7562def6c3ff951f7d028eb257184eb3f4e99cb46cbe4697473cae24af90dddd71a441977059458654287a45f9da3ac701bb356c255a1a9bb0f7840ddcb536f0fe9e27a51e00424ace000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000130bfbce1976ed3a01c6aaa75c6ff98f2873eef4c008908592af8252cbe9c4d11025f0ffca969cea05b4332041c59f82c70b16d7e5c44ed89127b2dda824de3f937324f45bce792ba69305fe7b2a5df35a86d99c37607e4c1e55baafb5d83ee770daee137e62b1b95b1720daf5ca613201654685a1a965c8ee32488e800d2a9d71f5f8256d6bfbb813cc93cc02ed3567ac3cea3c221adad72a80115353bcb9e4608988eb7966c12422fd5f30769b5d1df2f5c40ec2950b20f87b892c4d5776fd612749e285ee7893f4ef20bf4424092af1e03a73a3447775907037a9a2ed725942d8b61d7a11876c0b10df40bbdbf6d510442f1c1d50581c29229b652d128da6d1c4716c9da85ae3c8aba3bc54b42dd6b73cbab26fc185ba189e43415ea33bbe323b8e936257a51c37545c43ab4bd2294ae7aedd50d349d7a0f48fcd715cc441e0d6371f1449c672eb5a32ada784e5318fe6d25cad9dfd7f07f1aa2939302ab6d329c8e0ebb6398d14a5cd52587b1ace723d973312f6d212b1a128e596cfd549402f139b6570e03e98c2fd64459879f7cd5db23fa38123e96e257fbf4df0d59203d0ec649a8f1fc1673d029bba67860834c6b7501d13aba84b6d534f820f2a6e112749e285ee7893f4ef20bf4424092af1e03a73a3447775907037a9a2ed725942d8b61d7a11876c0b10df40bbdbf6d510442f1c1d50581c29229b652d128da6d1c4716c9da85ae3c8aba3bc54b42dd6b73cbab26fc185ba189e43415ea33bbe323b8e936257a51c37545c43ab4bd2294ae7aedd50d349d7a0f48fcd715cc441e0d6371f1449c672eb5a32ada784e5318fe6d25cad9dfd7f07f1aa2939302ab6d329c8e0ebb6398d14a5cd52587b1ace723d973312f6d212b1a128e596cfd549402f139b6570e03e98c2fd64459879f7cd5db23fa38123e96e257fbf4df0d59203d0ec649a8f1fc1673d029bba67860834c6b7501d13aba84b6d534f820f2a6e103e4284423ab5d3e807bf34d1c1fc4829c7bd3e24771b3efca9f0374f2d0a47510e979751f94570177d2475e520792419b7df3443089c648cd1663390d9f36e03378e96abdb61bcbba1d3eabd7fed54d0690575ebb22e24a202a312fe5e0ea871d4151debb909c698a1974bf79d06c98068b8887bc2e4b5acc78cc6e960b93db096d8fdc990823e96e676a7a017ead61849f2e60fa6cc8af75caa97de161ff2d198fc1d3a1c3ff54fa2aedadef70c86b10881bf45feda6e558187a05d26030e20fa45d8cac23c643b27ac394666b91eec3ec8b2ce358039e572822d1bd184ab422e93a1f40a63561e25197d62f1262da3bb6ca1d5e4292cc264cffd5600b36181ce97758d8a24a6e060d660308c3c8dabe66ffa56f03b63444904ff575e0e84f1f4f41787063dbde3fff083b3a9486a3d3dd34d58e4be8a0e0394f0227042c8e30715d12cf5870132067ac1d822bb23746bc136e44f94798ceb83bb9f5a85c7d3dba94dbfb8bd0dbd2ca9a1eef9dcb9d621b0758bd27556f6569154f8b25bc2922345a22e32ba2e1011291d784facf1bb2e80de6a26f748644865c2be40e76210301a01494f864fbe98d05bc6bfda7365198fe1486a82386efc7b7c65444331a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001130eaedf7ee6ecd05c5226c4a0bc50c971033bdbde01bb54c5842c53d81f81e61f77e0cd4fbcddccfc7dc06f7a8c16113c8c0cfbb7fc2698f4baf5524f4dba693a1b29dae37d6330d2e6e6acab4ea78b6ab981f39c43caa4cbea6daf9edbf4150c8d9cf5384e0ba9d4f5af192ae0bcc6a3576f92f35695fc79c28486103818750c5b92f4e315308a85aac8d324b02e7919a3df746a942542cd95661d3bc0190f34fdb6a71d7ce5e42387aa7b1d332a3b1cce430c7653585bcfc6301a0157c1112eb06d39d0dda893398f3fc8ea58ac593c8c62c1a79cd8e0468901d4b8adff67114f92c62f22576cc670c03715a753a6e5ba363a61b0203b52a42f184752009a2972222114544ae01fcc3eec93bb5dbdc7ea22d42a29510e952576609b65fd00168ddddeebabb51fe033c1136c44a2425a5c7627df23a80d0407ba8c649a03010f3aaaa565a576609efd3a9ee2a8d4b480bee330b6e7a9f61e33bd1c08fdf0fd30c5555a9a5a899f6102c5611d572b4ba187b5cb52654f257af973d0f7020f040c25553afc3b4fe31af2251a6d4c27866173d6f7893958b2fdd5809f2cf5b4f033daaac503c4b01ce50ddae592b3d879c0d2c2048013a0689b57b04dd30a4b112eb06d39d0dda893398f3fc8ea58ac593c8c62c1a79cd8e0468901d4b8adff67114f92c62f22576cc670c03715a753a6e5ba363a61b0203b52a42f184752009a2972222114544ae01fcc3eec93bb5dbdc7ea22d42a29510e952576609b65fd00168ddddeebabb51fe033c1136c44a2425a5c7627df23a80d0407ba8c649a03010f3aaaa565a576609efd3a9ee2a8d4b480bee330b6e7a9f61e33bd1c08fdf0fd30c5555a9a5a899f6102c5611d572b4ba187b5cb52654f257af973d0f7020f040c25553afc3b4fe31af2251a6d4c27866173d6f7893958b2fdd5809f2cf5b4f033daaac503c4b01ce50ddae592b3d879c0d2c2048013a0689b57b04dd30a4b112688292cd9c367ac524620cd82a3eb86dae8fdf6f3a6a751919effce31c0acaa028a4abfb273fbba20f5d2b48e9d35e730be7ead39687cb0aef2ff829996e2f7080624bc02f2ba952bc81c10bb966c567f2ca808691faced5a5cb83030ba853228c32dca65323b21a71c166e77f2beb47a1c2a0035bd2cafec483a3af556fac62f618d03f9add6db0e00daac883dbe56c866c64c4f5eac00ca36db0c4f413bad2a7901223ed8459fb6e503c535be7cec4617c404adfa0bef94db5f4650d4305b1b7fd600fe2802b022979f6cd0fccd8735ee97182d8a930e0aebcfa18598ab5825a53fc21e25602e93f607c23db2260e3a8d43305925b52346e3b30f63a39c513eff0375c782c1f941321294713679f672cb7ae3aaee2f14e7487f7fd93aaa553f508e67788b67dfd0c500f69157f2f36adb0584a492109e07e39e1fbe73eec6064906455ac7fcec8864462d3f51c8a563619980395b153b7698e1a7b3a869b1078be9bdcf4831a53cc073b50beacd56903925b7598775b2095ff185c90735f73649fc32df3b18ef7b5242d236a3f4199c9b8c049152922b9ab196cebd2b287a1a4e2c6eafbd36bdf4e6a302ff5fab0ba0d161a71765fb817e2a5f575435ed670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001372ccd770e79d18be1c8de46c274d18d5f2419938f0534619feb501f15017d221b7f692f01349056f7a9e64dd9027fa1f53f37ea636e126ccc2abe473681dcf61b9c529a7bf89435d5e4be412740891077ea8d72e090d173e05992160ab6e900103ca61e0600ce16aa1a3ad0e0af33e9af42c9cc48ede6fd0cc6da72aa8a300d2a00d1e41fb62f7fd7b1524ac3a30c08a76efa9fd4ead1cb3b2013fe7f72430824d80dd3687e92cdb61dfe193051c737dac57279f677012b9645748eb4d8c4d6115d66ca497f22362f624a448983cf73313d94e49457c6f8cbfac6bb70a4b1292ea29935b680ddc9d09db5bb767c308cf109041774f53222cd326a318f5b4ed816d301f36f7bab0eeceb7356af930d3fd3ed4f7adc69e9c062b8b0bc333775cc292cfe0c908454f113148ca9506cf2c04e5949812ce30f5b36748030ccc88a35321f09c12d6a574aa09940b16ddf423f015bf46a44c497a6546e42c000154cfb0de0f63ed295a8b55f66bf4e9220bdc120eaa491c488617544beee2cffeab3063a9b30c5e313b47522fe4377255c4b3a9ff7fb1f3bf00aecda9fbaf9006a80e40564cf3a1cec4b8add01bc88daa3b4c5824e9ddccd5cee2ebe8d75f3ff957f1d115d66ca497f22362f624a448983cf73313d94e49457c6f8cbfac6bb70a4b1292ea29935b680ddc9d09db5bb767c308cf109041774f53222cd326a318f5b4ed816d301f36f7bab0eeceb7356af930d3fd3ed4f7adc69e9c062b8b0bc333775cc292cfe0c908454f113148ca9506cf2c04e5949812ce30f5b36748030ccc88a35321f09c12d6a574aa09940b16ddf423f015bf46a44c497a6546e42c000154cfb0de0f63ed295a8b55f66bf4e9220bdc120eaa491c488617544beee2cffeab3063a9b30c5e313b47522fe4377255c4b3a9ff7fb1f3bf00aecda9fbaf9006a80e40564cf3a1cec4b8add01bc88daa3b4c5824e9ddccd5cee2ebe8d75f3ff957f1d1897330ce884f145a19e4048a1139ec5eeadec55268d2504700ae2a32b9355071638c722d681b9a367707bc6a94b9a9aab39f07019eec840162b9a06124d16192c0495ad8dee3910777e6ff0726b913a16209edefb4df9e6d4040a1e2c1ff6161c23a9dd8057d4424e0aa40a65228e8ad90ea49260f18f97874f0461b4902bf833ee9b7f9645447a48c2745fe1f153806d0b3aa5baedc33fcbb063bc140a5fe71ebc262606335e3e587d7e63750e0a5adad8838f1aa5042ed3c5763b731e8aca2991c70912dc4f160f7246c018afa00a18d50e80ca0d22cd97373e23b420a6dd3af4b0ec5afb8e6cfccb07fa6516093f2644f5128a76ec00cb3489fde19ce0260c8ed627793d7679f752f7b2eb08445853ab3f8c5f8aa6cd8b28e4055ba2114d3ed3b9fd366cb2ea9c8c372d4d9bb436807bbeed619a62413867af17ada66012084d4c62435110f12795cebf6c56887617746f00a1de72b234aa13dfeda4318a22504c2136fece9f7f1480da4d842dd5885e9ea119f60e6b64061e5d3c3f2dcd1a7a00e99edbe1f5dcdd6e5005b6116ddf14af058b884a805f6ed87cc837943c2873e2947e0c13fb8e6ce993ec953bf19c42c40e1fe9dfffb3fbb894d43f176e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001097a657ce318d0ca75461ca5b088d15adb88479add9b66554ea6ebd22813788f0c56d65ec087ad01cd5dbea6634edf80bb59a3ae965619c30cfc54753b4c3c8d16d98ae8da526f2d48c2c7780c7b322a8dc0b9a749441e1c5e18cbda30f95faf18a5dee125ffe8532147d1f0e0552faf64caf5b70fee05b7337be1199aab33c701d26a4d4ab26b790d3cbe87eb4ce58f7179c3704b4783bba22cc3f87c93947235e8c8782d61e9cac3288801854da2b7336fb71cf7bdd44c92a860ac359a72170240d04e5d11ea5875b7e5ff7fa49d8378842c8aff5fe9ee7186a06898de3fe03dbf2fb1a2ee15a78a481a00805b627ca9c26c7109ed0f2d27a690846721c0210b441187d15993ba4c977dfd7e3713915a94deb6fcdf91a837a1220afc573f6034bbee782ea66c45b368820281c8ec6ec7b1ba450c6d6773618c0ee203a8c0a1385457a716bfe2a37ef575f3771361d6c4e85992f05dd8491625aa36edb43ce007aba858e9401d5c810a8a0c88ec9e295d5e3f6918ef20d2830786b6124bc32119a5b64371bf6d317acb4dc15360e9314f6f5bee8ca154ff0a078f5ea485305c265a49bc8e4092ce8534b23eac9f16ced2d73d0d7caba41c8f25a18e5b7acfa50240d04e5d11ea5875b7e5ff7fa49d8378842c8aff5fe9ee7186a06898de3fe03dbf2fb1a2ee15a78a481a00805b627ca9c26c7109ed0f2d27a690846721c0210b441187d15993ba4c977dfd7e3713915a94deb6fcdf91a837a1220afc573f6034bbee782ea66c45b368820281c8ec6ec7b1ba450c6d6773618c0ee203a8c0a1385457a716bfe2a37ef575f3771361d6c4e85992f05dd8491625aa36edb43ce007aba858e9401d5c810a8a0c88ec9e295d5e3f6918ef20d2830786b6124bc32119a5b64371bf6d317acb4dc15360e9314f6f5bee8ca154ff0a078f5ea485305c265a49bc8e4092ce8534b23eac9f16ced2d73d0d7caba41c8f25a18e5b7acfa517d8a3c941a17a7156a36f9f4839ce8afcc91a2a707acafc502add621506937406269888565b866079fd6ed6faea80ed95e23070b63929273ac74a30861c2cff1c7513a1ceb53a85ac9d6f7fd526cae9123f5399fa21e31af88897944ff7e15a345661ac3de6130102277b6a9397f83fc66def025300e6d915cb09ec134435a93a6a85212740184d0a5d43a6f39dd64328ed9e0b2b678aaeeac436e8b3068adc2400976ebe5b0ebc0a996c6a7ba0cf7e78a3570fb75b022800d535b73c04bf731f2bd313a18b1e42d89b7d207b2f2c1e05d28aef36909fdc84213eedbe51e19214e27fca6323d4584eed848a4f11be91bd8da27317e54d1045a1f1580a1c351c1ec1c24d7f27b60961dfb60af24e007a36d0219cb06b024f8958587f848895471566ecd21fe2cc32f663db2caf73e87ddd72968eebf24dda9e837edc1c2617db226b4c487c6108330d2dcff520fce8652dfcafeafc3a7cf8c4d4d1b3f929766333cd83343b8859204d2651b666c11199f23cd7625033995f61a2c8b9e473aa710362d778d5531e48b5fa5ed595582688688f585bdedd172f90a6e463bc6faa903b971de5ce3e4b0f0ecd2cd3b1e269367903d8dbe438b8d2674639fb2c3748b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011cab6ea7ad24b70454131035e255d54ef0e997a01f1b6c5b9e3b3eade5c3611015792660ac9628510aafdf8918c6d599bb4275d5b397c23f1ca2363a3681be4c29590672ca122deb2a12db65b5d99b730f4ef28547330a391287e5293687855d114e866d73e38919b08da1d0eb3f9465abb4cb1fa2cf2c4fa409e557efa54edf26f623f81473dc05cabe2a32b43fb37b27c538c4e25127ec59481020170f6d0d2f3f38d85426bdb564c8bfd7768ba6c4a43fc396dc7c91a51f2ee4ad98a404453c2437be8c6c7141370ffecb98f1f49b24ce7267e37f8c441da9b052efb9b31a03dbc84173938ebec8f00134670e0b64fd78269425cd6cd77b83809a10464ce72cb516b8be1e3646134ff9f9fcb9c7072eedd8174c49d8e62f9badeaaea07f7e134ae94741e1c9b9ecb00606034638f8f358c0e4bd03203569918302515f80831f89719bb6970f5e608fe1e1efa0e32383d16d80618a512c2282d2ce69227d7320768e644968f0a19f701e1e105f1cdc9e752b7ba7c2a7ef76aa5e1e96dd828e1daf380a90f34cd7e2cf6969ae246fb14e89f189d519a3a57a33bc2e0dac733d2250c7f56f0cb3281d30969651db904ed3bca772343355761ef974bef2538cc43c2437be8c6c7141370ffecb98f1f49b24ce7267e37f8c441da9b052efb9b31a03dbc84173938ebec8f00134670e0b64fd78269425cd6cd77b83809a10464ce72cb516b8be1e3646134ff9f9fcb9c7072eedd8174c49d8e62f9badeaaea07f7e134ae94741e1c9b9ecb00606034638f8f358c0e4bd03203569918302515f80831f89719bb6970f5e608fe1e1efa0e32383d16d80618a512c2282d2ce69227d7320768e644968f0a19f701e1e105f1cdc9e752b7ba7c2a7ef76aa5e1e96dd828e1daf380a90f34cd7e2cf6969ae246fb14e89f189d519a3a57a33bc2e0dac733d2250c7f56f0cb3281d30969651db904ed3bca772343355761ef974bef2538cc4216856e307f292621acd7b9bcdd9f1f234dd023a65742fa4b403e12a7f1d05f60c5616a0d608205974050641a99871d2e90f4b2a2e2fffb2fd7200af43585b732ed4592094d5c20a37991900b44bf299b57a75103585a46da1c84b9cc43c5b2a35deebbf770653215ed8f66f67e195846f81dcd657970eecc79a1c91cd7bbaf40b4d318dbc93c00bdd3fb3a49c83a4e51b8b6969a14d1b74c1834d4e6269b9682fb12e7c0a15618454a27c66784ea32d8c9b5ade2b38fd01de2b7d13079136142b663e58264a4c3786557cbd19e6ef230d8c427c66b405614756a560666847dc2bf6c25f23207f7c447e3127b72ad179b8ffaaf1f8e01ed4293daf17abf8ce922baa350e3db7229f424cbd5cc7806424d06d1fb09eb1f4d94ef9a721470e919d2b234a6f0b5f972145fc38198cb042a555f3a4c1dbfd98dd0bdf60f47d98fb0b3bbd2831fc73352ce929a7bdf486763f5969560765b9bdcbf3e1eb8896f9c0ca1fec5d2adafec6ca6341db7ed3afcf484cf2ef07d13eaaaed82b2413d8fd20402ec5fd2d63d7b873f4e13a65f034023a8c5823125194dba402e8c5f572f0e0013f95250625542c010935da25269a54fe2028bffe4fa93d730e3e9ab6b76a66c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001381a0dccaec7d9c298bc99492037b03fd72ffb2015647ca08d3ffff7127589d412f1b8068c96bfcf3b37cb4b25f24d58aafc4f73668e28e83c619494f3b06fa50ef7b7cc2b923ab2f07e4cbe304bbbf0dbb6fce4490a598d0ac9dfd775ed7bae014e86a19e664f7ad4253e399b96e338aeaa93692438eda0c7c110a833c6928e33a8d3cd23b0f5a9e69ac9b039cea6c22e4c20a21b4fd76cafe599368c1ccfc11a062a96887f9bc506b3bfe8c3b758743ad6d7d48ed816a17381b059d2ce56300a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff770a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff773028cef393b3254af4291ab729ba2e2c73a7728cc6a4bff3b6d500b56f9a3a043bd0694f2b7a3ad746f17d50e5fe37e91abe551ae86d56809a63c9ce35b4e64f17bef5c294c16a4f0d8fbf9fede424fa622ca71b64559b0a6df07e7121375e35316ea200b9760114d6bf235dcb09a0839547885fe9e15d225f471c1c73234ebb1e77d7bba44487cb752bcd5c16594c585ff77d2337cbb0674f1e0246f515c70904e9de920a39c96247b149e10dfe800f1676decb03e7d2f4b97e0faf9f7e4c503e9eee022eac85cc17783034e145d8fd266831d6482545cae9be6ec01cd1aada2127b5ed4b84224af25f7a00784c5c52d51b856314ca63a6521dfe290651040e3902a76361ae17a62722c3fa45ba1290b286d61bf7d9ffb0d099fc5724d63c3c2f616a24365573c958cc48d37b4806cf1bfb7c49a76ead000a105c17a13082c13c2fea06e74fc7cc2e9946b68ebb048cf5c8e38c8e611f7562def6c3ff951f7d299bf7227cad9d22d79843d62848e4983bdd282d0de807c86c77255c2117add5287a45f9da3ac701bb356c255a1a9bb0f7840ddcb536f0fe9e27a51e00424ace028eb257184eb3f4e99cb46cbe4697473cae24af90dddd71a4419770594586540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001025f0ffca969cea05b4332041c59f82c70b16d7e5c44ed89127b2dda824de3f930bfbce1976ed3a01c6aaa75c6ff98f2873eef4c008908592af8252cbe9c4d110daee137e62b1b95b1720daf5ca613201654685a1a965c8ee32488e800d2a9d737324f45bce792ba69305fe7b2a5df35a86d99c37607e4c1e55baafb5d83ee7708988eb7966c12422fd5f30769b5d1df2f5c40ec2950b20f87b892c4d5776fd61f5f8256d6bfbb813cc93cc02ed3567ac3cea3c221adad72a80115353bcb9e461a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c619259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e803e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b3c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc472186137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58672c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba021e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff1a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c619259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e803e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b3c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc472186137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58672c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba021e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff2e2b46ffc36d4f5685eb00c7ee014f48e8153f1f919ebfe151c8d6542e6cbaaa0a4cbbb39b871defcf4bc6dd245aaf529dd9b08e97e7f2c46f9e9979d78825562e5068f2500b62e78899f359b075324e60c92cad6ac5f5e3f1facd7f51f5c5232b328097c5d2e75095a089fb6c5a6a784c55b5a6c101c81a2655e6066e33eeee03c736fbd97c2ca6fa8b1d62e93c6a00af516e598f9023c35254ff28582fd2a813eb6578a5913238011c1163652ecd7eeb27476da593b0d4ae86ccb3f1a9f1362ae9ac07bf19b73bf8be12e85a75563d086eaa37414a37d9ea20cea40431250725d3645f6e411b3bee85a0adf374008ca3b61b5db5f7e46ddac27139047548c80cbc44318fb49535b2ebc087c7de5dadef0623c6e789d2738e02813db54a09770ffe80a5f23019e0ec880642a3959f86b64383cb2e460f25501f1c138bc12a931a098260efa5254e77a1eab0c4bd7f60d42653d1fb07953aeddb8b390dc20cdd13ae7a52f4129b5e613854042e2b675db092a3928f1e5e133a424dc1f6de38231bbf121fe1c3aacd74d0d3605b05e0efb61a43729e22c874722597510560922c3fb50d2f53229e58bd441cee45c940dcba139bd8e785eefe840ac2d181cd94ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012ca244ea7bb6dcc27df8e39c6932c4e07910a5affd6b00bd098462c0a784835c26a5f2925168380670d3f83a7bd3928c36b0d1d9f3303053e4453cecd10dccd0215e65df09ef8acd4f87d8c2b6aea41090729954662e6805302be0474d3631c33470b9538776dd1b6c7c5cf1fb2e46b5c97ea31c3a93f392e6600d348686a9042c6727b4734283bebabc09dbcd16d7a7626618b1dffd0ef23222002c369aee740662df001373161663f7efbe2fd27d0026cf46a6840996930fa6021ee5d2ddb63b36e87e22293239da1febd7ddc2d207efc9824ee6248300ef3b4a2b3c7b480104c91781ddd6cdc625e01428223d2df8327d16ad2328761aa9f1e6c1c384b80028128a76aacdfb21429f9b3754ce1a2725d5279a5982aa964773af242e68680117ed7589553204debd6064c8ab31e5d8fc717161afca4e8551b981c8d1979800085cb4515605e7a64d1e0814a80682c35655fb0fa3a6699c99bad8ede80a080237a34baea9fa1859b2e1f7eb57f97d3ccbf09dec65a68f7eff7257ff17f5f7ff29cf8596ae1d863f8196286748208dd0afade74e3240100f00a63ca58832280a16307a6951e279c07e69d798b7df722f7298b1add70ce90c9886f44777cdd7f73b36e87e22293239da1febd7ddc2d207efc9824ee6248300ef3b4a2b3c7b480104c91781ddd6cdc625e01428223d2df8327d16ad2328761aa9f1e6c1c384b80028128a76aacdfb21429f9b3754ce1a2725d5279a5982aa964773af242e68680117ed7589553204debd6064c8ab31e5d8fc717161afca4e8551b981c8d1979800085cb4515605e7a64d1e0814a80682c35655fb0fa3a6699c99bad8ede80a080237a34baea9fa1859b2e1f7eb57f97d3ccbf09dec65a68f7eff7257ff17f5f7ff29cf8596ae1d863f8196286748208dd0afade74e3240100f00a63ca58832280a16307a6951e279c07e69d798b7df722f7298b1add70ce90c9886f44777cdd7f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001f8e94c42a3989bc0525c4b88d85b5739625b62a65d794ae2ee5a11343c55b26127a9d5e74c644b7bca6ab72c6342dcb2fb379fe43b9eaa3793de0976a2748f4189ddd23bc35ace2b428205e451f3e0391d28302ad85627d257d35180133b91e12f8af4d9cb24e26265117859e1d5c3552fae7a404cf6880229da8809184e32225fb46c68b3f6c057237f25e96a8984e4c998858214b9c21f95cd9571777b46225734cac117892dde2f7c2f864518a0082ae61a2488953239bdb8917fbac2c1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012613408c3e0ad699cd7b228bfdfd45b30262a0ee9b8b0f47ddf4fb894bdf7340009d38860a0c77765d5b92619489a48cde4571e17cd551c1d78598746fa75ebf3b12101e710281493e4178ed5e00d3b375589a8d5051767547496e1b23caf75c2125428db9bdcc5ccc14afd998d56595ba131b6f2696338cbb75d93bd04fb32e12d36ea027cb5b09a95bf1b7cf7ebf018d4e8e3f89b70899958f18347effadcd18a0b0e1bf38e399ba6bc1393e08f5de3be53d4003570c5d27753ff1cc3628373aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e10e4e19dca1485e517e39daefc575641d746eb11f4563553daf7a6f130f4014e3324cc91bdb2b0a03184c9d7ad2a1f6ad781260fb608c498f05cf42411a40a082127b5ed4b84224af25f7a00784c5c52d51b856314ca63a6521dfe290651040e3e9eee022eac85cc17783034e145d8fd266831d6482545cae9be6ec01cd1aada13a6a00bf3edb5ed0b5d75f6a8de22fc1fb43f3650806a15376b5ecc5913e8bb3586f7b75a49b576d8f16d07100fa281d7bff044fdb68e1795cc3bc13b46c4363e7c5f19caff670ba36df508fc7ff2867ffec62dd9d891c2cca2c51239f22b9e288c7ec125a3eed1e9e87e3537c636ea3fc9a93862aa8bff3df8245926a94ce930592c2a209f517b40c2d7304132ec6c487a8ff34d3f48a643e15fb655ede290229b4337fd5e58c6a70e25e2358f1d3c1c1469e96a664a487876094f589fcfe50f1e11a45a52518e313e7a56b36820d828eb5388c28d0aa3848d39a4dd32ccb72041c61194b848a54952adee12b07ac6bcbad718d914f7c133c4b106d7af0b881d6a21b7d74f870100b8293d2e07d11d0685508ffaf71d13f2b79a9a10e940d732730a72287ecd2932ae7dfeca084af70d77b7d4c70a8ed6a5caea70c4fdab1f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012a011a4f7331bc20e8d872dce61ac4be0333a5483b73f6844110ad3dca8c186c37809903bfced672e0f320b5d4dbebe53e9747aebe9dce65b24aa4d095bab53324c3d84c9a73622946d9738151cee29e727ec77bd8ef1b5fb7829c7f1f2daf87141bca7feabc44065ffa1d528b32fc949936bb28028c6aa26da654a3a4bb665f1b4c8742764394f14aa5db7b75a3087a422ec28ee2ae6d74967f52d068e7578303f031d4c4fb8a88314ec1406a1cbecd77eed488dd17bd849157bcac39dcf5fb097c297002ef132df3d773c7977c716d42dcf163eb168e74556dab78ac591a7f3683d68ffd10ecd20c288c3868838e92df69a7981e366aa743bf857453a6e5822f6ccf300eab5fe5c33542e5f56e37224e50b6f39770c845ab24595b5dbd847b109330cff154a01a3ccabd1a0a91c8ddd3f5e20871dc30d5ee08d791a2427b862d200bf04958df7cd00a4e7dcb2713ab20bfc7cdd94cfe098c2e2c01d4b3966412dff40fb6a720832ff5b18234d8ec550186d12e2ffffb120cff04eb2b4c699d21a03bb16ebc5d7010338874f7c362573ceb1c11229a0adcf15f49422781eff11e5fc44e9143a28fefcc778b083c9da8e55b7ceae6b2ee3ea7cde7aad87e1010097c297002ef132df3d773c7977c716d42dcf163eb168e74556dab78ac591a7f3683d68ffd10ecd20c288c3868838e92df69a7981e366aa743bf857453a6e5822f6ccf300eab5fe5c33542e5f56e37224e50b6f39770c845ab24595b5dbd847b109330cff154a01a3ccabd1a0a91c8ddd3f5e20871dc30d5ee08d791a2427b862d200bf04958df7cd00a4e7dcb2713ab20bfc7cdd94cfe098c2e2c01d4b3966412dff40fb6a720832ff5b18234d8ec550186d12e2ffffb120cff04eb2b4c699d21a03bb16ebc5d7010338874f7c362573ceb1c11229a0adcf15f49422781eff11e5fc44e9143a28fefcc778b083c9da8e55b7ceae6b2ee3ea7cde7aad87e101024f7db928d777931e650254de7aa8f1a85d214ae558b218a32fd53fc6c22c0b13211d8035f65f813c9cf1863754ffdd754a7033a3fb07cd47d62a7f8dcc36ff2330a1cf16f4a85740c8a26e23f438a6bb257654b7412ae3f93af11f09cfadf3a35d26133b5c96946b7ce3b9f066b7c2eb43819996ec11e03914716f4db4d88d80688fb61d626e629564a1ad8808b579d85faee68155ef8f8d4c329509ee6137609105856f4922d4f0002e7f54f5d32419957962ff7c6db4096d9695074f35f6b2926bfac18d1a361bc491e6f1d1da80702f89b095993225e2bf4d0175db1a83e2f585a47608182c75e22660eb0c6e35429cfe3576a764686b84d8367c6c7ba442a6a60dc0956ecac47d0fa9bb654c8ff3141b15025cadb27694ecbf5109bbdbf371293b3b0f61513e22d18d27d723dbfc9dbdc6ce23d6ce2a8e5733940b5924c1cfacb8e7411eb1360bbf0abd2c212b1650f135f3513b210e23942523bc2c877143b11943061401fe437d21ac6023bc0f1dfca802d90f1de7f8a434d49f2f3c50ed020b5971140eaafc9383a60d150717264275369f412ac3434b593d1937a683d7ae0fcce0d9037cb2e5476161ad36d5af81182085421d67c0a50075e2f6c420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001389baaeefb48f484e3d23d5cc5a3f71f3ae0cce0fbc3f0d0f3370668714bfdab01237f6eb194e27b2fdce2d23b063165705db06a9ffd3c808f867e6854b621d92af8325de7ebf9e3b59022f37fa3ba2651fa7e2bf07967ff3d6591f6dead58d83310f78766404f3c5bde83f79b27bb332cbf4f0a0837bbefad25e7a81832c92e3e59ee759a1240a256524cb68f70b567a53d13e027c3ef696d801114786e30f51ebbc731426cf88d5e6a5f2702fe108a0089a015c037c243580c9aec950f32d63d02ddf8a637ca4243b1ba4392d93f3373120e47f4e9f01d5b996fb1bc75a83c02fd220759c835bdbc4e45bc6d26c0ccaf348ab4146308fe3d93c13b438a57c5310e55db3f16f34b5278a351de3e3c00b63fe377a35dcc24654a6ac4ae4c49280ef1aa24c0e90cb4ad875cae21c1c3ff6c06b58465ef2cf733e2c62851b3b6d93547ad483b72c0789c5b309957372c03286ba66214ee11632eec8310677d6dc50ab852b7c48d3f8763a4cf66a8c8d3fcf9daf299f45ee7b86a40addc9882923c0a666269293dc25b0dc7f2feb413dc0f40ffdbfa4372728185e9cb9e057324d535999d96d6c23da4f2380d014bec23f0e146bd01c5da869a1343654efa8cdb2c3d02ddf8a637ca4243b1ba4392d93f3373120e47f4e9f01d5b996fb1bc75a83c02fd220759c835bdbc4e45bc6d26c0ccaf348ab4146308fe3d93c13b438a57c5310e55db3f16f34b5278a351de3e3c00b63fe377a35dcc24654a6ac4ae4c49280ef1aa24c0e90cb4ad875cae21c1c3ff6c06b58465ef2cf733e2c62851b3b6d93547ad483b72c0789c5b309957372c03286ba66214ee11632eec8310677d6dc50ab852b7c48d3f8763a4cf66a8c8d3fcf9daf299f45ee7b86a40addc9882923c0a666269293dc25b0dc7f2feb413dc0f40ffdbfa4372728185e9cb9e057324d535999d96d6c23da4f2380d014bec23f0e146bd01c5da869a1343654efa8cdb2c2c760185232808422bd675dc68c88fa2fa25aa541c347b293e6a01b193ad38392b7c15a5c8a5dccaf33e75bd7716ebd06f3bdb7c105e2ab83a46622e41f92b3b1ee90c8ae9c69e2b70674c218703f6f2065f40f80bdced46efce7db166ac33f30111950151fa7564d8e8b7e258acaf8e3ec62061a3f9d8093785f51843bf586f1dd500863b47c729927d55ec3466e39e997a18ffa146c8afb7eec9c7926b99e236d7cc5cd8ae13e83dedd19210a2b3f87b7339deecc20387b6f0568997c22d842213aee59adbd8ed7cc13bc4bf4abeaf91d4ff2a161902cc556dbdb604916c5627bd43a85873b0ed2ff4749e3820e73271962c3e901f50aeba1604d635cd2a493ebeadfc4cf15e57b924f9966a73fa1d5a093a0cbc60c00ed6f07bab5dc868cb1559b6f899672a19cbf38b4e7d121134dc1163006b2331cbbccb16672ec818113c4fe108bd7108f097cffc121a5b6325e0ef58ad8e3b0a7b63691785318f5c6d2bfbb11f6c555a385474f23629d0bb395308de38cca296f07974493d1f999e261ffcfb86c58670343df12d4ec15c1e3301a31a78bb39559c3f0ade715ae469ab27d833df4d3f0dc1602cb240830a149b4778c2660a6f7a8b6155b706a83e338a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010613f94e0d770902acfe72f5adeb212705d03083e0d1fc10fc8042028e3da80206c79d6257d392209ffdd7b583d75cf228ea4de9adfc8c18edec5efa6e15497638514361c0a589d7fabf89c8e9b5d6747509e7b2a8f3317a2c2cc0d2ac8451000ce40da0c50fe0f0d94b1dfed0366a8a2ddbcd902857fe59629e3490ffa324fa0612449ec552f289b1ed2b8a6b7df6a279e792f0dd70b39588659a68178198d217696dae2d05b09d9ef4e406a4f077b94e9b4c99808471285ab4529dded2d4983aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e10e4e19dca1485e517e39daefc575641d746eb11f4563553daf7a6f130f4014e3324cc91bdb2b0a03184c9d7ad2a1f6ad781260fb608c498f05cf42411a40a082127b5ed4b84224af25f7a00784c5c52d51b856314ca63a6521dfe290651040e3e9eee022eac85cc17783034e145d8fd266831d6482545cae9be6ec01cd1aada13a6a00bf3edb5ed0b5d75f6a8de22fc1fb43f3650806a15376b5ecc5913e8bb3586f7b75a49b576d8f16d07100fa281d7bff044fdb68e1795cc3bc13b46c4363e7c5f19caff670ba36df508fc7ff2867ffec62dd9d891c2cca2c51239f22b9e288c7ec125a3eed1e9e87e3537c636ea3fc9a93862aa8bff3df8245926a94ce930592c2a209f517b40c2d7304132ec6c487a8ff34d3f48a643e15fb655ede290229b4337fd5e58c6a70e25e2358f1d3c1c1469e96a664a487876094f589fcfe50f1e11a45a52518e313e7a56b36820d828eb5388c28d0aa3848d39a4dd32ccb72041c61194b848a54952adee12b07ac6bcbad718d914f7c133c4b106d7af0b881d6a21b7d74f870100b8293d2e07d11d0685508ffaf71d13f2b79a9a10e940d732730a72287ecd2932ae7dfeca084af70d77b7d4c70a8ed6a5caea70c4fdab1f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012a011a4f7331bc20e8d872dce61ac4be0333a5483b73f6844110ad3dca8c186c37809903bfced672e0f320b5d4dbebe53e9747aebe9dce65b24aa4d095bab53324c3d84c9a73622946d9738151cee29e727ec77bd8ef1b5fb7829c7f1f2daf87141bca7feabc44065ffa1d528b32fc949936bb28028c6aa26da654a3a4bb665f1b4c8742764394f14aa5db7b75a3087a422ec28ee2ae6d74967f52d068e7578303f031d4c4fb8a88314ec1406a1cbecd77eed488dd17bd849157bcac39dcf5fb3e0d9957a57a3e0d78397558e911012e778d90db4da488250bc19c64d3ca966e01f266a85a85c1f287c68aa716eefed1aab90820bba870f68d6b94882c3569933643feb63b633643591f4abc8d5505e7cca970585f02c44ad6134a4422f4f02209bc0149c49cc9bca6e0b54372aafa18559d28a3aa4a34d0c319e6a8dd0b0fdf0f53f98f28f00f50bd9c75aec2a91d867634cdc9b5d9f107c9abafa0aec8b0a630ac0670d70ff0af42638a513d56e279ac11cb3253730813cf81814c51374f5b0ca3dfcbccb04c93b40e4c69cd4d93a02cc16bf483f4bc0b572d3d3669eb733d335c2034334fb36c4bf1b39632b26c5ff5852d0785583d1041fff3b696148cc43e0d9957a57a3e0d78397558e911012e778d90db4da488250bc19c64d3ca966e01f266a85a85c1f287c68aa716eefed1aab90820bba870f68d6b94882c3569933643feb63b633643591f4abc8d5505e7cca970585f02c44ad6134a4422f4f02209bc0149c49cc9bca6e0b54372aafa18559d28a3aa4a34d0c319e6a8dd0b0fdf0f53f98f28f00f50bd9c75aec2a91d867634cdc9b5d9f107c9abafa0aec8b0a630ac0670d70ff0af42638a513d56e279ac11cb3253730813cf81814c51374f5b0ca3dfcbccb04c93b40e4c69cd4d93a02cc16bf483f4bc0b572d3d3669eb733d335c2034334fb36c4bf1b39632b26c5ff5852d0785583d1041fff3b696148cc40c9fee924a3f838a2a5424c9a6caf8c2b20c19023a1f92fe9b50e6ae207ea8cc321bf06026de147919c6601973d2642b290b34354f5212b013eea7fa29a91ec83b0d0def9e887241670083ac22704cc721a0b517d82254a0881bcfecf78b6dbe235e0ea04712b4c7adf62c654cce58fa7ff040030aa03836637d9cb2f77fdc900d32dc8ca576983c120c735255be0fb119c2a383700c2eddf9a19f3f23f8bc4926138696d6de1fdfa43798c09fd00138009677a40bf28b5bd06c2f3334d37c1f345661ac3de6130102277b6a9397f83fc66def025300e6d915cb09ec134435a91c7513a1ceb53a85ac9d6f7fd526cae9123f5399fa21e31af88897944ff7e15a04794c19cce14b306cac3256d913911cb42d5f45f5d007f8afb9f780476793d004376ad29662aee5c907afe555fbf44a44e67d25962335e9d951464eb4b680d20053e546027c39207ea10ccb7517b67d1df7dc7dc7f4bc9a1f444552bf16d0eb111635328b9735e83803dc4dbc4a56c9647838f1d8fdc99eaab2cab4dab6222a28eca41df5e4b188c96c6eb025f079f8b62c1d5dc9bc5788084524f37f60a76b2fc1f86c41f601ba4f909f0cf5e2c73fd381559b1cad46ec23b33d0e8cc88d2d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013aeb070aa7498648ab375422b3010968badea344b43a9c2d30727a275db1ec3414c245edc6ff71fd3103a8001a967a7453f7402960f1c754c2f7f1a10fc3efee295bba80c5057dc4f18c47e55eefafb85127a5fa368fbbb66523e852de390e0128bb17a9af433b7e18b4565c29c750739ec02aad1cb4155a95468a63aa1e8a730a6093afc1345f60363b5cb967f309226b75021abbf419b2b70fe19ee61ddff11e6b82f12923a12ee027d0a4a42412fd34bb12acb9d1f5c2b3851781b3e90caa2f50d95a6fbbf69d4b315b51feab760a01547d3e9b8250963cb44c579ff9d03410af26a590440962b4cea4ae015489f620f21bbd6dcaa8855c78e49560062fcd2c943ec42eabd11277f6c899f9594e319fd2a744eda4a79c63fdeaef1fe11101136bc13bd1542eed8809376606a6b1ce8273f1b71ba8517f352f45fde01eef001ee539d4e95b155c57d1eb01debe86f7b849796488505abb286e03e49f655502211ac62b16a4eaa3a82e14fe2141790869fd1f9780fc9e6070bf2d08609aaaff1a7a21288ec76acdb719970959b8a2d654e22cfe96f7d37097cbb19d1cfaa9082585ded77138953248e668f6a6475d29cd646bfd725525ab01617f4fe30556f92f50d95a6fbbf69d4b315b51feab760a01547d3e9b8250963cb44c579ff9d03410af26a590440962b4cea4ae015489f620f21bbd6dcaa8855c78e49560062fcd2c943ec42eabd11277f6c899f9594e319fd2a744eda4a79c63fdeaef1fe11101136bc13bd1542eed8809376606a6b1ce8273f1b71ba8517f352f45fde01eef001ee539d4e95b155c57d1eb01debe86f7b849796488505abb286e03e49f655502211ac62b16a4eaa3a82e14fe2141790869fd1f9780fc9e6070bf2d08609aaaff1a7a21288ec76acdb719970959b8a2d654e22cfe96f7d37097cbb19d1cfaa9082585ded77138953248e668f6a6475d29cd646bfd725525ab01617f4fe30556f920d8466abc34d842fba4a2d3e5faec3ac358a89a8d247538e7fabd1f9b46c3602bb62ed5e0c9cc9bed314c316c1b41ceb5dd1aca7dffd040743ff8ff5cb6b1ae1b1cab55855384e9b66f3a59f489a5b3877df175e591c7aecb6fa1ae9433943d1c540f1f7b7f2291d1eb33f1471739d15d07e38e9aad0f94396f5db86d0a74f0326120b6bf515b221310852856fb6eff0fcc1bc19c5ed661409d107320011cdf1e5befb06e097755d4332e6df6ede7ca9c58a9d35ae345e684462f69e8a550f114a6f5e0a5252cfd6947ae04aaba2d9026d6bd9acbc545a5adf9c260aa7550e430c5811c32aee5a22153a7f0325b3fc8930151027e64e584cf83aad423abce1f2f7fa171a293ce141f9fec267b2a905730ad52c91bb12d9c3f6f12e752be2da13819438f28470d1a7dd5e6a8de314adc7cf83914e30968248bfa89437b811a3b1305167a20d9ac65c4a1983492f784dc2b3dcd80074d1458a30cae7a9bb6933922a06a5fc9ba92285aff11e0f33ce7d04324d4a0bcd101fb9af49c39994f25b93c171529bf19016939b7cadd8bc2020271f1704718d120cdedd255a45c6cabeb1a2347260af1024a4eff20ffd047fac459560f8fa7d4ec98fd1ef8ddd427bab900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010d8ca4bca28072834a8daffedfa7e430adb101ceff0ef97394e1230706c756ef36df61061a3a69f0378967f3aa87c78da1905579a2eb4cf3e13e4c87efae6fab01b396d360d348b31e52ee8c978f0d2f43739cf0a0d6ff589228fbca8a24b5a017f449bff750251d13c9cc65446e10b4d648e55e770b271560f9e3580b37631530bf9aa0216b0ccff7c088b54038c4d35318c0589ea85364bc1573cb2f996dd62027600e81a387bbc81ed61f9f8dfdfd8508a8be161dc505564cf0a955da641901b938c18aafe9f5a5f8c82f74aec414c547645d28ad43ba56624d06ca0357563e46c73e7550160a5a0737d08b513beb5cff349ee09fb56142cae3e635fca8ab089e1bc7b56f91cc3ddbe8ed4769d467da64f5d1cb6252a3afeb8121f210b4ae3761e4384a906e33c2241712b8962b9847e1a32a3deaa677e941afcb0def4b532b168ae68b2dd8fd354b8ca26511260743f8cd18f8eb9d326f9985a9ba53876614e9751974d22702cab4735d9aeed9f8de4dcbe310615be92993ab4345ac789b1770b680b7e53cf20a79bf2bf955be23ed083688c0b326a962780989a3a1a4fb288f497f481ac30df58640d406aa41dc353e62734899d27236b527635c5e5b0601b938c18aafe9f5a5f8c82f74aec414c547645d28ad43ba56624d06ca0357563e46c73e7550160a5a0737d08b513beb5cff349ee09fb56142cae3e635fca8ab089e1bc7b56f91cc3ddbe8ed4769d467da64f5d1cb6252a3afeb8121f210b4ae3761e4384a906e33c2241712b8962b9847e1a32a3deaa677e941afcb0def4b532b168ae68b2dd8fd354b8ca26511260743f8cd18f8eb9d326f9985a9ba53876614e9751974d22702cab4735d9aeed9f8de4dcbe310615be92993ab4345ac789b1770b680b7e53cf20a79bf2bf955be23ed083688c0b326a962780989a3a1a4fb288f497f481ac30df58640d406aa41dc353e62734899d27236b527635c5e5b060df237e95603c22b115b51664f40ce8a1bf3b428e1c80bf071341ff56c8a1d8b2094e452eca6427b095af7a868bef31e068b2dbfb1a9ff44b42700a19e20cbdd2cde337a7b3c0ef134647820650c6ec7d5c865e563213bee2e943d34813d12542bb5219dd9c2b32a22408678731a30d64d099575cd588d66ee7e5d40520a43e30c0812d76c6f3d6ca6d1e6b527a66a7e647f93196e3898e285d784653440ccb13483450913f00e4bab1cd8ad41da11fe49887611ab7e701aa4d4ad25d9533a5c267aa804e96598e51944feeb0d9eebd8e9770699808f77d8146bb47a9a3344ca3f4cb718be32b1291c98d4e23c7a4e21740b2e921e5096323203ea9a4845e9211255406cdfa0f53f584b1db47762c816409f1fef9f3e3eb828c388d99e85cd112e336d0daa6f82d9f0f5d31d68f388cf835cc7481cfbedb523acf3fb73068c2a18559430108bed6edefb8e856f582ec04af7702308006ddc902ed5848f640d693e5d61737dc96252e83e54b8a2581c2700252ff0a3417303bb33d87408224a720ea44c2fc012c9709ee65948a7ec14364380337810bebc6acfcf8b318dbb1a94150b9add47d877cd5eddccec1a7bcda2e82555935b680a59efd4607139eca78200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013b4ffabf54ef14aa7b13f5a7b7257a5e308e816faa0c39222a4e7fa06db5db7021d8bde17c424baafa7f59723dfb01ec9ee571a93959718b3ac813122d7f9d82186ab7491d37885c441bf8f072881beb9892b82587c063a323a0f78bcb5bd58d25e7d810ef4669c8b1c014f5dfee91e34bb098e877bce6843c04da727181ce7c21515a40ce21d8343f53b682636495cedacbc6f397949f8f2e711c5621148f681367a5bf2ca2ac5ea2d53cf0a10b88c35a0c4f29ed90c12802d876d83a3dd4491109ad4c5183f69681888cf1ac9c73233ae4e3bd5ca9ad8e34b81c1a117946272ef652b3ae7c09697e77730e53638cdce761b53eaca34b8d647514d2ee86b9da1530627d9793d0f087aac0b85f0e3fb00431d9b6c6036aab6e6b5b95575e5ec22acf9d82686c2f0f78553f47a0f1c0501e14bf4543498e702ac1d557a8a1a13f29f1ec73f5e314b2a655c399db473e6ff2b2a795d4c41c3d8eeb98fdb4d7d9c9160e138c0a1ceb4d59aa3c6624b8c1902f93f1663488dcde0a4197ef4b28263811b99e43cd6f677d3facd2014864382f56a97af90beda1e0ff126a2d883740ea2e4661bc32909882c0532dfeb79bc7d0cb9d1e02fd5f573a9a1ac6bf77c8bf171109ad4c5183f69681888cf1ac9c73233ae4e3bd5ca9ad8e34b81c1a117946272ef652b3ae7c09697e77730e53638cdce761b53eaca34b8d647514d2ee86b9da1530627d9793d0f087aac0b85f0e3fb00431d9b6c6036aab6e6b5b95575e5ec22acf9d82686c2f0f78553f47a0f1c0501e14bf4543498e702ac1d557a8a1a13f29f1ec73f5e314b2a655c399db473e6ff2b2a795d4c41c3d8eeb98fdb4d7d9c9160e138c0a1ceb4d59aa3c6624b8c1902f93f1663488dcde0a4197ef4b28263811b99e43cd6f677d3facd2014864382f56a97af90beda1e0ff126a2d883740ea2e4661bc32909882c0532dfeb79bc7d0cb9d1e02fd5f573a9a1ac6bf77c8bf1733f2b7ed47f7856ef53c59d1176dc340e16dbd4ffbeaa34b8f12f425e46753031de3d4bce06b42198eae94a6f1dfdc75dc24f6997510e65a24910425e021ae23047753774a51f6cfa571f34fe94a79e3ecb46f1877dd157c8ba2e5c75ff3b4ff0e336e2e5226abe8fbcdff736db4e3f738e8b6205468b8d67aa5c343273535b015ea52416e7a587aec0b33c1f23bf92f14f4cfcdb7542338aa763af82c0cfaf50fa1ae59fddb6b9adaf526975e39df5458f9932fa9e19ad1fa451d7ab12745a41c23a9dd8057d4424e0aa40a65228e8ad90ea49260f18f97874f0461b4902bf82c0495ad8dee3910777e6ff0726b913a16209edefb4df9e6d4040a1e2c1ff6162c160ccdcc3eccbd04f689f695d8c129f99a4962fcb2f2cff6efb9c305db3cd3115f91808ea4f0d3608dee915625e47cae0fe746151e4ea622de1a4ec99bd0051552905690cfcfc984cb1e90e3bcc995106535da7ee5771176a716317c7958352508dd874cee153ed8dd03aedd20fd55c2ce6fa932b5ccacc5bb60761ae953250add71751236b3a5ab2c12dc6512d1442a976a95082255e9cdaeb8f4b836b9ed2eee419f3d7ce03e589c2ebe6647954bc31ee10efa8985d0bd778ed4d6a2001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012319485744650301d738d25c6acea202161badc3e30d202c1690b054fc2a2d4b0bdcf3a50e1c2740f10c63fafb9213dc1372c8907669bd12bd59edcf78f5382a38081f39d703d8783385ee00278e66981eb640edb2f13651b9094d917936131937deb4d6275a0eb18a4b7d8e05e8e841cfe268cfdffbb59d4f61663e6b29da072a2e814d9bbbf39db37ed3d6a06a179a25b97be86d0da12aa83798b1a31a2e4908b4a353c69d8e35bef969d0fe364da8cc5cce5c7ffb963b665c4b7c7d08360b2b3b77dd176cf217af800564125910b91877e9fab9f505e3b5b89671c40417f614c48822e8930de8507ffa9beda6ef4709ceaf014f57f337e3749a7b3bfbe80b182957517520ba766d801af45bbd539d1383c6f185e2321fc1135d71d41477cb27d6a8ae8adf4589927fe50ba442ac630ec2d20a836ac6fbd819d37b2beb883638ceb49749a3a450238086c5cab2a2113f4c49bb941e01832c33a24c246656f607314b68b65c5bafdc7f793a354d5deee2fa4f40752ef7986cf98ea0db99a90b1c0986f470323590b182a1dcf57d2a55b3630cb9bf622321784d67c8b5ffb2ca23f6790b8fcdca6f4e7d5e230a82d5aa6ee38c4249ead5fa20dfc9244a004d372b3b77dd176cf217af800564125910b91877e9fab9f505e3b5b89671c40417f614c48822e8930de8507ffa9beda6ef4709ceaf014f57f337e3749a7b3bfbe80b182957517520ba766d801af45bbd539d1383c6f185e2321fc1135d71d41477cb27d6a8ae8adf4589927fe50ba442ac630ec2d20a836ac6fbd819d37b2beb883638ceb49749a3a450238086c5cab2a2113f4c49bb941e01832c33a24c246656f607314b68b65c5bafdc7f793a354d5deee2fa4f40752ef7986cf98ea0db99a90b1c0986f470323590b182a1dcf57d2a55b3630cb9bf622321784d67c8b5ffb2ca23f6790b8fcdca6f4e7d5e230a82d5aa6ee38c4249ead5fa20dfc9244a004d373b13c6714b78cef8dc5e3cc4f50c91780db08667489f7b207fe4c0b6a1ae27fa152d02b6324ff73c4371fcf2114980085a9d40c83d34ab329a984fafa9f940d115d0bcae4e79a51577d56c79772af1ac2321c5960c60d6226ffa609757a11bd634faad91f2bb6e579a829163b97b27212242a15eb80ddae790bb8c804809f0b52bd9b1190731be1d19db257c95f3f46e8c614ce2f37433674ab0f9e46537466a22ed5b2bd145075e68e06f8fa235407581e555c134ddb8678d22874a345975603376366d0d8e5843d677eb2620cda147d78cecd1f66c34da3308e5decd757847302d8828dd10c08ee3a3f1780009a195881d74520479a243ad78b469623716ad04db9499666d1e5ed579a883588953998840cc5df74367787be511c7cb382b08195ce8da3a1e82250dea64a1ae7115f6a63d6abbe74025bd26c4720b2ab106213b7ac5e31fc839494cf9d28fe703932d1e74f2e2a7a59942218324056b7720d11fd573ec707a252070a1e3a1bcb5397c49621b71fe4c2e80aa20a772dd124d860815699b4b2480f697f491a63ee880e35e0a223ce53ef1dce28627d8b29685bd36d3dee588d76b0d4360da1e3e572f65b967506c65f109f395fb245e753c57eb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013e1ed7574e918e35b946e3027817a9863d26450831cdd8c06722c94e1efb042312a6dd5802890d174a6bbd93825cc197809ca44d5b27ca6ca5aad0ff128c77ab252cb31dc9d810c23b5012a6edf86b8809fcf64c46caea3495a5980c3aa59cc22b58633e537e1284dfbab141fd1e6073206d56cfcedcdfc34e049cc929e0165c1acbb09235e331d44357972b7820f97240b4b998f4810d2ae58fb0d3f208b3101a480fffff12c7e4d4e60447bcdf97072f8e3b4cacf924ed2dc61dcdd6bca4872982f9e5f6e341904acdc642c4b2f7fc806edc7e533c1eb962fe3f669dc37571167d061a091cbe6fb53239bd3b4d0803a1d7bc7db610da62362ef186623c8a900f8ee17dd27047d17604df4dd77ed7ee1b5683838445ae4c236faa3a14d14b3230711e822d8fb82e89fb20b22881281206f0157885074acf75bd86b2eb2eb4cf0dca67751c3167174e185c85357a37a66669f8958c0f6e6118012235681677f93235988ae3ce98e8b1e7a37aca85c859bbdca0667d3d8aba812c0eb797e9880804f405498cf703748679ce9a0b63163fddcb41efb3002ec9ded87a1e087057dc3b0bfab67308fc8b79863165f49ce9c0447b570c564cca51ba54b6cef78fa8252982f9e5f6e341904acdc642c4b2f7fc806edc7e533c1eb962fe3f669dc37571167d061a091cbe6fb53239bd3b4d0803a1d7bc7db610da62362ef186623c8a900f8ee17dd27047d17604df4dd77ed7ee1b5683838445ae4c236faa3a14d14b3230711e822d8fb82e89fb20b22881281206f0157885074acf75bd86b2eb2eb4cf0dca67751c3167174e185c85357a37a66669f8958c0f6e6118012235681677f93235988ae3ce98e8b1e7a37aca85c859bbdca0667d3d8aba812c0eb797e9880804f405498cf703748679ce9a0b63163fddcb41efb3002ec9ded87a1e087057dc3b0bfab67308fc8b79863165f49ce9c0447b570c564cca51ba54b6cef78fa8253217d362b7ff0d86f7e9427389d9d0d9fe1c87f0ee68d310812357bdbf6acca32fe3922ca873c162838468ca41d2b126c20f23ed8c8f6ea39eb52c992dde754f36446919f348dae890318cb52dd74143a3ca07b9d86174c8e83d69cea1adb98212a3968db2b796893a52de00944a641251d82bef2ae4da62b85cd653d42eae9b3e23054270ed13a79518070fa51b1ed82c5208acf28367f028f244ade6330dc41b403371f2a1012840e952dbfe89949b49a1daac6467a8988f6844f75eef342e12de6db33131621a15e7c7b250760ba15a3a145ae7b5a8f5320b15e4f1b906db1fa87d6b0d993e3c9a1422a538dd2eacbdf7743089b68789326f0b7bc1f2982d2045ccca50f80829241c0db60b335fe4fce338903cd2eed7192b6bd30970c9d42d71f1d35ea3d8c78816622c6524b7459faf044e02e22889564d4948ca50c7ae2044614dfd6ce647a4628030c55b5be66282a9cd40905d93c841c6905bd1ffef1032501704d8d68f352d08ed6a87fd9848d66d26040d682bda75fe87613a6901276b63821ca7fbbb77e8167c71a92aee70f1fbb1d47b116af88f0aa2a2941e8322d2a6858b72d923954db4276c406b2a8b10a7c2aecaa27b0075acc4b9a5040d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011ad61a3540a15933e799d16c17ad93f8d4ec63a02132b08a43d71f62823fa5031ea10f1ea75e92e3f40408ca5177f4fdcd4400c77672ac572a8ce52eeda4ed3c3dfe68ba42fbbbaa3c3998c238e63a901c1baa3a6a22b366b8ef8dcba12f50cd21b3cb2bcf2f3ee81b36ebb27f1d9c4d35a0e7cd8fa3b454e1d98f2515b21c2e1e90fa6dd08826d3fa8819d2b45591f8161bc956136680e4cd845d8f0d01b5063139a10c547544b4061c41a42028c05d62a294257ff559e6105bfd54835813a4269e6cd37938f2d8bce4aeaeb0f5b1713b751300ab9a20ad6c26c541de8510591961932c86c70d27431b51514f0a4e8ee6d185fb5db2d86e2d066bab217aefa8011820215e1cbe3bb077696974cc7735c275940f3e1bb810513a4782589951ba3ee7dfdea1e341c44f8896968b3388ca5fd104eccb31410b47f2e96aa766ae470578a0a6d68fb72a72550f0f47fe540ccc4be44c368a98519623658bbafe98a23a875f59297048d58daaf0f0b801abf355fab4afd2c260ca0309cb614501675f1b5b234230ce93d43ba94b4c67f7a43ffd7b757d10b4f997eeb0fbbaa6f8fb2a24a4dcbdcf316c2bc456b4b398085bc024cb237ef897ff83aa7c3532590704d7269e6cd37938f2d8bce4aeaeb0f5b1713b751300ab9a20ad6c26c541de8510591961932c86c70d27431b51514f0a4e8ee6d185fb5db2d86e2d066bab217aefa8011820215e1cbe3bb077696974cc7735c275940f3e1bb810513a4782589951ba3ee7dfdea1e341c44f8896968b3388ca5fd104eccb31410b47f2e96aa766ae470578a0a6d68fb72a72550f0f47fe540ccc4be44c368a98519623658bbafe98a23a875f59297048d58daaf0f0b801abf355fab4afd2c260ca0309cb614501675f1b5b234230ce93d43ba94b4c67f7a43ffd7b757d10b4f997eeb0fbbaa6f8fb2a24a4dcbdcf316c2bc456b4b398085bc024cb237ef897ff83aa7c3532590704d72256a7084415371e03a09af0c5e9eaef22518cb5c24cc2f8985c7adc3ba2275d23e05acac8a61cb993ec659c0d776d653174f6fb40fe18fe66557cc5aef96e891d346632101230652aed2e08b58ff02fb85157667fbd12938e868e28895fa9a007bac4c07890e1569b02f52c0b753f5d714001955f6fccc2da327d9f914ca22104371e0860c4a6721f59ff5befb1777b7a1f05f519d1b74b388c5ddefcf9939506b63c5784298261fdbcd42f0eaca7b5553714b0d469db00708bf2789107b57b3e2aefb3fdc36a87911a687680f69e292b5a7586b5396fea7aa6d6029b271a8c11c1adfd13df51e88b6d12f4c8b0f50a84ed479ac4e13d93ba2a32c692cd946533f0579fde0f34c6e16b75f5ce232f41531279794b06d084ea4344c4b8c212560f7703060bb5570f74d3fb958399eb74d829e54cd901369c0066cac3a1e560cd1c7d4f27373a4af6a313c9a16932525ba15f047df135b30eb3ab227b2174438120637bf5fd7292eb3cd32c758105d23add806b301422f8891b91030e8313ca9b130924584301a804419c19381a5491f0f891ec80cf3c5c2ced1f5566fe02fbd727c3c5602d2129ca10eb09c5123b6a7b040e5579b407bdbb1de3f870123d71840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001310cfa1903dabbdd69cca8e0e9a298b6369483e59b0eaf7bbff78b19cb5db0581b5cdac5added3ca6f7985ba98cc73cac9c693fc242533c7cd5cb14d9b0435360f4ffcfd88eb83a05627feae7fec419f74f20a5b98b407a498b0bccf8ae01e3912b8922a9115daefdf287be3d169ea87de16853281125a96fc26b57103ce187327f49c4c7e586b835d37c7392d6cd39ca385ab8957b83f273e74a5b405c9219137e5149d21d3338ee3babc23e7e9603e12002913752dbd0aebb7353672ce74ee03dbc84173938ebec8f00134670e0b64fd78269425cd6cd77b83809a10464ce73c2437be8c6c7141370ffecb98f1f49b24ce7267e37f8c441da9b052efb9b31a134ae94741e1c9b9ecb00606034638f8f358c0e4bd03203569918302515f80832cb516b8be1e3646134ff9f9fcb9c7072eedd8174c49d8e62f9badeaaea07f7e20768e644968f0a19f701e1e105f1cdc9e752b7ba7c2a7ef76aa5e1e96dd828e1f89719bb6970f5e608fe1e1efa0e32383d16d80618a512c2282d2ce69227d732250c7f56f0cb3281d30969651db904ed3bca772343355761ef974bef2538cc41daf380a90f34cd7e2cf6969ae246fb14e89f189d519a3a57a33bc2e0dac733d03dbc84173938ebec8f00134670e0b64fd78269425cd6cd77b83809a10464ce73c2437be8c6c7141370ffecb98f1f49b24ce7267e37f8c441da9b052efb9b31a134ae94741e1c9b9ecb00606034638f8f358c0e4bd03203569918302515f80832cb516b8be1e3646134ff9f9fcb9c7072eedd8174c49d8e62f9badeaaea07f7e20768e644968f0a19f701e1e105f1cdc9e752b7ba7c2a7ef76aa5e1e96dd828e1f89719bb6970f5e608fe1e1efa0e32383d16d80618a512c2282d2ce69227d732250c7f56f0cb3281d30969651db904ed3bca772343355761ef974bef2538cc41daf380a90f34cd7e2cf6969ae246fb14e89f189d519a3a57a33bc2e0dac733d0c5616a0d608205974050641a99871d2e90f4b2a2e2fffb2fd7200af43585b73216856e307f292621acd7b9bcdd9f1f234dd023a65742fa4b403e12a7f1d05f635deebbf770653215ed8f66f67e195846f81dcd657970eecc79a1c91cd7bbaf42ed4592094d5c20a37991900b44bf299b57a75103585a46da1c84b9cc43c5b2a2fb12e7c0a15618454a27c66784ea32d8c9b5ade2b38fd01de2b7d13079136140b4d318dbc93c00bdd3fb3a49c83a4e51b8b6969a14d1b74c1834d4e6269b9682bf6c25f23207f7c447e3127b72ad179b8ffaaf1f8e01ed4293daf17abf8ce922b663e58264a4c3786557cbd19e6ef230d8c427c66b405614756a560666847dc2b234a6f0b5f972145fc38198cb042a555f3a4c1dbfd98dd0bdf60f47d98fb0b2baa350e3db7229f424cbd5cc7806424d06d1fb09eb1f4d94ef9a721470e919d1fec5d2adafec6ca6341db7ed3afcf484cf2ef07d13eaaaed82b2413d8fd20403bbd2831fc73352ce929a7bdf486763f5969560765b9bdcbf3e1eb8896f9c0ca3f95250625542c010935da25269a54fe2028bffe4fa93d730e3e9ab6b76a66c82ec5fd2d63d7b873f4e13a65f034023a8c5823125194dba402e8c5f572f0e001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000112f1b8068c96bfcf3b37cb4b25f24d58aafc4f73668e28e83c619494f3b06fa5381a0dccaec7d9c298bc99492037b03fd72ffb2015647ca08d3ffff7127589d4014e86a19e664f7ad4253e399b96e338aeaa93692438eda0c7c110a833c6928e0ef7b7cc2b923ab2f07e4cbe304bbbf0dbb6fce4490a598d0ac9dfd775ed7bae1a062a96887f9bc506b3bfe8c3b758743ad6d7d48ed816a17381b059d2ce563033a8d3cd23b0f5a9e69ac9b039cea6c22e4c20a21b4fd76cafe599368c1ccfc116cd78174dcca99bf1ffc17681b9752c4950b672045387a2f8e296293b38b403293287e8b23356640e003e897e468ad3d8f5e28a04f97178a04a9ac3c4c74bfe3203587484ff500bb9fec750889f49dd4c4cf73e0c54ad13433fbde1281b840e0dfca78b7b00aff4460138af7760b622d5f9a1bdfcf84c0855ed730bd7e47bf33a10ba4698fc903aa1f9e492ab1c715216ad094221c0760d84b7229ec889944305ef45b967036fc55e061b6d54e38eae0b998fb9e78c830e14760e4e37766bbe2253a360fceed12529e176dd578e3699e846ca5a838e69d532dee965eaafe54b1dac5c9f03112edad61e8922a871c96639ffcea185be8f46664e478715501ab616cd78174dcca99bf1ffc17681b9752c4950b672045387a2f8e296293b38b403293287e8b23356640e003e897e468ad3d8f5e28a04f97178a04a9ac3c4c74bfe3203587484ff500bb9fec750889f49dd4c4cf73e0c54ad13433fbde1281b840e0dfca78b7b00aff4460138af7760b622d5f9a1bdfcf84c0855ed730bd7e47bf33a10ba4698fc903aa1f9e492ab1c715216ad094221c0760d84b7229ec889944305ef45b967036fc55e061b6d54e38eae0b998fb9e78c830e14760e4e37766bbe2253a360fceed12529e176dd578e3699e846ca5a838e69d532dee965eaafe54b1dac5c9f03112edad61e8922a871c96639ffcea185be8f46664e478715501ab601d897ca49c170227ba0dfa932440598cdeb86e669185a8a6fc3c7d2681abf5304e03f57d56ffcaaa57b51437044599eb849041d11768a2b708d92282ca9ace91f98ffbd8a3da345af88fb7fe10645f12fb00c65b19dbc221d0bcb634a1002f613ce0233883d7e84dede2a35057430ae15ae6c3f69e55db5a012308e304b9caf3dd6094982f670d2f2866d48a842414936d6dd67006af3b35788880f4e9586d23638499481b881c83502946221fea966aecfe8f75757f2550b67d92379d88fde38a4626a4a80293f00840a985c3e73948e64988ca021b575e0ce8c4a3145a3552f6d78133ae6b84c5dc58ddbad1c3fd556bf69a7592623ebd825e2ce3854c7e50db3d96f7651062b959429420fee3708d15c5c8020609b5b5aacaf25b53a1df62d9c699ca45939986006081df3441da5169175af170263df4cd82a74434458d5204344d0a0505072dfb98875019cd64a12d5491f251ca5ba5ea96dde0c88a5202156e8aaf9a63ecdec73f8b14f23095bdcc22c417729aa2096772c0af75f01162f35c89eabe8aa73f72f6b5b9a014c522849b7ae6f66fc50af9303c0cbff254c126c0bcae5eb4d3a8d202ac977cb55830b47820df4dd952038a1fccaa7d6c4f500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012358fe7c9cef3ff046b8298c1d7c098dc45ada6c5d910f64eb50491768556b6f3ab682e1f8fa84a2a56f37b93cc5b4963ca9d1c95ca082e53d5aee8369a6aef02a725984ce33256fe69afbc5595b497f1ad47293e86482a800f4ab141d6310b2125d20e64ac58d1e2eb21f967313a08089a04fcff02196b1a2007546fd47adc6174966432cae29191abe2602b4c76ae461d287a9d5e9a11bebebe6437ad285e01f1d4ae6364ceec2c3e4719e5c86b6c92aa5b9d85b97bf4a4877d8131c6cdc8e1fbd5292bb47a273d1930e25e7444ff7f0afb3f24a21d1339e0ce76ef5b340562042ad6d44b85d8c2e6cf1da18bbb0083196e509bf2b27e7fb20497e0a4cbfab1eb29cdda8662c4317df46bd84558fd76ee151c3600f23cae3e62350cc8041ac214d63225799d3bce820b9427baa7028b3654738a93dd550b5470d9c337fbe55197d105449fedd4f775c61b395abcf34e5d966d8cdb1c0bf41244eb9fe81485a2682efabb60122b088a39e4c6a5430cb3c6d32233b9b385c5808e233017eb7a73f7151a571fa528d54cde881ec5b0c085af8693ffb2bcaa0ac8858b4f88669c1008eae5a8e05ad72ab32177e13a4f3f7c74e2fbc0e212e7aeca4d838077996401fbd5292bb47a273d1930e25e7444ff7f0afb3f24a21d1339e0ce76ef5b340562042ad6d44b85d8c2e6cf1da18bbb0083196e509bf2b27e7fb20497e0a4cbfab1eb29cdda8662c4317df46bd84558fd76ee151c3600f23cae3e62350cc8041ac214d63225799d3bce820b9427baa7028b3654738a93dd550b5470d9c337fbe55197d105449fedd4f775c61b395abcf34e5d966d8cdb1c0bf41244eb9fe81485a2682efabb60122b088a39e4c6a5430cb3c6d32233b9b385c5808e233017eb7a73f7151a571fa528d54cde881ec5b0c085af8693ffb2bcaa0ac8858b4f88669c1008eae5a8e05ad72ab32177e13a4f3f7c74e2fbc0e212e7aeca4d83807799640364dd1d7f616c318475ba546e39a93b592fb9adb0bdc5703588701952d70c6c806dcffedb22c4e77d8ed497e529531977a2201efff2be98cee73e2ebc342df1339d24e3b13b176137675c24434341c29d0daca0d4b50794a8b073a0aae8ca7571237f319d05ab81aa5bbca31f5e173ee541b4e6aca701512b448911f6f5b009d3530b26cc20d4b39891caf70150df9705e98ea421ae5b26cf16e8fdddd59bf991cf329bab9b670d0095d183e71880aee2a0befb493be15f73009bae80204efbe1054f3532a8c6c8d1f1601dd4cc3d8731b676ebd75f715b6b82f9e6273bba6be075da9215480f251dc912ce901a75f0c7f114709bf2cbee148ac2d79d61e1d1f2352b408d5ff68a7694410471c6370eab5b216228d4570aad27ebca929cc815824acd20a653dface2729932149d1bfcb9a4a58a0c1b81c40e5fcafe3843509c90ab9730d5750a1962378aee49724c60264ae62835483fc8a05a0011af39c3d8430d39d3364de4c60fcb4cea0244c19937759c6c39d7b666501ad782ee5ee5c6d37732e318680b588ac1835cef0c912c021d7b0449b222b655b312f5a2da7d1b5392d9bb0f4ae0e7b73f9cdbdd049512386b39ffcf7b53d74b01cf90f5b6eb979000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000105f968c6b8c2411e4468217aec6246e62aec0ebfb5b7ebd3d6e6d96a8187210d3c32aa160f96f4e94bf3d4c4fa8edc23b99973cc860293fb0865f9f636d25e5303257a36a28051fdb15c773a6b35081660989b3b34516dd75985ae6879cbfd6d32ecadcfebac3eb9163559ff1645f81c2adc5212b596f050b93590d0d33552d511083ab205e0fb55a09eb8c2dbbca21124ba9d2bd617869eac23ea90202b11a117eb982c04cde16893b977104bb173ab0f9c30c7e207ae4507bdefa730435fa72ea29935b680ddc9d09db5bb767c308cf109041774f53222cd326a318f5b4ed8115d66ca497f22362f624a448983cf73313d94e49457c6f8cbfac6bb70a4b129292cfe0c908454f113148ca9506cf2c04e5949812ce30f5b36748030ccc88a3516d301f36f7bab0eeceb7356af930d3fd3ed4f7adc69e9c062b8b0bc333775cc0de0f63ed295a8b55f66bf4e9220bdc120eaa491c488617544beee2cffeab306321f09c12d6a574aa09940b16ddf423f015bf46a44c497a6546e42c000154cfb0564cf3a1cec4b8add01bc88daa3b4c5824e9ddccd5cee2ebe8d75f3ff957f1d3a9b30c5e313b47522fe4377255c4b3a9ff7fb1f3bf00aecda9fbaf9006a80e42ea29935b680ddc9d09db5bb767c308cf109041774f53222cd326a318f5b4ed8115d66ca497f22362f624a448983cf73313d94e49457c6f8cbfac6bb70a4b129292cfe0c908454f113148ca9506cf2c04e5949812ce30f5b36748030ccc88a3516d301f36f7bab0eeceb7356af930d3fd3ed4f7adc69e9c062b8b0bc333775cc0de0f63ed295a8b55f66bf4e9220bdc120eaa491c488617544beee2cffeab306321f09c12d6a574aa09940b16ddf423f015bf46a44c497a6546e42c000154cfb0564cf3a1cec4b8add01bc88daa3b4c5824e9ddccd5cee2ebe8d75f3ff957f1d3a9b30c5e313b47522fe4377255c4b3a9ff7fb1f3bf00aecda9fbaf9006a80e41638c722d681b9a367707bc6a94b9a9aab39f07019eec840162b9a06124d16191897330ce884f145a19e4048a1139ec5eeadec55268d2504700ae2a32b9355071c23a9dd8057d4424e0aa40a65228e8ad90ea49260f18f97874f0461b4902bf82c0495ad8dee3910777e6ff0726b913a16209edefb4df9e6d4040a1e2c1ff6161ebc262606335e3e587d7e63750e0a5adad8838f1aa5042ed3c5763b731e8aca33ee9b7f9645447a48c2745fe1f153806d0b3aa5baedc33fcbb063bc140a5fe73af4b0ec5afb8e6cfccb07fa6516093f2644f5128a76ec00cb3489fde19ce0262991c70912dc4f160f7246c018afa00a18d50e80ca0d22cd97373e23b420a6dd3ed3b9fd366cb2ea9c8c372d4d9bb436807bbeed619a62413867af17ada660120c8ed627793d7679f752f7b2eb08445853ab3f8c5f8aa6cd8b28e4055ba2114d22504c2136fece9f7f1480da4d842dd5885e9ea119f60e6b64061e5d3c3f2dcd084d4c62435110f12795cebf6c56887617746f00a1de72b234aa13dfeda4318a2873e2947e0c13fb8e6ce993ec953bf19c42c40e1fe9dfffb3fbb894d43f176e1a7a00e99edbe1f5dcdd6e5005b6116ddf14af058b884a805f6ed87cc837943c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010c56d65ec087ad01cd5dbea6634edf80bb59a3ae965619c30cfc54753b4c3c8d097a657ce318d0ca75461ca5b088d15adb88479add9b66554ea6ebd22813788f18a5dee125ffe8532147d1f0e0552faf64caf5b70fee05b7337be1199aab33c716d98ae8da526f2d48c2c7780c7b322a8dc0b9a749441e1c5e18cbda30f95faf35e8c8782d61e9cac3288801854da2b7336fb71cf7bdd44c92a860ac359a721701d26a4d4ab26b790d3cbe87eb4ce58f7179c3704b4783bba22cc3f87c93947200000000000000f03548583f27b2b4356807d53955641877730d4b45ee8548a527f7218a4e6bb5cb10f302574e63c4b901599e64ce113f4baa387661895f6d7299c43272ad1427cc0e1ae38ed33bb62b1a0b7f491bb98e69fbe3550a5e0be42038bd2efcc282c0e924027d756315df18a66547111d6e5db85b85a4bd47dddc3f14afd6a089a5c040278a8a8a8e5dac85ceb92c2d77d16a68c57f2319f6f1d4c13423f04294ce9949304729f054d8488ce2ed9cb8ec4885d6c6b3767f6146065a3db7cb19a5858db41ebc6cf7602cf88907d29c45469c168031144ab964be099a1bfed1d7ebacca8127ee0d6a6edf1e09317a457fd01fab4191160a300f07e861a449419f0db246ea3de3d974342f70b5e8b36cd853985b4e2f6a43ad440389e636190d40fb5945d53dc4c7373646342503af1ab5dd8cd6e5a96dbe546a289f69c88ffc135acd5706307e18133834c41eed5d5cbd2c1bb726a5af7214b4eabf3cbcefba81bfa9d45227539c67ab0130f3c4496c2937fe3918e6832784a34d1bdeb4ec00da7aaa52ab0dab453d8897bd04da30484ac84dc2dc28c579462d414d16a68b96bf79d7c5981350675ef057ba6799139e1d1ccf464ac430b501e523c9fc53655595dd9d61b71aeea8239b7bd1a94d67fcf6beb2ca6e53264f1afd4a928d40ab689990a7099d3107d98eb2bf1d8b0dcf8ed3cdcc79b994c9260a2593ce67d256f31552f5f7ea288f3a8dea32ebd799f0570c944829da5b9625ea29b5afe9b8052621b4d653752f4279ecf903093b17b671d9cfd1c665309c73af2e822b31b9d6953a857dd38825d10926e819c20767a22c0e93f9e463397373746220f22466a00616cb2fdb1138ade1a9f42d8bbe0d189cb26aa4f20a1e3b8f171beb167913178c820f1b39713dd0205de1bbeba9c5f9a5467299ed320cc2734f238b7df7dedcd76665d9a9e839a716318e3efd0c0f6e942d02e4b885834b18d8677790073a2388cf060b023f31dfef18567d7afba8b417d13983b6bd95b2be7567e37e9d2c0b231f6919ef4a25f1c5628cb87a1708f2b1152a963981f67fdb23f0545c7e45d0983cd13a37b33dfeb7450f295aac9fb7e7e80fec236aa169578a3f37dbfc5e2c0696ee5ba9d026462f30e2171900e7cc2cddab700e18c657df1d5bab56c58d73d58c0935142b0f2b01e36389a9e349caec0249558ba6ff64344f0a17d9c53300237d135c887334b557b99be09f308204b837be51c4ab6019b57ee2c08588d477ae2fbc108f7e0127b8189b51952b18175e69fb40436f2c1138645d7a6b2f52e4972c1510555e16a9fc6247e45fe7998f6a7c68d9acd03ddac838f17076d085c9f3432543d19e3b56f4937abb30bddae323414bca449358f3a64577a64986cc670e0b7e7aaa6f1598820972a7f0dbf2fbedf842076ef74357fae8d0482f300fe63c8ede319bee13b651b1bb25255aa47a3060c44f355793b84d119b0bc89311b690ed61e48cfc1b9fc41962845834e8919a924f87e488e39891e1ecc47dc60b8ec3bb555c11b22f12f0e5a1cc1c70d68873652cd03bdb3cd1a8c8a44af488b0a441df2f155ef828bec3954169d8a1db1e55813749b4644f60f0d0b3ece692c137797d0b3ec80506b9902a20d07685054293a6abeb2376046176e32eb721a3a344f7bb3280e8af2c20b023c8484c63bfd50b4930a4469a0b6a256b46aaa5a62c98b21d9044e8cd3962e8cc9d676d4f60ab2516610279de88c7bb546cdb12845a72b0ae3ff2994a2260665e325b5b469947c9b3154c17aab49e66e4547b825a074947527cc9361416a9fc6247e45fe7998f6a7c68d9acd03ddac838f17076d085c9f3432543d19e0127b8189b51952b18175e69fb40436f2c1138645d7a6b2f52e4972c1510555e31b82c487111ed480812f9c025d4f2846b808c9f9b3f29dba60e68e417ce476a0ab274da6ee70bdc8e19f3348185d3f8bc7630f65dcca16e7436a4be369b452436afe854276b0136e6752222c4749b786e684f82dc84aca54326c12e2f8a1a1d1cfd3ec15987213e8415e5162d02023b468c475eaecbe692130aacd07901cbab2f4279ecf903093b17b671d9cfd1c665309c73af2e822b31b9d6953a857dd388288f3a8dea32ebd799f0570c944829da5b9625ea29b5afe9b8052621b4d6537500e1a9b085436ea221593043cbcb63107f0190bc006ba5990dd74f9897d244d412cfceb6f70f2398a228ae0ba3ca9f9a7daa6859270e162295f21db2e1fe598e1e313c78bc1ca28333c42a2698827cc02659a9477c720091c5ad88a49371d9a90f550b4adcbed9e2d18da282ac4b78f8fcdacffb82863a1fbcec0a7eac8e8c7c304729f054d8488ce2ed9cb8ec4885d6c6b3767f6146065a3db7cb19a5858db4278a8a8a8e5dac85ceb92c2d77d16a68c57f2319f6f1d4c13423f04294ce99492c20b023c8484c63bfd50b4930a4469a0b6a256b46aaa5a62c98b21d9044e8cd06b9902a20d07685054293a6abeb2376046176e32eb721a3a344f7bb3280e8af3962e8cc9d676d4f60ab2516610279de88c7bb546cdb12845a72b0ae3ff2994a2260665e325b5b469947c9b3154c17aab49e66e4547b825a074947527cc9361416a9fc6247e45fe7998f6a7c68d9acd03ddac838f17076d085c9f3432543d19e0127b8189b51952b18175e69fb40436f2c1138645d7a6b2f52e4972c1510555e07944f28e671033062544d5097c62496ee838e082d1d3613441aaf48a4bcd9233bd107d8a0f5ba8fcc18c7bf0ee4a144498c02cd0d8ac0fb20558bcf1c1365d73457b90160907f2aeb4633bc0b364085d6a9e4a5934f3acb6e229374a1c046752541e3fa2c2db924d7db53fde34e3970de790a14bfd0852c5b1a2b3196b12bc626e78348b7c3e26387cd9b5fdf858de3977badd3b3b0cec4a8eee31885336c1c30ea31322b7212af29d92d868494625bf4b6ebc5a4870c56c8ecd843b520bae104d774ecaa938cc135a513fe1550866b2850f62fd8cad6b29ec843a9da6bf54a2d7289f2bf436020ce582c0bdaa85fdeda2979598d9bc4a7e10f4aaa2e64167c0b34f8d905e2cf16720cc7283908de4336a682d1b6c1c0e43e094f69f2810772216abb6d7c57260cb8030a57d9ffe28aefea4c1266b54d31590f850552e6143314c792684ab495982a758597475718449cf226a61fa02c3ede0cbb4058695046030a221298815f7a8731434f1cc2d7faccf9d9f72f4ab5c0faa1cf2ee1ead6b63209c0a4b08410ef1141611633842024b71ed37b030dc1591b9f24d2e2f6bc6f315cb68648dc98e76bcd56d3a4c3d6f4f36da65d451697c057da5f0ffeb3bb4f3b582be094f0faaf81beff486a92dcf60e8f9ed2d21f4fddc0cd7297247ae21200a468462286c55d93702260059eca5b3fdf029d42237d58bdb4ea009782d77d042e35ebe22430bd87e5b1a95a830fee76d5e19f459f76357089b727a2dd5daa13a37e8f0111c45529c1173d0996e050f3161efe094b6bca6824d3479776c952042531204dd34628c78122232886faf93bc45560766493f1002161bec381a8c23e90531512c7bc57c8991f7b63cb5ba3464edc92c2c1ce07e4527fcbc334ea452b3d169c7a1973483419483d16223ae3bfb11c835c0a56ca9f191d86b942b37d13e25fb5377716754bf92963dc4e0901f5f684f25603c5108e61a2181fd2c6753d65eccd61a2e2b57a6ad957c8e514d4df70afb5c40cc22e26643584b156c7dc1a6bc7ad8193125d373bef8e9b34db6aacc1e9e3942b18ed4b7785d788fd5f21108ac1640bb3cfe3cae9963278770b25ad558b7dbeadae83f9a9479fe3704ca017d4d6e6b68c307824d68e7db72524ee04dccfa3a1c7edda73e9a5fd3342af2f0d8f740da0acde454a99785238eafac63fe00d09110b3b24cc4f74b1785a6f721617a0937708735765f9f908d4d93fc3ec4ec4917f93f2b58534c77757d0be4d13a37e8f0111c45529c1173d0996e050f3161efe094b6bca6824d3479776c952042e35ebe22430bd87e5b1a95a830fee76d5e19f459f76357089b727a2dd5daa0a1cecdf9d81c9b80147d2f3f495b9461c005a05fe062b3fc6343a77eaa37faf33ec5e649bb17b24971233729063440f272ef3613cc51d7b554cdcbfd65b0e2e09c7ef1664371d144ed190ff3f53966e79a3eb8c3f902ac48b815f3ad5ebc6e22cca7e3c59b95ee5d610142f7ded8a28b709459b19da3110a9d42c4209142e5203dc54e8f9270f097a92e466bd58cbe380504c9b2364ae5a63f77a15e80e183f13f55f91ea0ee6093713e47fa6c1245be99bb4022b8633a574b7105952460ebd108ac1640bb3cfe3cae9963278770b25ad558b7dbeadae83f9a9479fe3704ca017d4d6e6b68c307824d68e7db72524ee04dccfa3a1c7edda73e9a5fd3342af2f0d8f740da0acde454a99785238eafac63fe00d09110b3b24cc4f74b1785a6f721617a0937708735765f9f908d4d93fc3ec4ec4917f93f2b58534c77757d0be4d13a37e8f0111c45529c1173d0996e050f3161efe094b6bca6824d3479776c952042e35ebe22430bd87e5b1a95a830fee76d5e19f459f76357089b727a2dd5daa0b9f7d8568bf92422ffb0b862e1f3c9a0dc73a8b9778e64389fc1bdfc1546e1f388d6260c6d7284458018724c6a0a1e0c7b564e7eeb29d45095f6c9f3317ce2909cb750558594ee5d025820fa8492312ff6a198e3fa498af67be88f5f853ebed1f45c66fb8e346c9d0bb6bc5186b9e314a8628550bd3068c32f2844db4d5062d13f55f91ea0ee6093713e47fa6c1245be99bb4022b8633a574b7105952460ebd03dc54e8f9270f097a92e466bd58cbe380504c9b2364ae5a63f77a15e80e183f2b73427823db194a631d74688980d99b6c0b4413dd6076c5edb84b79cf2e569111878cad6442b92476be1aaf8a346cbd0995712db840180872f5eb4a0286abe7301c8cc67e43cbdb6a82eb8f6b4a4b7d14d2734f5fe3574e827207a468f45304337d55ee920079efd28ee088a3ebbf80368d88b7a8e55257ec5f9219362196a42d00fc7202af9f2942b82f54ac03520d84ae617052fbe8270d9fd7c8007e7ed12ad0b808e08655e96eee9991b8169e3207843829053bf2f4643be39439d5a82c01a4aa81bf6989c7727db214c1e9e9d1f499bfaede585106581c20e19342e0ba0499a64a4ba8137997c10db39b8ddb0073ea33c73df188eb0850756999c2f9cc34b557b99be09f308204b837be51c4ab6019b57ee2c08588d477ae2fbc108f7e0f2b01e36389a9e349caec0249558ba6ff64344f0a17d9c53300237d135c88730127b8189b51952b18175e69fb40436f2c1138645d7a6b2f52e4972c1510555e16a9fc6247e45fe7998f6a7c68d9acd03ddac838f17076d085c9f3432543d19e10f302574e63c4b901599e64ce113f4baa387661895f6d7299c43272ad1427cc3548583f27b2b4356807d53955641877730d4b45ee8548a527f7218a4e6bb5cb0e1ae38ed33bb62b1a0b7f491bb98e69fbe3550a5e0be42038bd2efcc282c0e924027d756315df18a66547111d6e5db85b85a4bd47dddc3f14afd6a089a5c040278a8a8a8e5dac85ceb92c2d77d16a68c57f2319f6f1d4c13423f04294ce9949304729f054d8488ce2ed9cb8ec4885d6c6b3767f6146065a3db7cb19a5858db40fcba45636eb958418480aef120117a9261669186c9672b0113e352be44a86a7303a1c7194ef6e38a61d3b1ea613c1cc8b6cde488f0b09c958e1f769375aea5b13e25fb5377716754bf92963dc4e0901f5f684f25603c5108e61a2181fd2c6752b3d169c7a1973483419483d16223ae3bfb11c835c0a56ca9f191d86b942b37d3d65eccd61a2e2b57a6ad957c8e514d4df70afb5c40cc22e26643584b156c7dc1a6bc7ad8193125d373bef8e9b34db6aacc1e9e3942b18ed4b7785d788fd5f21108ac1640bb3cfe3cae9963278770b25ad558b7dbeadae83f9a9479fe3704ca017d4d6e6b68c307824d68e7db72524ee04dccfa3a1c7edda73e9a5fd3342af2f0d8f740da0acde454a99785238eafac63fe00d09110b3b24cc4f74b1785a6f721617a0937708735765f9f908d4d93fc3ec4ec4917f93f2b58534c77757d0be4d13a37e8f0111c45529c1173d0996e050f3161efe094b6bca6824d3479776c952042e35ebe22430bd87e5b1a95a830fee76d5e19f459f76357089b727a2dd5daa0dab453d8897bd04da30484ac84dc2dc28c579462d414d16a68b96bf79d7c5981350675ef057ba6799139e1d1ccf464ac430b501e523c9fc53655595dd9d61b71aeea8239b7bd1a94d67fcf6beb2ca6e53264f1afd4a928d40ab689990a7099d3107d98eb2bf1d8b0dcf8ed3cdcc79b994c9260a2593ce67d256f31552f5f7ea288f3a8dea32ebd799f0570c944829da5b9625ea29b5afe9b8052621b4d653752f4279ecf903093b17b671d9cfd1c665309c73af2e822b31b9d6953a857dd3882d7e8e273e95660889eef34e296c15e15603cd92e0a9c5198a378eeacfb927572cc3dcb901cb2ea6b70e37813c1d571a44eb4e840f5f7c7908c2a671be86106219d6dfaa151fb2e1c3aa8497cd788f24debb4b490de6f85d24a52ce88c0219b40a2428724f97b9ed15b586dd7f582082e550bebbf21bd27f45e59370aa0030c027539c67ab0130f3c4496c2937fe3918e6832784a34d1bdeb4ec00da7aaa52ab307e18133834c41eed5d5cbd2c1bb726a5af7214b4eabf3cbcefba81bfa9d4523209c0a4b08410ef1141611633842024b71ed37b030dc1591b9f24d2e2f6bc6f315cb68648dc98e76bcd56d3a4c3d6f4f36da65d451697c057da5f0ffeb3bb4f3b582be094f0faaf81beff486a92dcf60e8f9ed2d21f4fddc0cd7297247ae21200a468462286c55d93702260059eca5b3fdf029d42237d58bdb4ea009782d77d042e35ebe22430bd87e5b1a95a830fee76d5e19f459f76357089b727a2dd5daa13a37e8f0111c45529c1173d0996e050f3161efe094b6bca6824d3479776c9523c6783de757680ca1d947038380f28f6b8b6d406c5197742f1d00986e670b92f263826ad295781509d611ef3c1e8706bbf861e0cf5414c985e45af0061919f021fa5d61299c81c3dd663be66db553ebeb9faabe8f4a020576bbb9fae13cb1e0400de5c6383d46bae6f4c62fbb0305f370afb25abfe33bede36d039739f484f581a6bc7ad8193125d373bef8e9b34db6aacc1e9e3942b18ed4b7785d788fd5f213d65eccd61a2e2b57a6ad957c8e514d4df70afb5c40cc22e26643584b156c7dc05801ff375a83048851b5eea5c329577cac8460d5634e9d3187a6cc5f19566451e126e4ec572024d121f1e5d0dd209a9b295b2303e3a52d89b1821f85b3ffbae05690883dcaf71a82e2924979c8d6d68e9052d484f4c966b7be6b324d208664b267320cd0e41afa5a6908b07659ec7fcacc9399bccdd4d2f22b3e0b0cf710bd22db1cce1b152729b35f68cb7cea2fdf5c86fdf761cbc3b7452d1c1bb3fe63a7a2a1fe79931e382777bb03c2e9576f249c3c2ba233b7b9fa71f09f9a0fa6dec833209c0a4b08410ef1141611633842024b71ed37b030dc1591b9f24d2e2f6bc6f315cb68648dc98e76bcd56d3a4c3d6f4f36da65d451697c057da5f0ffeb3bb4f3b582be094f0faaf81beff486a92dcf60e8f9ed2d21f4fddc0cd7297247ae21200a468462286c55d93702260059eca5b3fdf029d42237d58bdb4ea009782d77d042e35ebe22430bd87e5b1a95a830fee76d5e19f459f76357089b727a2dd5daa13a37e8f0111c45529c1173d0996e050f3161efe094b6bca6824d3479776c952121b72aaf879e0b31c728bc8be3a44aaf5c262f85a5913715a203b4680033eff31552d0bf91df1848a83d61de834e27f3f9f9914d0be644e1a0878b38bdd72710f550b4adcbed9e2d18da282ac4b78f8fcdacffb82863a1fbcec0a7eac8e8c7c1e313c78bc1ca28333c42a2698827cc02659a9477c720091c5ad88a49371d9a9304729f054d8488ce2ed9cb8ec4885d6c6b3767f6146065a3db7cb19a5858db4278a8a8a8e5dac85ceb92c2d77d16a68c57f2319f6f1d4c13423f04294ce99491521fba820b10604599aacb5a4b352d5b9dce31abce1ef6f431421351e55a9501598ff7e77e1b3c3a33f656c6a9069c8e8997257e1c1dc05fee30d82f369587c3107d98eb2bf1d8b0dcf8ed3cdcc79b994c9260a2593ce67d256f31552f5f7ea1aeea8239b7bd1a94d67fcf6beb2ca6e53264f1afd4a928d40ab689990a7099d288f3a8dea32ebd799f0570c944829da5b9625ea29b5afe9b8052621b4d653752f4279ecf903093b17b671d9cfd1c665309c73af2e822b31b9d6953a857dd38803225ddd684fb2c2d28873a00edc9beb01e999a07597639d0631fb8efbf8c9863c5a57b675e309145f5c9db8adb0512299fa2e9c20db456004b1e2b2b0e36b163a6ebcf8739cd5e03481d0dccc16f521e41ffcf4eb7cfd55038263487821e13d38953788d95646a66730f0a69ed62beb9233402da53ae8c1ce9891f5ce9fea6d030a221298815f7a8731434f1cc2d7faccf9d9f72f4ab5c0faa1cf2ee1ead6b614c792684ab495982a758597475718449cf226a61fa02c3ede0cbb405869504606b9902a20d07685054293a6abeb2376046176e32eb721a3a344f7bb3280e8af2c20b023c8484c63bfd50b4930a4469a0b6a256b46aaa5a62c98b21d9044e8cd3962e8cc9d676d4f60ab2516610279de88c7bb546cdb12845a72b0ae3ff2994a2260665e325b5b469947c9b3154c17aab49e66e4547b825a074947527cc9361416a9fc6247e45fe7998f6a7c68d9acd03ddac838f17076d085c9f3432543d19e0127b8189b51952b18175e69fb40436f2c1138645d7a6b2f52e4972c1510555e1f2d1fcea6bb60bd6a54c3cb94f303cb21f809d63685ce555b8664cdb4d3d0b1338f92dbcba38e2a67aa0c91e8b239b7991a50606445288f9dd7dbe9f01cbba329f4b35f64ad07046bbf295e95df038e75916e326ec659f06ecbeb9368062ba427b0be11c63778dbc64002419072d4dd1c702751b464dc317d3bd0d99fca766f352759b1566ac82977517a13dfffdd712972cf7bbdf177cbe287e039dad685ec22aa5ac98ccb2ce93a554ed2841a12ce62bfca1d9a46634f8f53db225f7da11101a93e91a4be7fde95bb34ecdde4ca5b0d2438136ca1baee65de01ea0875e6d43289e0268c3acffcfb3ca982484783af5333c64f141de634bd5602cac1aea57122e4a0d0a703325e99844964a63cea37ca4942cc7b6ecc537858cbd30240918e352143050738f13e65d30e4cd0c7d5d1eb7cb1c4308eeea51a5d510575b72f97093eac82a38037f185e28aa09b78fa3506ecd41144ed03c60276c42272376c0b0e9307f83fb5bd212bc43e45c8a0f60a62ff2c8c09fdde39d637c64cc81cbaf104d774ecaa938cc135a513fe1550866b2850f62fd8cad6b29ec843a9da6bf54a2d7289f2bf436020ce582c0bdaa85fdeda2979598d9bc4a7e10f4aaa2e64167c0b34f8d905e2cf16720cc7283908de4336a682d1b6c1c0e43e094f69f2810772216abb6d7c57260cb8030a57d9ffe28aefea4c1266b54d31590f850552e6143314c792684ab495982a758597475718449cf226a61fa02c3ede0cbb4058695046030a221298815f7a8731434f1cc2d7faccf9d9f72f4ab5c0faa1cf2ee1ead6b60fcba45636eb958418480aef120117a9261669186c9672b0113e352be44a86a7303a1c7194ef6e38a61d3b1ea613c1cc8b6cde488f0b09c958e1f769375aea5b13e25fb5377716754bf92963dc4e0901f5f684f25603c5108e61a2181fd2c6752b3d169c7a1973483419483d16223ae3bfb11c835c0a56ca9f191d86b942b37d3d65eccd61a2e2b57a6ad957c8e514d4df70afb5c40cc22e26643584b156c7dc1a6bc7ad8193125d373bef8e9b34db6aacc1e9e3942b18ed4b7785d788fd5f2124fe5e08ffe2e4ed842c22b02f85228b6e3bbc54e04f8062eb62d44807bf2a4b1369b2b2bc7eb9da3767f0128549dc3c06d5a6c6dde6dffdc958b8760e1bf88224027d756315df18a66547111d6e5db85b85a4bd47dddc3f14afd6a089a5c0400e1ae38ed33bb62b1a0b7f491bb98e69fbe3550a5e0be42038bd2efcc282c0e9278a8a8a8e5dac85ceb92c2d77d16a68c57f2319f6f1d4c13423f04294ce9949304729f054d8488ce2ed9cb8ec4885d6c6b3767f6146065a3db7cb19a5858db41598ff7e77e1b3c3a33f656c6a9069c8e8997257e1c1dc05fee30d82f369587c1521fba820b10604599aacb5a4b352d5b9dce31abce1ef6f431421351e55a9503107d98eb2bf1d8b0dcf8ed3cdcc79b994c9260a2593ce67d256f31552f5f7ea1aeea8239b7bd1a94d67fcf6beb2ca6e53264f1afd4a928d40ab689990a7099d288f3a8dea32ebd799f0570c944829da5b9625ea29b5afe9b8052621b4d653752f4279ecf903093b17b671d9cfd1c665309c73af2e822b31b9d6953a857dd38801a4aa81bf6989c7727db214c1e9e9d1f499bfaede585106581c20e19342e0ba0499a64a4ba8137997c10db39b8ddb0073ea33c73df188eb0850756999c2f9cc34b557b99be09f308204b837be51c4ab6019b57ee2c08588d477ae2fbc108f7e0f2b01e36389a9e349caec0249558ba6ff64344f0a17d9c53300237d135c88730127b8189b51952b18175e69fb40436f2c1138645d7a6b2f52e4972c1510555e16a9fc6247e45fe7998f6a7c68d9acd03ddac838f17076d085c9f3432543d19e00000000000000a0000000000000007f0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000000000000000000002039979f5a4a3416a5e14d7e7b16a26ea64e8865b6b6c0f104a45e502a88523501000000000000000100000000000000000000000000000020e6377433847885cf37e45054debb564d20b150c03c731c35544d18873c6fc80e0000000000000001000000000000000000000000000000202ecd8753fbd4e9753d3ab5792022235b0d61965948a9802845ac769c195f73920000000000000001000000000000000000000000000000204d5c20971314a886143fcf4f31e5b0fe465897f95edb2ebb496a671eb51686a3000000000000000100000000000000000000000000000020484695c1718ea9babdf0da4a169839654a70d31dfb7bfa030bd34c4fd296f173000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000007f000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020d23f38419c8fb346fa957db05434769d2875b5fb47e5fc931712b74bbdf800b5000000000000000100000000000000000000000000000020a9c4b3c744c5537998728fd2fbc3b94e03972295db498ff96c58bad33a968e830000000000000001000000000000000000000000000000202ab79d9f3374ce44e12d2c803ade3b7883c480ea68b516a8844e29d1f144ce230000000000000001000000000000000000000000000000209ef4b79cde573ddf1a1cfe0df94952533f934e8712306ff6e1df26da2304bf2d000000000000000100000000000000000000000000000020eed5635aa9fe26e55ac534a89c39cf891254e6457318ced7e38ad88fc125ecc7000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000007f0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000007f00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020c4580eeda24ab41c6b7e79ae3be6d1a9be1034ca323cb46d0b3a501e4dd460d40000000000000001000000000000000000000000000000200ec33e9fb49d8d5c4545e10d863f1dd39412d3e819308652961db70c833fc7bf00000000000000010000000000000000000000000000002081bd58c7f1c8ffb6f5fd64f9980d799e2b22a717c3fa63ea0aca5d78e0e8d8610000000000000001000000000000000000000000000000208e6eda75688a92e7d9b73d9fc52f0a368909e9ede3c0d82c223aa41f84394d3d000000000000000100000000000000000000000000000020095e06275987f2e31a13d40ea9a221f0eaba482fa32be91d8d06d10ec4f3b7dc000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000400000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020154d708c94728da21ae79f7bc8eea099ed1ed556d0331bb6e5f674b49ebb5fb40000000000000001000000000000000100000000000000209959a9fa8cf2cc6841adecf6bc66911dcc73f1b340a3842c04e0c46136002b740000000000000001000000000000000100000000000000209afaedc0e6bab96075363da97bcae2f752541d66b966d854fd4fbdc665f57314000000000000000100000000000000010000000000000020d882d23dcecd5a4ff24e4f097ada499103f4217af8b869ce0275076671c667bc000000000000000100000000000000010000000000000020e6fbce7ccc80a578a93cc241360a739d0248edab1a37196cc8564d3cea08f1a90000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000040000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002028d654573603c50879ed324d2fd84d726f6f22db8ccaa3dac3a6bb8864487fda000000000000000100000000000000010000000000000020ae771d87cc10e8f417936ffbe0e6c19302834301bdaaf3adcce353d6b826910a000000000000000100000000000000010000000000000020c5d2b777de88f6a24bc4c18fe3273a24d763c55d7a193de1e88f2d165846a925000000000000000100000000000000010000000000000020c57390cb340730fb4757e6d9269625065f9b6612660a2177c39d2619ba6c9f820000000000000001000000000000000100000000000000201e2c25d0355b2435f10a6081fe0d1c18b2bcf5ac219aa03a7bf09921024c667f000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000400000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000004000000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000100000000000000200b72db7d6df5e816d2383a68047c65124a0ad0a62c2f896e3621f24370169c370000000000000001000000000000000100000000000000206ff8a45ece994756082aef3dbffc9d3b4876c2bf1cf5a118a1eeb7bb848e4eef00000000000000010000000000000001000000000000002025cb7f631988f3e596cbdb9b02071efa2f165944e96c99f6ed9f2b23bae6ab360000000000000001000000000000000100000000000000205709334cab87b717f6bac115c894cd9cdcede151c56c53d4413a66e5b4ff07640000000000000001000000000000000100000000000000206b1d4f880c4e42a008fbab67419836c1001352c589450d1f88e94da62e75a43b0000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000007a0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020c75ec940d0e95377720389ceeb0eafd8a3d3ceda65d360e25f92b78b759b64d5000000000000000100000000000000000000000000000020f7a03e6aab33c259b776a0a1068e9b29f69e476bfd7bd164913d1edd6dbe937e000000000000000100000000000000010000000000000020a0ff9b979dbd1cb58a689c4f7cb8c8e56e1dda716de815f8dce6e6624d7e57ac0000000000000001000000000000000000000000000000204d5c20971314a886143fcf4f31e5b0fe465897f95edb2ebb496a671eb51686a3000000000000000100000000000000000000000000000020484695c1718ea9babdf0da4a169839654a70d31dfb7bfa030bd34c4fd296f173000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000007a000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020c8852b920b05e5706551ba5f636d8d26d15193c6584fadd468986532d24c74a40000000000000001000000000000000000000000000000202dad7cb660b8d7478673d74df249c7bca96ad2a77a9e6df8cd53b3b04533f1c800000000000000010000000000000001000000000000002016a4ade761eb6230e27dd29c0ca0b6ca9e5ed431dfbc829f10335bc89c30fd1a0000000000000001000000000000000000000000000000209ef4b79cde573ddf1a1cfe0df94952533f934e8712306ff6e1df26da2304bf2d000000000000000100000000000000000000000000000020eed5635aa9fe26e55ac534a89c39cf891254e6457318ced7e38ad88fc125ecc7000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000007a0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000007a00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020e56a983748e4822c1fda8f3dbddfeec6fb2635b24eb16a6ab741d9bf4059420100000000000000010000000000000000000000000000002065f27579bab0bbce84be78665e6a5d96c419245da1f363c6c7f72dc30425c3010000000000000001000000000000000100000000000000207be15b9618a30386615fde520fbd00cbe45924c66bc2ce0039d5538e4a5281cd0000000000000001000000000000000000000000000000208e6eda75688a92e7d9b73d9fc52f0a368909e9ede3c0d82c223aa41f84394d3d000000000000000100000000000000000000000000000020095e06275987f2e31a13d40ea9a221f0eaba482fa32be91d8d06d10ec4f3b7dc000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000006d0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000000000000000000206f3328d1727f73f3876081e147b00fb4b287d4d43760aaf27328e7c284eb32cf0000000000000001000000000000000100000000000000205acc4a1fae260d37f528036a4818258a8a3ac3bd0f6c9a42d6087c7fba468ee80000000000000001000000000000000000000000000000205a97192d11dff369c5254a42e9aa1d64d4bc1b11032d8337324b166479ffd47d000000000000000100000000000000000000000000000020c897f9cc214e1d82ae3fa75be40cec804be624b41c23e139bfad78e7e7d5fc3b000000000000000100000000000000010000000000000020cca38bcaaeed86d1c037ddb148bba22f6b95749f7f352486d9b2248d154972a4000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000006d000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020dc29e562282831965d9350bb109d944b59cfb94edad84b8e3d31fcb11f71c9ac000000000000000100000000000000010000000000000020341e33044a4b4083f716409b4516107a15153193895c3c01da88f0e4b48be4b000000000000000010000000000000000000000000000002003ee70b9b2dda7268a83806f621e379f70a678a90ff599155c525519a3a447930000000000000001000000000000000000000000000000207fadb498e4408564c5da8cdaf1ddd40a060ac7be00e86d18a70cff218a853e5400000000000000010000000000000001000000000000002015dc39279a52d41ddbcaf227c199cbd51b1f711d661184752155a6495562235a000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000006d0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000006d00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000000000000000000204dd3f20a94d56f280f56b90efee714918ff7661d885f1add2315c54024a55cf3000000000000000100000000000000010000000000000020ca1974e488e5eec619436bfcf13e7d45a51909ecd60bc5f09e67c30c4641847400000000000000010000000000000000000000000000002053a87c9cb1c6b7451e4fd7b513f3fbc886fa44151f99a4704cd4f3e2b37f765b0000000000000001000000000000000000000000000000205ed2d16071bbd3f9afdb7711ba48151b7400c563773be3198665ade42f3a27fb000000000000000100000000000000010000000000000020327193f3223190f61d5993a1f33ad008cb85cada5c5129e3a69754a718f818bf000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000006c0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020028ef24d7b011d3e6cc54df40a2cba856cb326e265cf155e0ff5928f0f8e0db00000000000000001000000000000000100000000000000205acc4a1fae260d37f528036a4818258a8a3ac3bd0f6c9a42d6087c7fba468ee80000000000000001000000000000000000000000000000205a97192d11dff369c5254a42e9aa1d64d4bc1b11032d8337324b166479ffd47d000000000000000100000000000000000000000000000020c897f9cc214e1d82ae3fa75be40cec804be624b41c23e139bfad78e7e7d5fc3b000000000000000100000000000000010000000000000020cca38bcaaeed86d1c037ddb148bba22f6b95749f7f352486d9b2248d154972a4000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000006c000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020f3f07bdd6f2ed1f1fa7724af62bd828ff39b8774a5b3266fce212740ba3e4137000000000000000100000000000000010000000000000020341e33044a4b4083f716409b4516107a15153193895c3c01da88f0e4b48be4b000000000000000010000000000000000000000000000002003ee70b9b2dda7268a83806f621e379f70a678a90ff599155c525519a3a447930000000000000001000000000000000000000000000000207fadb498e4408564c5da8cdaf1ddd40a060ac7be00e86d18a70cff218a853e5400000000000000010000000000000001000000000000002015dc39279a52d41ddbcaf227c199cbd51b1f711d661184752155a6495562235a000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000006c0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000006c00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020e6a8e2d7878c6faa41713eaa699e92dfa5d0fbec459c08ba11c7974221551fc8000000000000000100000000000000010000000000000020ca1974e488e5eec619436bfcf13e7d45a51909ecd60bc5f09e67c30c4641847400000000000000010000000000000000000000000000002053a87c9cb1c6b7451e4fd7b513f3fbc886fa44151f99a4704cd4f3e2b37f765b0000000000000001000000000000000000000000000000205ed2d16071bbd3f9afdb7711ba48151b7400c563773be3198665ade42f3a27fb000000000000000100000000000000010000000000000020327193f3223190f61d5993a1f33ad008cb85cada5c5129e3a69754a718f818bf000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000180000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000001000000000000002089bad6834f4c246d3c4178d60e1a7402d7a777a23e9142d631f5ae67b62b75f900000000000000010000000000000001000000000000002010214618282eae8199fb12959e11cbc03fc216f2e26d885483c44dd1500f02b5000000000000000100000000000000010000000000000020b19c107e100ede570d154889a6c02538ece94377272412924433c14033b82edb0000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000018000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002018d580ea941c4f08fdecf59b02ea8f309129dcbde68142ea8ac7cec61f97c143000000000000000100000000000000010000000000000020d682998e25a5fbcb3775a68416e2fab8f449a5fb9057a3b6af23027646c629470000000000000001000000000000000100000000000000206fbb63d499e0b1b5c50bb34cc0627d36caeab3783e498fb870f0d059a71cad20000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000180000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001800000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020d6e016f4474a50e9248288b84f2359a9ff10e472fecd8b0d08ab01041206ab5c00000000000000010000000000000001000000000000002071ad56b471e249f6105af18690b68cd198b09af36b62f96b9f4817edc3dcf71a000000000000000100000000000000010000000000000020239a46dbf277baafe52f53464283343e42f543bd83bb7dc8d1dd1315f876005d000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000005c0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000001000000000000002047e1f5e0fe3ff76eaf6533b6ad4f15e6298846f17c92b90fee4090916be3d5ae000000000000000100000000000000010000000000000020368d67564a09158dfb6de68dfb9eb87ba299687ff58fa2c7213d13474b130927000000000000000100000000000000000000000000000020f476b958e87db8a02656f8467c6e5e45d866f25792959994b010cfab414a683f0000000000000001000000000000000000000000000000204ad6dc0cd0533f78182e33f1a845ac02537dc3fd9cd6a8afe705ed7185762a5c000000000000000100000000000000000000000000000020440141033be391d351cbd747235dd0dd8925385fcbdaf63ca3ce8096a77f70ba0000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000005c000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020bdfd29cfbbedae4c9227f8f665d1fc396e7c7d81b60456b2769aa3128a012cce000000000000000100000000000000010000000000000020ae367347ec635549b68bfb78721a6c7a1a6084fca918c06287dbc1b6afc3f9c20000000000000001000000000000000000000000000000200465cea58d937eb0fdb98fcaf6de41b5bc5a9ef8128bb64c6d5c79fe8b30bd02000000000000000100000000000000000000000000000020241e42aeb3c798b84ad9a34ccc6b26a5fb12fe91536ea9394f0e34b50690f3390000000000000001000000000000000000000000000000204d271360d6ea5729d441a303230c4b3fd940e15129f6f043ffe200fe1412df3c000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000005c0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000005c00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020ddbd43ac314c7c912d6e8b2350320186f100294968a82f775d4cf5614f62a05c00000000000000010000000000000001000000000000002024f67aaa65e7eaa4e23a4baf19e4eaaaebaa4c816d2da87d9928c3e0d10d1fb3000000000000000100000000000000000000000000000020321306172bc598e434645e4dc5f2c9b16e5f929d8bcc57a33b107a6fb24cbfa4000000000000000100000000000000000000000000000020dce7bbd9df3b93dd701565c3edb9065d5b787889b79eacfbd682100bb76efcdf0000000000000001000000000000000000000000000000202a919df14ce5514b57e6eb9a7f6b25d9178d9241708e72a76970cd595d0ec4370000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000002a0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020e4d5ab050b1cbd0db90da3a68fcd9dc9ed8f116ed9e63b8bbcfabab4e1c0d2db00000000000000010000000000000000000000000000002036d642259a9610da09490a34cc56151eff1d21198923d9f37551523a0c1d7296000000000000000100000000000000010000000000000020feffaa714556b27a2dda8d1987f9b21b7c07cdbd2ba25dd553aa795bb22458060000000000000001000000000000000000000000000000201f4bfe7d2398692f0c7abdb85ed16895ef0857d4d738e32f167340e5542a22b20000000000000001000000000000000100000000000000205d77fe2ccf9c9f8603070bd03123cd3455d47968e542db3d55abf5cd35b03d050000000000000001000000000000000000000000000000206fc55d69be08d34a81908ff98a5ee71ca33164641f453a60fcb6fe167f57da5b000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000002a000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020c0b56238a521dc312f65cee567e1401f709ff5b7ed87d6ef6019808e05453606000000000000000100000000000000000000000000000020f94d3eb70abe97b6a0b31f4a89662535a8de6d8a3fd538bcfcf1bab5a45d8c97000000000000000100000000000000010000000000000020af1eb3d7d585cac460fb089230f35cc56b94ac9cafd3a68a235ce4dc2a8a3522000000000000000100000000000000000000000000000020b6d1fb90220eb827e5a0d6cff1a17436b1d8a5cbf6a2bec68975b0b2c4d80d8a000000000000000100000000000000010000000000000020e7444cc161f3e7f01cf05762fb0fb97caf4bc92619aabc44b759df970816cdad0000000000000001000000000000000000000000000000203ac5ec986d57650e3ca79fa4603a1061602175b454dc001d06f6f25fc1050d5c0000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000002a0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000002a00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000100000000000000206db78860dee8ef2b70c8e4a5baa7ae85d5296f00caaa613343e04bb4eb63e3b2000000000000000100000000000000000000000000000020f51238886db115f4e584f55faade3bcc6c2e247acc57fb94d35f5e0ea20a6c7100000000000000010000000000000001000000000000002008e30092e5f851604f8f8a02d0f1e55c0af1e239723e59de7bb74ff8d0f4f4320000000000000001000000000000000000000000000000201d75768073a4c5340a2027c911af89ea3fa42a086d72fb39c6cae7a72aeac2c500000000000000010000000000000001000000000000002002dc6532f6ebc1f490383ba0ff1a45f0e25f74ece2d69dba9eca4d71e450033e0000000000000001000000000000000000000000000000207fc850a920818cb68997ea7c87330937152a868df48b228e28706b9aa75616f40000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000006f0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020173a8befcafe3bd9a4419e4bf987e800a4ba35a3a80b3932031c9b19b63d05af00000000000000010000000000000000000000000000002047059c74f0845c02c32418ad4498ca6fd8d0ad7b96000246a18b6e79f427d84c0000000000000001000000000000000000000000000000205a97192d11dff369c5254a42e9aa1d64d4bc1b11032d8337324b166479ffd47d000000000000000100000000000000000000000000000020c897f9cc214e1d82ae3fa75be40cec804be624b41c23e139bfad78e7e7d5fc3b000000000000000100000000000000010000000000000020cca38bcaaeed86d1c037ddb148bba22f6b95749f7f352486d9b2248d154972a4000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000006f000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000000000000000000002084ffd3ddeb210896ea7e45f3285bfc46fae0703e14d11aba07c378036c833e4a0000000000000001000000000000000000000000000000204da23c96386465de6c1e3c1054b7f915846079f7e27e9d358a1510f2fae7529100000000000000010000000000000000000000000000002003ee70b9b2dda7268a83806f621e379f70a678a90ff599155c525519a3a447930000000000000001000000000000000000000000000000207fadb498e4408564c5da8cdaf1ddd40a060ac7be00e86d18a70cff218a853e5400000000000000010000000000000001000000000000002015dc39279a52d41ddbcaf227c199cbd51b1f711d661184752155a6495562235a000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000006f0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000006f00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000000000000000000203696627f637c70f9ea0e0e8dba51a78ad58244f0a0a095662e72d7af7ecf8e4d0000000000000001000000000000000000000000000000203e382b7ed35b6de9cd1af305246944f92ebca5211e93e23b7bfbc71668ae009400000000000000010000000000000000000000000000002053a87c9cb1c6b7451e4fd7b513f3fbc886fa44151f99a4704cd4f3e2b37f765b0000000000000001000000000000000000000000000000205ed2d16071bbd3f9afdb7711ba48151b7400c563773be3198665ade42f3a27fb000000000000000100000000000000010000000000000020327193f3223190f61d5993a1f33ad008cb85cada5c5129e3a69754a718f818bf000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000001c0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020165645606068df7eb067fc94ea3e3a509839117b978bea9851e36a1f07d4c54e000000000000000100000000000000010000000000000020466a843d279e2d09cfb98b4604ad55550c4b32d858d74301ced48d4cf2a5f8a70000000000000001000000000000000000000000000000208d2e2729a32aca8b2598698736e9fb6648f7a570764827ae42629ee8e0b363c40000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000001c000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002042d611d8e698d043948ed2c4010fb0adec245bb30c12a61cdb01d6833d9bfc28000000000000000100000000000000010000000000000020aaae5c36ffc93586fd6e7da9318b26f5cb0052b41e106f29d5e9b9ba2a05e64d0000000000000001000000000000000000000000000000202556fe526824a8a26854d8a628546f1d11f4f769eaba5f9e50313c2ef40b6ac4000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000001c0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001c00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020900199381ddb4e03b85f1ef1ae34e7371c1880395f098dfe1fff89b88cbafebd000000000000000100000000000000010000000000000020b1b588f1313a74e639552396242911490bde8bc17cb78fe2e797fbec9802e9b50000000000000001000000000000000000000000000000209f47744fb15546f73a4e679754b45dceed245abbc33eb5862b85b6b400a67d83000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000560000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000202a8631eeda7f04841093ac671aff6ba0087eec062694de7b0e0fe82a9b51ec28000000000000000100000000000000000000000000000020d84b8ed9b75f6d7b81a5e0e0c00b30eafd36279c56eb509da6237e8beddd6ae3000000000000000100000000000000000000000000000020f02df779af74ece096b6b51019afda9aad006f692c3013a0d59e0d28d8c8933d0000000000000001000000000000000100000000000000200bf7ab1c0d308f7966b26422ec6c126e5956a6ce55c01414a62362c696861137000000000000000100000000000000000000000000000020440141033be391d351cbd747235dd0dd8925385fcbdaf63ca3ce8096a77f70ba0000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000056000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020d77300d9ea796002e168813f09b166f9ff012cdc919b061f3df7b4f1c01eba7f000000000000000100000000000000000000000000000020f1d8edd1329bfcc3d980e136aa034b72277023735d3a12f620d8b2c1211e57710000000000000001000000000000000000000000000000206c2f42e175bc59959c539065448f0c9c2f330f12deb5a78d2b4137394d93105c000000000000000100000000000000010000000000000020a0b86bb2b9ed1d88c1716ee2897d7e5305051401751e458c39f027a27ad7553f0000000000000001000000000000000000000000000000204d271360d6ea5729d441a303230c4b3fd940e15129f6f043ffe200fe1412df3c000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000560000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000005600000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000100000000000000202ca020c19897dcff0b31e11dd1a78bd6647d01d819f7b630225ef74e0f5c4185000000000000000100000000000000000000000000000020a1b8863401b4c65f130438c941794629b626442e857e44ac92d9f7128186ed2a000000000000000100000000000000000000000000000020b4a82e404c0d3051551a338ff9c4d142925ceb91c02f22466560b77b3b7c8ef600000000000000010000000000000001000000000000002051db9e18acb024639c6d1c6e33aea673be61c3065471e467357b0d2c77bd2d150000000000000001000000000000000000000000000000202a919df14ce5514b57e6eb9a7f6b25d9178d9241708e72a76970cd595d0ec4370000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000001e0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020354be51518ac0dd91f26219f17e44719a158cf4fdd100c3f919a3981f113149f000000000000000100000000000000000000000000000020706cc8ac5e50d226053688830a31a7963f67b7a499e16df101a87cea86c1aeed0000000000000001000000000000000000000000000000208d2e2729a32aca8b2598698736e9fb6648f7a570764827ae42629ee8e0b363c40000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000001e000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000100000000000000208ed4ca977c2167441b7cb04831df3ba03526c5d424958138c146503c57800fd100000000000000010000000000000000000000000000002069aa7cd5e7cdb89fd78a6dd640e079eaedaa0682d6b8fc2001514dedf61a381f0000000000000001000000000000000000000000000000202556fe526824a8a26854d8a628546f1d11f4f769eaba5f9e50313c2ef40b6ac4000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000001e0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001e00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020fd5dbf2000054fb68d2aa2990ce5fd22bed6f3dc05f6e9dea6849ad605d4982000000000000000010000000000000000000000000000002050276d31c82e273e0901b23103bf4ba2a27d1c95c64fc431fe49aaeb14c2d3180000000000000001000000000000000000000000000000209f47744fb15546f73a4e679754b45dceed245abbc33eb5862b85b6b400a67d83000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000720000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000209c7a5f066cf9bfe96a421d74ac0d0b269d63914873d68b400e4f73be4bc1aebd0000000000000001000000000000000000000000000000203f1184d99c0c6f37844768d0fd9fd6b2b34d22db285cdeef3fddc041c496e2e7000000000000000100000000000000010000000000000020b4894900c33f5635d85562ebbda7805f0ac1d98ae53665e714382ea448ac52c20000000000000001000000000000000100000000000000201ddaf21874d2f1dceb73b2bd9c919f8080291efd13ced9f813727e4f480d6481000000000000000100000000000000000000000000000020484695c1718ea9babdf0da4a169839654a70d31dfb7bfa030bd34c4fd296f173000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000072000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000100000000000000206f29a656c148cf7e744cb1e37fa1387917b3c54963d92e644311b433d969376800000000000000010000000000000000000000000000002020f2a31bfd572314732bbf381b5314858e97f3aa9d9aecf077369cf5b72048fd0000000000000001000000000000000100000000000000200755751b5c06801532af40f5137b978866beb2f616a3d040c4a46f352c038982000000000000000100000000000000010000000000000020aef86b1c25b74932f43f0295cd7c5728d8beb0c22d00656fa8fddbeccc1fc88d000000000000000100000000000000000000000000000020eed5635aa9fe26e55ac534a89c39cf891254e6457318ced7e38ad88fc125ecc7000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000720000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000007200000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020482ac8c78456995cc2328924a8f29ac59328e4f9578145836c87e612674ae5a1000000000000000100000000000000000000000000000020c564b8b761ffb4073dc7d9365dcedbafecacec7bec5f32e70da67023022033110000000000000001000000000000000100000000000000201c5adbe7813e824a5134310dfd54433fa8fde77999a70c1ede5413026277ad550000000000000001000000000000000100000000000000204f51bf5ce5ecb58d545e7c31c05242ce62c29bdddf378e54233f75ac620e2b89000000000000000100000000000000000000000000000020095e06275987f2e31a13d40ea9a221f0eaba482fa32be91d8d06d10ec4f3b7dc000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000370000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020fb3488e3405dc5dfd6da7f19f92954e4aeb951531c333dddcc531a604f273cb10000000000000001000000000000000000000000000000205e0f50e6647448b37ecb900b2e98938852d04e3c7a8814ad45c8f5555096bfb500000000000000010000000000000000000000000000002015974e5cde8b68336383dff938d22e92f360b18ffe56429530ed75be9b66f34600000000000000010000000000000001000000000000002035603eb04728f46297d39deef07280b0efb1ad34cd06e614ab18bb44a27f7e2e0000000000000001000000000000000000000000000000204cc7901d510046ae5f98d6b431c2a311cc066cdd794fd6e53cc30587ed00a61e0000000000000001000000000000000000000000000000206fc55d69be08d34a81908ff98a5ee71ca33164641f453a60fcb6fe167f57da5b000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000037000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020936ea6a916508fe9839bfccdf95a9299a28867747548e1a74b38208ee3ace14e000000000000000100000000000000000000000000000020eb939b7425a45e6af5ee8bbd51aa96cb2fd43c51864a08f260c6b1f8c2aca314000000000000000100000000000000000000000000000020617144785e76e054a86588f283941ec49cb303cfe7fa0c4860356593023b62a70000000000000001000000000000000100000000000000208167f508c5eb6be817a066fba8c0346e424b21acf020be61c9420e0d0fe6ef23000000000000000100000000000000000000000000000020f8cfb327d9517742fe31d66ff60129d85a3e464d22188d95a53c32e3132069560000000000000001000000000000000000000000000000203ac5ec986d57650e3ca79fa4603a1061602175b454dc001d06f6f25fc1050d5c0000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000370000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000003700000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000000000000000000200a7a20030b46544d04f4bcb79a79bdcc41840dd455e7d882395a996c7d229ef2000000000000000100000000000000000000000000000020656a6464953c94ecb421c770ae399690777aeef90aef5b3327426d9316fef0ac000000000000000100000000000000000000000000000020a5f838f02ee3d1a0eba68a4f9f520e9f54bb859ee5c7b3dab03340a565297b85000000000000000100000000000000010000000000000020f23d5f6b8abd73a44d9df8939a7335ea30233894a58e5c5d12f8bb36a1c04139000000000000000100000000000000000000000000000020a4106813ae8b7f27b2f203214542ef786a84eb12c970d8efc1931970c8d3c8d50000000000000001000000000000000000000000000000207fc850a920818cb68997ea7c87330937152a868df48b228e28706b9aa75616f40000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000420000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000207677d19c09f7af9c3fbf4c63ddfafdb72bd81b73730c9377b41dc99112ea5434000000000000000100000000000000000000000000000020cf9361b31d239a19eea704187c6836abe58f98df0dd0176ebe575c2cb2fd51ee0000000000000001000000000000000100000000000000209afaedc0e6bab96075363da97bcae2f752541d66b966d854fd4fbdc665f57314000000000000000100000000000000010000000000000020d882d23dcecd5a4ff24e4f097ada499103f4217af8b869ce0275076671c667bc000000000000000100000000000000010000000000000020e6fbce7ccc80a578a93cc241360a739d0248edab1a37196cc8564d3cea08f1a90000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000042000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020032d095cf3416369c4256a0702349ea9063cc6339fdd18b618fb7e489100f3d00000000000000001000000000000000000000000000000209c1047c0e1c7e052208e9f913623d1866bdd10b5e8952f329ef211c0439a7de1000000000000000100000000000000010000000000000020c5d2b777de88f6a24bc4c18fe3273a24d763c55d7a193de1e88f2d165846a925000000000000000100000000000000010000000000000020c57390cb340730fb4757e6d9269625065f9b6612660a2177c39d2619ba6c9f820000000000000001000000000000000100000000000000201e2c25d0355b2435f10a6081fe0d1c18b2bcf5ac219aa03a7bf09921024c667f000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000420000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000004200000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020604fef87c5b7629a8d65c60c1e2cd37ab5614eea7fd55412557706e95582d62800000000000000010000000000000000000000000000002096d8e72eb8de9c0d711de6801af9cd0d3be593eebb12cb1f6182397283f673ae00000000000000010000000000000001000000000000002025cb7f631988f3e596cbdb9b02071efa2f165944e96c99f6ed9f2b23bae6ab360000000000000001000000000000000100000000000000205709334cab87b717f6bac115c894cd9cdcede151c56c53d4413a66e5b4ff07640000000000000001000000000000000100000000000000206b1d4f880c4e42a008fbab67419836c1001352c589450d1f88e94da62e75a43b0000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000001b0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000000000000000000002093156535f37ddb7e58f116266b77ef51a4cad0d0279e73ee220f3efe2dc007df0000000000000001000000000000000000000000000000202f79641d9c0a7238e695300b36fa1c5be4867aaf5047e715b0ab5ce5a4c9a1ef000000000000000100000000000000010000000000000020b19c107e100ede570d154889a6c02538ece94377272412924433c14033b82edb0000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000001b000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020897288b85d3023dae229397fa718bd5717c17ada6383fe3ec0f79512b641d09f0000000000000001000000000000000000000000000000206de41ae63863e4dcf765564dd0dfbcc8cfec4ff8f79ca1ef7f4bd578c9b90ab60000000000000001000000000000000100000000000000206fbb63d499e0b1b5c50bb34cc0627d36caeab3783e498fb870f0d059a71cad20000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000001b0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001b00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000000000000000000205da9d21e7af3a5d5145684db10aab16584e80f44105028e75ea729dbd394574900000000000000010000000000000000000000000000002051bb888cb39b3df7a847e26194d635bdc80de0ed878d45493bdb0fee9d794576000000000000000100000000000000010000000000000020239a46dbf277baafe52f53464283343e42f543bd83bb7dc8d1dd1315f876005d000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000420000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000207677d19c09f7af9c3fbf4c63ddfafdb72bd81b73730c9377b41dc99112ea5434000000000000000100000000000000000000000000000020cf9361b31d239a19eea704187c6836abe58f98df0dd0176ebe575c2cb2fd51ee0000000000000001000000000000000100000000000000209afaedc0e6bab96075363da97bcae2f752541d66b966d854fd4fbdc665f57314000000000000000100000000000000010000000000000020d882d23dcecd5a4ff24e4f097ada499103f4217af8b869ce0275076671c667bc000000000000000100000000000000010000000000000020e6fbce7ccc80a578a93cc241360a739d0248edab1a37196cc8564d3cea08f1a90000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000042000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020032d095cf3416369c4256a0702349ea9063cc6339fdd18b618fb7e489100f3d00000000000000001000000000000000000000000000000209c1047c0e1c7e052208e9f913623d1866bdd10b5e8952f329ef211c0439a7de1000000000000000100000000000000010000000000000020c5d2b777de88f6a24bc4c18fe3273a24d763c55d7a193de1e88f2d165846a925000000000000000100000000000000010000000000000020c57390cb340730fb4757e6d9269625065f9b6612660a2177c39d2619ba6c9f820000000000000001000000000000000100000000000000201e2c25d0355b2435f10a6081fe0d1c18b2bcf5ac219aa03a7bf09921024c667f000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000420000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000004200000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020604fef87c5b7629a8d65c60c1e2cd37ab5614eea7fd55412557706e95582d62800000000000000010000000000000000000000000000002096d8e72eb8de9c0d711de6801af9cd0d3be593eebb12cb1f6182397283f673ae00000000000000010000000000000001000000000000002025cb7f631988f3e596cbdb9b02071efa2f165944e96c99f6ed9f2b23bae6ab360000000000000001000000000000000100000000000000205709334cab87b717f6bac115c894cd9cdcede151c56c53d4413a66e5b4ff07640000000000000001000000000000000100000000000000206b1d4f880c4e42a008fbab67419836c1001352c589450d1f88e94da62e75a43b0000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000000b0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000000000000000000201a89e481bba18dfa9d4416ef0205ba9c067ab904a04b02a35855188fff0ad57200000000000000010000000000000000000000000000002034eb72e07f1bf338a90c88f33d60e76f13297c61f81d3a00a186398991c46d9a000000000000000100000000000000010000000000000020f4788f282cc48569bec74e73b39f71e265eb51ef211aecf4d1a7add0f34d7b1600000000000000010000000000000000000000000000002074c92898599a40af39cc7a4aa694631d7e51488babfa65b017e19bd852de297900000000000000010000000000000001000000000000002056e5e7ca74faee51ae45c7001256fed2e7e080dcb95a859867c22dcb1608665f000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000000b000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020dd67b97f66f8ec35d2badf9cbecef66029be7519b0cb7fc3c98ef1b46effb6710000000000000001000000000000000000000000000000203fb1c1672356fe7d5dd51118e2141a18470022a596efa96d71df01663dbacaf7000000000000000100000000000000010000000000000020a52b91bce93e4fa0572db86458eba139088189bddae7d7b79620966038af80c50000000000000001000000000000000000000000000000208f3d18cc0b0da6433287a04f00ac88b64a41656e27ea9ddc94e4472173bebea600000000000000010000000000000001000000000000002099796d2366d350a09cad2698ab80419a6869a2524f9cfcc2eb3055449273a24a0000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000000b0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000000b00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020a61d3646dcc63d4e36ed1f7cae1de66a7b7287b834a4740774c2a66c5d328804000000000000000100000000000000000000000000000020edd758c981a5485735cfb214b282b2f560e9ce109ccafdc024675d656f10a8490000000000000001000000000000000100000000000000204a424d30038ba3931370d35033d9eaf5e67267d2c0b24a83f04501b708a597100000000000000001000000000000000000000000000000200a811c67215d2836baae6caa0f504bbfcfbc0dde40ac3cdb17a78f196390ece2000000000000000100000000000000010000000000000020e37459f4af5b5707d5514ce01420f09564ba84b8869477082c7888c4e5c8acb40000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000110000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000000000000000000002061b27a134980f9011f418c391a94063267383484fc3c537d29383d9cbf4c9486000000000000000100000000000000010000000000000020bd4e5c151e0a68965ae8f3bb82c3ba76db3c0eb23d9d7a4d3dcda7f18e7356260000000000000001000000000000000100000000000000202954bf45fe77defb69128714be17592fe6b385a27c1f56d18e1e183bcc1594ee000000000000000100000000000000010000000000000020e2acecbe8619d7478dee57fcb82511df4fa4f1bdb2d5253db0ff26c50b7344b300000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000011000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020f77b97657f252177f9abf78c0045626dc1392f6da6115fabcff97cb9331dab3e000000000000000100000000000000010000000000000020e1e5edc865c227675ca64eb732a4b2007be5c195b322c86eb0699660ab3d41a9000000000000000100000000000000010000000000000020c570a41900e5df8ba34a98c813dcad69f97d3d94bb76ff8216e35356ca2cacfd00000000000000010000000000000001000000000000002022828921a6b0f0bee2649772e95581d881e7c8e59ac79244530985451478d83800000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000110000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001100000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020a99cd6722f8e00f8ade402f469aa74204de70179e8684a112527fa04f9b59a80000000000000000100000000000000010000000000000020e19613a745447ab8d1bd6e94691a3893d39beccee1b0fc7364b8d234c8dae01f0000000000000001000000000000000100000000000000205b32d2653aaa213e4384f7742074420889bf11336c786c1c743b15302fe1a82400000000000000010000000000000001000000000000002086140aa1aeeb29951884301e2b42e87686485bd984b7d346ddd36d29e2ccc64a0000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000000c0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000206930a5f9ea4d52e17a1c3dd55cbf7c35474dfd3483718902410c439dd6694c640000000000000001000000000000000100000000000000207f083025d7b5e20a3e96dbdb4f9f90b3702807776e2b2f53ab95311f3f7c3a9f000000000000000100000000000000000000000000000020e5744ea7917af5a15f1aa03739836609a2e30d754ad8e74253c5d416ce47902100000000000000010000000000000000000000000000002074c92898599a40af39cc7a4aa694631d7e51488babfa65b017e19bd852de297900000000000000010000000000000001000000000000002056e5e7ca74faee51ae45c7001256fed2e7e080dcb95a859867c22dcb1608665f000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000000c000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002093289367b31a97a2928a2f8e9e97c81bec79c1ed15af4738eb8f5db23b67455f00000000000000010000000000000001000000000000002056b2509eded6bd717e4ce53f680b40ab0a6c36b9fb7645d5ab33e0dbab72ba200000000000000001000000000000000000000000000000204f17285237eba98af78b80bd5e8de5f5a53fe8a071411b6c6e4d4c36f536e1330000000000000001000000000000000000000000000000208f3d18cc0b0da6433287a04f00ac88b64a41656e27ea9ddc94e4472173bebea600000000000000010000000000000001000000000000002099796d2366d350a09cad2698ab80419a6869a2524f9cfcc2eb3055449273a24a0000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000000c0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000000c00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b86864000000000000000700000000000000010000000000000001000000000000002035d2d1e8a517e4ad0beff9d025795e47120269ad35afccdcc8f7b6b6ddb9f57b00000000000000010000000000000001000000000000002028c63b2e8b8f0feba668214e4781978e3156c27ce6450fef5ce5b0485951c164000000000000000100000000000000000000000000000020db3cef5e7ca6ac584217ed4415cda60573719fa053e5379b12cf4e13db34d8170000000000000001000000000000000000000000000000200a811c67215d2836baae6caa0f504bbfcfbc0dde40ac3cdb17a78f196390ece2000000000000000100000000000000010000000000000020e37459f4af5b5707d5514ce01420f09564ba84b8869477082c7888c4e5c8acb40000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000003f0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020792f9e91a004a8a4d8d29ecba8f9cba46c15e95a1a542d5d2e6a5bb946d8ad0f00000000000000010000000000000000000000000000002046ac07b7f7a61188086b6c4b68e04c2ab56f2c6523b241a09c8b73a6d2c4fd8600000000000000010000000000000000000000000000002003e351314794759cd9806174a52250b9cb8fa9581fa9e27d53e8a0c841303e0a00000000000000010000000000000000000000000000002038633c23221765310c92698cee8362c0d12200537889693a08f64eb0a28d0eb50000000000000001000000000000000000000000000000204cc7901d510046ae5f98d6b431c2a311cc066cdd794fd6e53cc30587ed00a61e0000000000000001000000000000000000000000000000206fc55d69be08d34a81908ff98a5ee71ca33164641f453a60fcb6fe167f57da5b000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000003f000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000000000000000000206255b409b338405ad7f641b83a505fc2fb24e8c63255dc53f604f5202d06933f00000000000000010000000000000000000000000000002036670a01fac60d516547b53a292308b7180d6cadb33e8c70762b23893e9541a4000000000000000100000000000000000000000000000020a9ab9c5ee7b9555a000953fc28810de93e021fd6c3bd175a54f424a6c2f67cc8000000000000000100000000000000000000000000000020d0aef9b77b039100567fbec3deac5294b41ec41336a21a95a35be851fa112511000000000000000100000000000000000000000000000020f8cfb327d9517742fe31d66ff60129d85a3e464d22188d95a53c32e3132069560000000000000001000000000000000000000000000000203ac5ec986d57650e3ca79fa4603a1061602175b454dc001d06f6f25fc1050d5c0000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000003f0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000003f00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020d901fbc5256b2b9e86e37c1f056dcafe1462e64980cfd474e67a6cb6838363ec000000000000000100000000000000000000000000000020cb964b84923795e306d837d5c4b11ea4cdc784b5e76d2f6ee325531e8fc5aa64000000000000000100000000000000000000000000000020fed9890dd98e6c1638f9890976242c287adbd2a0428c0b625fe3e7d5013c205900000000000000010000000000000000000000000000002079bc5bbafb1da115c390257c26dd3ea5b09add220e6b98825ced402134928180000000000000000100000000000000000000000000000020a4106813ae8b7f27b2f203214542ef786a84eb12c970d8efc1931970c8d3c8d50000000000000001000000000000000000000000000000207fc850a920818cb68997ea7c87330937152a868df48b228e28706b9aa75616f40000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000170000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020be83654dd5cd7a88a27b5cfa09782831fbc365eddb2daa2ff542587999916d4f000000000000000100000000000000000000000000000020a02a6e0ca0e6da26d12a40de1ecaecc8c54a4a02ae4013e997a6266c39ee2d64000000000000000100000000000000000000000000000020236a87f0094607aef55b5855bcf5d40e5a4d31eb60bcf52103d540e1255750fd000000000000000100000000000000010000000000000020e2acecbe8619d7478dee57fcb82511df4fa4f1bdb2d5253db0ff26c50b7344b300000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000017000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000000000000000000206eb3202475484b8a5f03e7a5942ff542a04b2a0e85ffb8b1ac313bf1d5912fd0000000000000000100000000000000000000000000000020fba19ae29a6b891fd2f7c5c35423245aeea2e18c6ca57ef3f6b76c07374f2c15000000000000000100000000000000000000000000000020b6825f551393ddf40c3d0d57b2c88b4047463cc27d41309df512b8de3748521600000000000000010000000000000001000000000000002022828921a6b0f0bee2649772e95581d881e7c8e59ac79244530985451478d83800000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000170000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001700000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b86864000000000000000700000000000000010000000000000000000000000000002093e349c1c6ad9f4148382b4b7d1da376d4d33320f0e8a546c60b363e85341fcd000000000000000100000000000000000000000000000020dcc292348ffaa2374842c930b27f83e226fd755fa4f2461119d8ff800437715600000000000000010000000000000000000000000000002015efc2b3df07a916f42125652366222810c06a316b67cd86a476859ec50b32e400000000000000010000000000000001000000000000002086140aa1aeeb29951884301e2b42e87686485bd984b7d346ddd36d29e2ccc64a0000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000420000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000207677d19c09f7af9c3fbf4c63ddfafdb72bd81b73730c9377b41dc99112ea5434000000000000000100000000000000000000000000000020cf9361b31d239a19eea704187c6836abe58f98df0dd0176ebe575c2cb2fd51ee0000000000000001000000000000000100000000000000209afaedc0e6bab96075363da97bcae2f752541d66b966d854fd4fbdc665f57314000000000000000100000000000000010000000000000020d882d23dcecd5a4ff24e4f097ada499103f4217af8b869ce0275076671c667bc000000000000000100000000000000010000000000000020e6fbce7ccc80a578a93cc241360a739d0248edab1a37196cc8564d3cea08f1a90000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000042000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020032d095cf3416369c4256a0702349ea9063cc6339fdd18b618fb7e489100f3d00000000000000001000000000000000000000000000000209c1047c0e1c7e052208e9f913623d1866bdd10b5e8952f329ef211c0439a7de1000000000000000100000000000000010000000000000020c5d2b777de88f6a24bc4c18fe3273a24d763c55d7a193de1e88f2d165846a925000000000000000100000000000000010000000000000020c57390cb340730fb4757e6d9269625065f9b6612660a2177c39d2619ba6c9f820000000000000001000000000000000100000000000000201e2c25d0355b2435f10a6081fe0d1c18b2bcf5ac219aa03a7bf09921024c667f000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000420000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000004200000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020604fef87c5b7629a8d65c60c1e2cd37ab5614eea7fd55412557706e95582d62800000000000000010000000000000000000000000000002096d8e72eb8de9c0d711de6801af9cd0d3be593eebb12cb1f6182397283f673ae00000000000000010000000000000001000000000000002025cb7f631988f3e596cbdb9b02071efa2f165944e96c99f6ed9f2b23bae6ab360000000000000001000000000000000100000000000000205709334cab87b717f6bac115c894cd9cdcede151c56c53d4413a66e5b4ff07640000000000000001000000000000000100000000000000206b1d4f880c4e42a008fbab67419836c1001352c589450d1f88e94da62e75a43b0000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000007a0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020c75ec940d0e95377720389ceeb0eafd8a3d3ceda65d360e25f92b78b759b64d5000000000000000100000000000000000000000000000020f7a03e6aab33c259b776a0a1068e9b29f69e476bfd7bd164913d1edd6dbe937e000000000000000100000000000000010000000000000020a0ff9b979dbd1cb58a689c4f7cb8c8e56e1dda716de815f8dce6e6624d7e57ac0000000000000001000000000000000000000000000000204d5c20971314a886143fcf4f31e5b0fe465897f95edb2ebb496a671eb51686a3000000000000000100000000000000000000000000000020484695c1718ea9babdf0da4a169839654a70d31dfb7bfa030bd34c4fd296f173000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000007a000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020c8852b920b05e5706551ba5f636d8d26d15193c6584fadd468986532d24c74a40000000000000001000000000000000000000000000000202dad7cb660b8d7478673d74df249c7bca96ad2a77a9e6df8cd53b3b04533f1c800000000000000010000000000000001000000000000002016a4ade761eb6230e27dd29c0ca0b6ca9e5ed431dfbc829f10335bc89c30fd1a0000000000000001000000000000000000000000000000209ef4b79cde573ddf1a1cfe0df94952533f934e8712306ff6e1df26da2304bf2d000000000000000100000000000000000000000000000020eed5635aa9fe26e55ac534a89c39cf891254e6457318ced7e38ad88fc125ecc7000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000007a0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000007a00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020e56a983748e4822c1fda8f3dbddfeec6fb2635b24eb16a6ab741d9bf4059420100000000000000010000000000000000000000000000002065f27579bab0bbce84be78665e6a5d96c419245da1f363c6c7f72dc30425c3010000000000000001000000000000000100000000000000207be15b9618a30386615fde520fbd00cbe45924c66bc2ce0039d5538e4a5281cd0000000000000001000000000000000000000000000000208e6eda75688a92e7d9b73d9fc52f0a368909e9ede3c0d82c223aa41f84394d3d000000000000000100000000000000000000000000000020095e06275987f2e31a13d40ea9a221f0eaba482fa32be91d8d06d10ec4f3b7dc000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000300000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000208aefc20cc770b1a5ef0c043584191ae28658a1bcf7d09eb38ac5190d3d0d657e0000000000000001000000000000000100000000000000200c4f0578207e76426e059ff8acf398c5fcb841251552c8e47d2464973c5cc1f10000000000000001000000000000000100000000000000202d3d71c190cf6c43416cbe47335b0e25e426bc497ce5758c1606e0f1aa2ca3df00000000000000010000000000000001000000000000002035603eb04728f46297d39deef07280b0efb1ad34cd06e614ab18bb44a27f7e2e0000000000000001000000000000000000000000000000204cc7901d510046ae5f98d6b431c2a311cc066cdd794fd6e53cc30587ed00a61e0000000000000001000000000000000000000000000000206fc55d69be08d34a81908ff98a5ee71ca33164641f453a60fcb6fe167f57da5b000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000030000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002045877823b52f2f70dea6732faf89cdddbf4fe7a7fc4cf2090bdaa8fd650066bb0000000000000001000000000000000100000000000000205b66dba87a0bf7977482f714ecb33f926d0e43dd6b035692bf1333cafd75fafa00000000000000010000000000000001000000000000002072ebca755ad2ef4b7250f091f16fa7df2d4de8ea26d8d83c79b0f03cc45baa930000000000000001000000000000000100000000000000208167f508c5eb6be817a066fba8c0346e424b21acf020be61c9420e0d0fe6ef23000000000000000100000000000000000000000000000020f8cfb327d9517742fe31d66ff60129d85a3e464d22188d95a53c32e3132069560000000000000001000000000000000000000000000000203ac5ec986d57650e3ca79fa4603a1061602175b454dc001d06f6f25fc1050d5c0000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000300000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000003000000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020d4e596fe7eb8f2fd4942056e9ff42c8b8eafac574e32999114b196ce803d5b5f00000000000000010000000000000001000000000000002006d50216ea3b8c6485951098662781af839c866591b608a14746136fd69b8df50000000000000001000000000000000100000000000000203ece4da5049b09ca7047e3f7546dfb074bada86cf6fd78b6623d92c84be8582a000000000000000100000000000000010000000000000020f23d5f6b8abd73a44d9df8939a7335ea30233894a58e5c5d12f8bb36a1c04139000000000000000100000000000000000000000000000020a4106813ae8b7f27b2f203214542ef786a84eb12c970d8efc1931970c8d3c8d50000000000000001000000000000000000000000000000207fc850a920818cb68997ea7c87330937152a868df48b228e28706b9aa75616f40000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000720000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000209c7a5f066cf9bfe96a421d74ac0d0b269d63914873d68b400e4f73be4bc1aebd0000000000000001000000000000000000000000000000203f1184d99c0c6f37844768d0fd9fd6b2b34d22db285cdeef3fddc041c496e2e7000000000000000100000000000000010000000000000020b4894900c33f5635d85562ebbda7805f0ac1d98ae53665e714382ea448ac52c20000000000000001000000000000000100000000000000201ddaf21874d2f1dceb73b2bd9c919f8080291efd13ced9f813727e4f480d6481000000000000000100000000000000000000000000000020484695c1718ea9babdf0da4a169839654a70d31dfb7bfa030bd34c4fd296f173000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000072000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000100000000000000206f29a656c148cf7e744cb1e37fa1387917b3c54963d92e644311b433d969376800000000000000010000000000000000000000000000002020f2a31bfd572314732bbf381b5314858e97f3aa9d9aecf077369cf5b72048fd0000000000000001000000000000000100000000000000200755751b5c06801532af40f5137b978866beb2f616a3d040c4a46f352c038982000000000000000100000000000000010000000000000020aef86b1c25b74932f43f0295cd7c5728d8beb0c22d00656fa8fddbeccc1fc88d000000000000000100000000000000000000000000000020eed5635aa9fe26e55ac534a89c39cf891254e6457318ced7e38ad88fc125ecc7000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000720000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000007200000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020482ac8c78456995cc2328924a8f29ac59328e4f9578145836c87e612674ae5a1000000000000000100000000000000000000000000000020c564b8b761ffb4073dc7d9365dcedbafecacec7bec5f32e70da67023022033110000000000000001000000000000000100000000000000201c5adbe7813e824a5134310dfd54433fa8fde77999a70c1ede5413026277ad550000000000000001000000000000000100000000000000204f51bf5ce5ecb58d545e7c31c05242ce62c29bdddf378e54233f75ac620e2b89000000000000000100000000000000000000000000000020095e06275987f2e31a13d40ea9a221f0eaba482fa32be91d8d06d10ec4f3b7dc000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000070000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020c7b1e5bf0733e0a3747103b05723724641d9922cf804ee197149894fc86e9c1600000000000000010000000000000000000000000000002024dd71f470a74bc9d00007238db817e2951ab47beab380e9dfb9c9bf28a0a90c00000000000000010000000000000000000000000000002093a0881cb11f378c3ee374298a66b649fae44fbb2f35e3704ab5f4655c883f85000000000000000100000000000000010000000000000020ca3dc5f22e4573bfae9e4282c195d191a87ba277e564f158302218ee7bcec57300000000000000010000000000000001000000000000002056e5e7ca74faee51ae45c7001256fed2e7e080dcb95a859867c22dcb1608665f000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000007000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000000000000000000204511364e6740dece985a8421cf505ace7c56a037e4c50c10c6cf1b04eb6fa5f8000000000000000100000000000000000000000000000020fa774f7f08a9caf5f4c2a4ec6081fa509a5e34d6de7388ccc80b06493b538fe8000000000000000100000000000000000000000000000020159fb7d1dbca35eff1d0f710637a19e2e36d57033adbce658e94920357d85089000000000000000100000000000000010000000000000020ea8b53cd7415ecfb610e991f3187dc70583ec968dd6f325946dad2d066766dd100000000000000010000000000000001000000000000002099796d2366d350a09cad2698ab80419a6869a2524f9cfcc2eb3055449273a24a0000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000070000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000000700000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000000000000000000201a5627feb33e02846e2267f97c132f77f5f7781b22127148f25e3c0985a08ce600000000000000010000000000000000000000000000002006f0abf8012c918f93809f9e59a7df74630df9e0b99556e0951b0b3359a42bfa000000000000000100000000000000000000000000000020831cdcfba9f17eed5f7c9a3df5fb68d5accb25e6de514071b4280f355d240c87000000000000000100000000000000010000000000000020b51c3fa252a3e9d0887102fb7225c454ea04da1d53389cc7c7d4e6b69f1a21f0000000000000000100000000000000010000000000000020e37459f4af5b5707d5514ce01420f09564ba84b8869477082c7888c4e5c8acb40000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000690000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020168d2dae5908e276103440583e5e91e00075a90f2175709bf90956381663a353000000000000000100000000000000010000000000000020ca6c56e94dc3db3569b8aa66acc2394bd332e25aca38585f988144d360a7d0d30000000000000001000000000000000100000000000000204bb79970c2fb9ceeb2b3b825d98db63307bfbd367bb0eb605f16caa342d20f42000000000000000100000000000000000000000000000020c897f9cc214e1d82ae3fa75be40cec804be624b41c23e139bfad78e7e7d5fc3b000000000000000100000000000000010000000000000020cca38bcaaeed86d1c037ddb148bba22f6b95749f7f352486d9b2248d154972a4000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000069000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020ea39b356e9304b8cfbf68f82c585a449d32fe7be745ef5611e3ea754f2eabafc0000000000000001000000000000000100000000000000209a0722187a4b5424088f7a2e0ef119365189add036f54ccfbf7f3a122c00608d0000000000000001000000000000000100000000000000203d3437767a18c76c6b3ce58e0eaba9f957fb31192a19e2e3adf0c19d5ac4cda30000000000000001000000000000000000000000000000207fadb498e4408564c5da8cdaf1ddd40a060ac7be00e86d18a70cff218a853e5400000000000000010000000000000001000000000000002015dc39279a52d41ddbcaf227c199cbd51b1f711d661184752155a6495562235a000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000690000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000006900000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b8686400000000000000070000000000000001000000000000000000000000000000202d99bdb3babeba7dee5d609001c510aeb44e8afc63e0871d23080d386a7106110000000000000001000000000000000100000000000000204f8fb8274097610605f62be66375dfaa0417f51c9306df0f02368e01ca9dd530000000000000000100000000000000010000000000000020f1b4ae3d887837dc9b181cd7f6918a6e5c5747614adf29fc779923bc61f90cc20000000000000001000000000000000000000000000000205ed2d16071bbd3f9afdb7711ba48151b7400c563773be3198665ade42f3a27fb000000000000000100000000000000010000000000000020327193f3223190f61d5993a1f33ad008cb85cada5c5129e3a69754a718f818bf000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000720000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000209c7a5f066cf9bfe96a421d74ac0d0b269d63914873d68b400e4f73be4bc1aebd0000000000000001000000000000000000000000000000203f1184d99c0c6f37844768d0fd9fd6b2b34d22db285cdeef3fddc041c496e2e7000000000000000100000000000000010000000000000020b4894900c33f5635d85562ebbda7805f0ac1d98ae53665e714382ea448ac52c20000000000000001000000000000000100000000000000201ddaf21874d2f1dceb73b2bd9c919f8080291efd13ced9f813727e4f480d6481000000000000000100000000000000000000000000000020484695c1718ea9babdf0da4a169839654a70d31dfb7bfa030bd34c4fd296f173000000000000000100000000000000000000000000000020b8740f80df5d6c03f9539bc858e68e4ce320577a1339e9a4ea1b5e788b67c556000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000072000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000100000000000000206f29a656c148cf7e744cb1e37fa1387917b3c54963d92e644311b433d969376800000000000000010000000000000000000000000000002020f2a31bfd572314732bbf381b5314858e97f3aa9d9aecf077369cf5b72048fd0000000000000001000000000000000100000000000000200755751b5c06801532af40f5137b978866beb2f616a3d040c4a46f352c038982000000000000000100000000000000010000000000000020aef86b1c25b74932f43f0295cd7c5728d8beb0c22d00656fa8fddbeccc1fc88d000000000000000100000000000000000000000000000020eed5635aa9fe26e55ac534a89c39cf891254e6457318ced7e38ad88fc125ecc7000000000000000100000000000000000000000000000020ad19fa7fb50ab6a82a3863500c3460818014abceb8273ffa1add6f0d72e972b10000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000720000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000007200000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020482ac8c78456995cc2328924a8f29ac59328e4f9578145836c87e612674ae5a1000000000000000100000000000000000000000000000020c564b8b761ffb4073dc7d9365dcedbafecacec7bec5f32e70da67023022033110000000000000001000000000000000100000000000000201c5adbe7813e824a5134310dfd54433fa8fde77999a70c1ede5413026277ad550000000000000001000000000000000100000000000000204f51bf5ce5ecb58d545e7c31c05242ce62c29bdddf378e54233f75ac620e2b89000000000000000100000000000000000000000000000020095e06275987f2e31a13d40ea9a221f0eaba482fa32be91d8d06d10ec4f3b7dc000000000000000100000000000000000000000000000020069a44f33fa4ebf420d47453d2f737ebfbe1a3f859c30591a7613e6ba4d43471000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000000f0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020fb6baadf8d1513fbb8742de6172487166f7f80e61757ce16004208aba42a815f00000000000000010000000000000000000000000000002097b3073c51a53f04165f4ec59a2f22e187b4350b5d42958cd9593664445a7659000000000000000100000000000000000000000000000020e5744ea7917af5a15f1aa03739836609a2e30d754ad8e74253c5d416ce47902100000000000000010000000000000000000000000000002074c92898599a40af39cc7a4aa694631d7e51488babfa65b017e19bd852de297900000000000000010000000000000001000000000000002056e5e7ca74faee51ae45c7001256fed2e7e080dcb95a859867c22dcb1608665f000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000000f000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020cd03123013f86b370c53a60db2fa440cbacc323a01cf5e4bda90a9095253ce610000000000000001000000000000000000000000000000201db687ef0106f4f32437f43e6c3481e0ddcab84ecc785b92ea2b49d514d27db50000000000000001000000000000000000000000000000204f17285237eba98af78b80bd5e8de5f5a53fe8a071411b6c6e4d4c36f536e1330000000000000001000000000000000000000000000000208f3d18cc0b0da6433287a04f00ac88b64a41656e27ea9ddc94e4472173bebea600000000000000010000000000000001000000000000002099796d2366d350a09cad2698ab80419a6869a2524f9cfcc2eb3055449273a24a0000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000000f0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000000f00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020625a8c2f6eadb4ecbcb1fe722121f6a75b3ddf31aff5d78c9485ced60f732031000000000000000100000000000000000000000000000020d5ca72d395564a32b52e81116fd6b9682926f2593abe0117e4a078781fb818da000000000000000100000000000000000000000000000020db3cef5e7ca6ac584217ed4415cda60573719fa053e5379b12cf4e13db34d8170000000000000001000000000000000000000000000000200a811c67215d2836baae6caa0f504bbfcfbc0dde40ac3cdb17a78f196390ece2000000000000000100000000000000010000000000000020e37459f4af5b5707d5514ce01420f09564ba84b8869477082c7888c4e5c8acb40000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000005a0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020c73dd476fd269c7ac557c89c943e8914676f093878b76857a8775a4defd82b4000000000000000010000000000000000000000000000002000a92b30ce6c574c8df94866550b7545970186d13c6aa105d8bea832707fbcdc000000000000000100000000000000010000000000000020a2108799ba60b14b4528e026d0f575f797028a9469cdfbc41cf7cb8c648a846a0000000000000001000000000000000000000000000000204ad6dc0cd0533f78182e33f1a845ac02537dc3fd9cd6a8afe705ed7185762a5c000000000000000100000000000000000000000000000020440141033be391d351cbd747235dd0dd8925385fcbdaf63ca3ce8096a77f70ba0000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000005a000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020f342d8f88a4f21a8e0c9c8ff3b07a4b357d03edc3ea9f9f263f51ff8fe79831c000000000000000100000000000000000000000000000020f1356cef5b3e8bbc1ed73abc6b758482cb3d9a88947b415be273ca177e19650a000000000000000100000000000000010000000000000020dd80cacd766c514bea4e75a998238e23cceb858decbd9583d9466348cafc2b4b000000000000000100000000000000000000000000000020241e42aeb3c798b84ad9a34ccc6b26a5fb12fe91536ea9394f0e34b50690f3390000000000000001000000000000000000000000000000204d271360d6ea5729d441a303230c4b3fd940e15129f6f043ffe200fe1412df3c000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000005a0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000005a00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020af4ab977c0df316c8a4086c5c1ab99beb07d1384e44276ab8772efe1daa4f8f50000000000000001000000000000000000000000000000206cd7cb6bc957dab22950361c42cc7b9b6df302d2fc409e1ef771192fb049aab40000000000000001000000000000000100000000000000207f0990d2982a1c4a1b58341455aa1c3ffb366f1c34dbd3d5cc9bfe4082ce3a5c000000000000000100000000000000000000000000000020dce7bbd9df3b93dd701565c3edb9065d5b787889b79eacfbd682100bb76efcdf0000000000000001000000000000000000000000000000202a919df14ce5514b57e6eb9a7f6b25d9178d9241708e72a76970cd595d0ec4370000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000002e0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000203878f31f94c5c1a942ef37c0dee2a2862b6737d4fd31a77bb051334568784e810000000000000001000000000000000000000000000000209704413d8a707d33244faf00e0702f156ed165f379edaa132d13bb73341f1ad6000000000000000100000000000000000000000000000020d4c0df32ee86ae7b5161167dcef1b7eeb12a4a6dc9a1b6566aeeabe819adc61a0000000000000001000000000000000000000000000000201f4bfe7d2398692f0c7abdb85ed16895ef0857d4d738e32f167340e5542a22b20000000000000001000000000000000100000000000000205d77fe2ccf9c9f8603070bd03123cd3455d47968e542db3d55abf5cd35b03d050000000000000001000000000000000000000000000000206fc55d69be08d34a81908ff98a5ee71ca33164641f453a60fcb6fe167f57da5b000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000002e000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020f89f5b3c95de5b964413e926569bbf56c879e8482061ee3b51ddc6a2772580ab000000000000000100000000000000000000000000000020085890d220c9891a29283984b66b1e3f0c2465e990f215083f62d7a8bb46e1d5000000000000000100000000000000000000000000000020a4e4ca5bbb50dfe8edcfb7963ea98588d32ac467780c2cade2a34fedc58db14d000000000000000100000000000000000000000000000020b6d1fb90220eb827e5a0d6cff1a17436b1d8a5cbf6a2bec68975b0b2c4d80d8a000000000000000100000000000000010000000000000020e7444cc161f3e7f01cf05762fb0fb97caf4bc92619aabc44b759df970816cdad0000000000000001000000000000000000000000000000203ac5ec986d57650e3ca79fa4603a1061602175b454dc001d06f6f25fc1050d5c0000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000002e0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000002e00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020c673b838cb38f866d9b03e62c922b9f488e4d5ecec551cc5545f49ab2a556806000000000000000100000000000000000000000000000020ed2d1248b077c866d2d67cc9bfbae82880de42a04897c55660524ba3f62dda9f0000000000000001000000000000000000000000000000201d8ad03d2011ef6ce54c1a81dba952791bea124ea00f3b113807dbfbe254a5900000000000000001000000000000000000000000000000201d75768073a4c5340a2027c911af89ea3fa42a086d72fb39c6cae7a72aeac2c500000000000000010000000000000001000000000000002002dc6532f6ebc1f490383ba0ff1a45f0e25f74ece2d69dba9eca4d71e450033e0000000000000001000000000000000000000000000000207fc850a920818cb68997ea7c87330937152a868df48b228e28706b9aa75616f40000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000005c0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000001000000000000002047e1f5e0fe3ff76eaf6533b6ad4f15e6298846f17c92b90fee4090916be3d5ae000000000000000100000000000000010000000000000020368d67564a09158dfb6de68dfb9eb87ba299687ff58fa2c7213d13474b130927000000000000000100000000000000000000000000000020f476b958e87db8a02656f8467c6e5e45d866f25792959994b010cfab414a683f0000000000000001000000000000000000000000000000204ad6dc0cd0533f78182e33f1a845ac02537dc3fd9cd6a8afe705ed7185762a5c000000000000000100000000000000000000000000000020440141033be391d351cbd747235dd0dd8925385fcbdaf63ca3ce8096a77f70ba0000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a61000000000000005c000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020bdfd29cfbbedae4c9227f8f665d1fc396e7c7d81b60456b2769aa3128a012cce000000000000000100000000000000010000000000000020ae367347ec635549b68bfb78721a6c7a1a6084fca918c06287dbc1b6afc3f9c20000000000000001000000000000000000000000000000200465cea58d937eb0fdb98fcaf6de41b5bc5a9ef8128bb64c6d5c79fe8b30bd02000000000000000100000000000000000000000000000020241e42aeb3c798b84ad9a34ccc6b26a5fb12fe91536ea9394f0e34b50690f3390000000000000001000000000000000000000000000000204d271360d6ea5729d441a303230c4b3fd940e15129f6f043ffe200fe1412df3c000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b23000000000000005c0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000005c00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020ddbd43ac314c7c912d6e8b2350320186f100294968a82f775d4cf5614f62a05c00000000000000010000000000000001000000000000002024f67aaa65e7eaa4e23a4baf19e4eaaaebaa4c816d2da87d9928c3e0d10d1fb3000000000000000100000000000000000000000000000020321306172bc598e434645e4dc5f2c9b16e5f929d8bcc57a33b107a6fb24cbfa4000000000000000100000000000000000000000000000020dce7bbd9df3b93dd701565c3edb9065d5b787889b79eacfbd682100bb76efcdf0000000000000001000000000000000000000000000000202a919df14ce5514b57e6eb9a7f6b25d9178d9241708e72a76970cd595d0ec4370000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde9700000000000000230000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020eb229bfab917139f1053b6dd4f072dede01de2655c5ed6ed280e80bf8329edc30000000000000001000000000000000000000000000000206cf71400d8e57867a304c5590652dd7adf3d4272e4b81b7c72eb4367d804b449000000000000000100000000000000010000000000000020dda255470d0e3d9d6cdaa2fb7a505f6c7a4e24ad53cf261ae845d526ff84b25a0000000000000001000000000000000100000000000000205174f398ccc856cdbbef4aa77674b4b7eef12d39c064ad97e2c59fc16b229eba0000000000000001000000000000000100000000000000205d77fe2ccf9c9f8603070bd03123cd3455d47968e542db3d55abf5cd35b03d050000000000000001000000000000000000000000000000206fc55d69be08d34a81908ff98a5ee71ca33164641f453a60fcb6fe167f57da5b000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000023000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020f2209ea108e3ed845623a13e39ec42c1cd3bc8b594dc35593f0af074fe358179000000000000000100000000000000000000000000000020020643005f0606b68d89294ab9119d3b6b26695018578e134a820ba53f44c93c000000000000000100000000000000010000000000000020635786b3451c8fcd72df2a7f9875620e9c4a9d61248ed35461e4ea6478f57b52000000000000000100000000000000010000000000000020a88fc00e48cff7ada818659ce1afb1d48fbf00ea30b15d29f469922cbe8e2d8c000000000000000100000000000000010000000000000020e7444cc161f3e7f01cf05762fb0fb97caf4bc92619aabc44b759df970816cdad0000000000000001000000000000000000000000000000203ac5ec986d57650e3ca79fa4603a1061602175b454dc001d06f6f25fc1050d5c0000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000230000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000000000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000002300000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020e8d5a661e3fecc674bce7b299a9f463db20d0617ff0f4ab12ea266d3daa85b02000000000000000100000000000000000000000000000020c4bed048e8ba23b401527c2fb537af23b7e56f80a8229e24ccd33b66583ab043000000000000000100000000000000010000000000000020d79cbee9869a3c46953aa9c62ba0934763e71c50acbdfa93d2f34c8f5461a4f400000000000000010000000000000001000000000000002004ace2b0b5cf3a7818a350cf261d2203be3b8384204cea5d7f25a1f738277d8300000000000000010000000000000001000000000000002002dc6532f6ebc1f490383ba0ff1a45f0e25f74ece2d69dba9eca4d71e450033e0000000000000001000000000000000000000000000000207fc850a920818cb68997ea7c87330937152a868df48b228e28706b9aa75616f40000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000540000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000208c29f50c6a921e6c039421dd22522be89566bbd3b7a80fccac2bef837aaed014000000000000000100000000000000010000000000000020ae061b5194494d30b474e8ca84e30311d10fe173845210baede494005bcff504000000000000000100000000000000000000000000000020f02df779af74ece096b6b51019afda9aad006f692c3013a0d59e0d28d8c8933d0000000000000001000000000000000100000000000000200bf7ab1c0d308f7966b26422ec6c126e5956a6ce55c01414a62362c696861137000000000000000100000000000000000000000000000020440141033be391d351cbd747235dd0dd8925385fcbdaf63ca3ce8096a77f70ba0000000000000001000000000000000100000000000000202078c498345e40f2793827c70bdd0c1453f14d69ba33fc6a8c8d31743022cf74000000000000000100000000000000000000000000000020e970c37741ec44d7f6bb7a660fdaee60389e7914a07ab9464ce775e56f179a610000000000000054000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000010000000000000020bb5840b7a1b74f62bf274503506ad5438c0bc38e0c13ac476a270efd5f90e55d000000000000000100000000000000010000000000000020820cb12153954ed792168965679b90767ca6c7b93ae2a29fe9a015e858cbf22d0000000000000001000000000000000000000000000000206c2f42e175bc59959c539065448f0c9c2f330f12deb5a78d2b4137394d93105c000000000000000100000000000000010000000000000020a0b86bb2b9ed1d88c1716ee2897d7e5305051401751e458c39f027a27ad7553f0000000000000001000000000000000000000000000000204d271360d6ea5729d441a303230c4b3fd940e15129f6f043ffe200fe1412df3c000000000000000100000000000000010000000000000020e231ce722ab14c17f283bb99b859081ec782def3c7aeba236db5db98af78145b0000000000000001000000000000000000000000000000202e3213f0f94066d410cc001dd9f1dcf97793d5d1d126ad43329a8c9587113b2300000000000000540000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000000000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000005400000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020705c7d5f29f20eaf325fade3eaec97d01a160b62fc9ae3d811fd5929116fe475000000000000000100000000000000010000000000000020977da01180c75be39459fed4961409c222ea5ecebd9175c4f239bad9eab446fb000000000000000100000000000000000000000000000020b4a82e404c0d3051551a338ff9c4d142925ceb91c02f22466560b77b3b7c8ef600000000000000010000000000000001000000000000002051db9e18acb024639c6d1c6e33aea673be61c3065471e467357b0d2c77bd2d150000000000000001000000000000000000000000000000202a919df14ce5514b57e6eb9a7f6b25d9178d9241708e72a76970cd595d0ec4370000000000000001000000000000000100000000000000208a36bc7a0b21cde4d5a39d220aa8982b3b727a22e15308c3ed8e5a6ccba654b7000000000000000100000000000000000000000000000020c2373acd9e43392c84b483f993c3e9f2259f83ad4ab88d7b8236af1afb2dde97000000000000001e0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020354be51518ac0dd91f26219f17e44719a158cf4fdd100c3f919a3981f113149f000000000000000100000000000000000000000000000020706cc8ac5e50d226053688830a31a7963f67b7a499e16df101a87cea86c1aeed0000000000000001000000000000000000000000000000208d2e2729a32aca8b2598698736e9fb6648f7a570764827ae42629ee8e0b363c40000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000001e000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000100000000000000208ed4ca977c2167441b7cb04831df3ba03526c5d424958138c146503c57800fd100000000000000010000000000000000000000000000002069aa7cd5e7cdb89fd78a6dd640e079eaedaa0682d6b8fc2001514dedf61a381f0000000000000001000000000000000000000000000000202556fe526824a8a26854d8a628546f1d11f4f769eaba5f9e50313c2ef40b6ac4000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000001e0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001e00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020fd5dbf2000054fb68d2aa2990ce5fd22bed6f3dc05f6e9dea6849ad605d4982000000000000000010000000000000000000000000000002050276d31c82e273e0901b23103bf4ba2a27d1c95c64fc431fe49aaeb14c2d3180000000000000001000000000000000000000000000000209f47744fb15546f73a4e679754b45dceed245abbc33eb5862b85b6b400a67d83000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd7400000000000000170000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000000000000000000020be83654dd5cd7a88a27b5cfa09782831fbc365eddb2daa2ff542587999916d4f000000000000000100000000000000000000000000000020a02a6e0ca0e6da26d12a40de1ecaecc8c54a4a02ae4013e997a6266c39ee2d64000000000000000100000000000000000000000000000020236a87f0094607aef55b5855bcf5d40e5a4d31eb60bcf52103d540e1255750fd000000000000000100000000000000010000000000000020e2acecbe8619d7478dee57fcb82511df4fa4f1bdb2d5253db0ff26c50b7344b300000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d0000000000000017000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d000000000000000070000000000000001000000000000000000000000000000206eb3202475484b8a5f03e7a5942ff542a04b2a0e85ffb8b1ac313bf1d5912fd0000000000000000100000000000000000000000000000020fba19ae29a6b891fd2f7c5c35423245aeea2e18c6ca57ef3f6b76c07374f2c15000000000000000100000000000000000000000000000020b6825f551393ddf40c3d0d57b2c88b4047463cc27d41309df512b8de3748521600000000000000010000000000000001000000000000002022828921a6b0f0bee2649772e95581d881e7c8e59ac79244530985451478d83800000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de00000000000000170000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000100000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001700000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b86864000000000000000700000000000000010000000000000000000000000000002093e349c1c6ad9f4148382b4b7d1da376d4d33320f0e8a546c60b363e85341fcd000000000000000100000000000000000000000000000020dcc292348ffaa2374842c930b27f83e226fd755fa4f2461119d8ff800437715600000000000000010000000000000000000000000000002015efc2b3df07a916f42125652366222810c06a316b67cd86a476859ec50b32e400000000000000010000000000000001000000000000002086140aa1aeeb29951884301e2b42e87686485bd984b7d346ddd36d29e2ccc64a0000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000001f0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a440703000000000000000700000000000000010000000000000000000000000000002004a5645a7e16572b82bf7bf97cead97d0ec9b551b7c27a70dd1dca2cbb7a5326000000000000000100000000000000000000000000000020706cc8ac5e50d226053688830a31a7963f67b7a499e16df101a87cea86c1aeed0000000000000001000000000000000000000000000000208d2e2729a32aca8b2598698736e9fb6648f7a570764827ae42629ee8e0b363c40000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000001f000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d00000000000000007000000000000000100000000000000000000000000000020b573713518140f56ed4a1352101ae04e6e17105f32b487d529b31a9436df56f300000000000000010000000000000000000000000000002069aa7cd5e7cdb89fd78a6dd640e079eaedaa0682d6b8fc2001514dedf61a381f0000000000000001000000000000000000000000000000202556fe526824a8a26854d8a628546f1d11f4f769eaba5f9e50313c2ef40b6ac4000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000001f0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000000000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001f00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000000000000000000020e242dddfae8e72a3b72fe0c4795c1ad98c8fa187f8b215940dc455226d91badf00000000000000010000000000000000000000000000002050276d31c82e273e0901b23103bf4ba2a27d1c95c64fc431fe49aaeb14c2d3180000000000000001000000000000000000000000000000209f47744fb15546f73a4e679754b45dceed245abbc33eb5862b85b6b400a67d83000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000001a0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a4407030000000000000007000000000000000100000000000000010000000000000020ca0dbef3e95b581e5b9cfdefbe9025cfa08c7604dc04c5855dad14cacb178a0e0000000000000001000000000000000000000000000000202f79641d9c0a7238e695300b36fa1c5be4867aaf5047e715b0ab5ce5a4c9a1ef000000000000000100000000000000010000000000000020b19c107e100ede570d154889a6c02538ece94377272412924433c14033b82edb0000000000000001000000000000000000000000000000208c23ceb38bdfeb620de2d6414912490a34ad95503da09b70a73e57ca9658817b00000000000000010000000000000000000000000000002067b848c6a8fd93922564ee17c6101e314bbd3846fcea2a0a759b6e14ee53062a000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000001a000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002068f33381ba67c64e677ce00a04392cac412620297a4b432774de25b4007520360000000000000001000000000000000000000000000000206de41ae63863e4dcf765564dd0dfbcc8cfec4ff8f79ca1ef7f4bd578c9b90ab60000000000000001000000000000000100000000000000206fbb63d499e0b1b5c50bb34cc0627d36caeab3783e498fb870f0d059a71cad20000000000000000100000000000000000000000000000020470c7d58bd807351d8c0392710e22aa86ff411e42398f3719c76ffa4b8e767ed00000000000000010000000000000000000000000000002081a27a248db0076bc7a7f51b5ccf3cf5b9e1c7455e27068c417e64832913ff410000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000001a0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000000000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000010000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000000000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000001a00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b868640000000000000007000000000000000100000000000000010000000000000020e5c102db5392ee04b3360bac316ae72779c12fc8dac8ce7964118c01a217550300000000000000010000000000000000000000000000002051bb888cb39b3df7a847e26194d635bdc80de0ed878d45493bdb0fee9d794576000000000000000100000000000000010000000000000020239a46dbf277baafe52f53464283343e42f543bd83bb7dc8d1dd1315f876005d000000000000000100000000000000000000000000000020475cad41419c208faffd1efcd00935b2a82e660bd30f5223d3c70d1c09e78a660000000000000001000000000000000000000000000000201f9e8255ea645ed6dac4dbd6d7f94bc08f5c7221a6c23f62f70ad185c154b4a80000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd74000000000000000c0000000000000020f347e1a5c5bec69f49b12f482b4eb2ba2687d9270cb998f29ba4ead18a44070300000000000000070000000000000001000000000000000100000000000000206930a5f9ea4d52e17a1c3dd55cbf7c35474dfd3483718902410c439dd6694c640000000000000001000000000000000100000000000000207f083025d7b5e20a3e96dbdb4f9f90b3702807776e2b2f53ab95311f3f7c3a9f000000000000000100000000000000000000000000000020e5744ea7917af5a15f1aa03739836609a2e30d754ad8e74253c5d416ce47902100000000000000010000000000000000000000000000002074c92898599a40af39cc7a4aa694631d7e51488babfa65b017e19bd852de297900000000000000010000000000000001000000000000002056e5e7ca74faee51ae45c7001256fed2e7e080dcb95a859867c22dcb1608665f000000000000000100000000000000010000000000000020fdadf4722339d8141ce1734688219c5f74e10f50b00539056a67ce2548de0ea9000000000000000100000000000000010000000000000020abf64a454a1aaa9dc4e06b86002c621451287f916407499098b84d335388ea1d000000000000000c000000000000002098a1232e7138714283381c3354e9c2bd4d33ebe6c0d8009e823308eb609084d0000000000000000700000000000000010000000000000001000000000000002093289367b31a97a2928a2f8e9e97c81bec79c1ed15af4738eb8f5db23b67455f00000000000000010000000000000001000000000000002056b2509eded6bd717e4ce53f680b40ab0a6c36b9fb7645d5ab33e0dbab72ba200000000000000001000000000000000000000000000000204f17285237eba98af78b80bd5e8de5f5a53fe8a071411b6c6e4d4c36f536e1330000000000000001000000000000000000000000000000208f3d18cc0b0da6433287a04f00ac88b64a41656e27ea9ddc94e4472173bebea600000000000000010000000000000001000000000000002099796d2366d350a09cad2698ab80419a6869a2524f9cfcc2eb3055449273a24a0000000000000001000000000000000100000000000000201d7686b1048a9d7100702c25ca2734a02205d608c3afeafb3275f01e8ccfa0420000000000000001000000000000000100000000000000200750aa8849b6903eb8c1c553e91c0b92da06f15b40fe0e4e56ea1e6659ee64de000000000000000c0000000000000020a9460230e5193e83d967512cc12279bc0317812e4236b1780631e0cb577f29b00000000000000007000000000000000100000000000000010000000000000020cc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f000000000000000100000000000000010000000000000020b2b21799d127b293c62e02a8be38f25fd37326268c6093eee2b28e94cd7be124000000000000000100000000000000000000000000000020bba21d351206562028d9e8ce383d33041f68d468ec829dc93335b549d4771efb0000000000000001000000000000000000000000000000208165fdfd395528523b2517a93b1132df1aa545b6420d83cb31530c5a319ee7f30000000000000001000000000000000100000000000000201c1a2ecf2ea1c75426d2f1abb56d3cbef980b50e7d8b11b7db430bbbfead645c000000000000000100000000000000010000000000000020400db23ff4b8f4e9ec9a90f22a11799efc55b6f1dd13439c76af0bcb348b5f790000000000000001000000000000000100000000000000207431a85b309497f0dec9f8e1568c8a146f5e761125bee485d9bb2f3905e2f6be000000000000000c00000000000000202b0ba717019fd8819f2b9a10133a1bd45fb14f9ed5706e57e54ab76a85b86864000000000000000700000000000000010000000000000001000000000000002035d2d1e8a517e4ad0beff9d025795e47120269ad35afccdcc8f7b6b6ddb9f57b00000000000000010000000000000001000000000000002028c63b2e8b8f0feba668214e4781978e3156c27ce6450fef5ce5b0485951c164000000000000000100000000000000000000000000000020db3cef5e7ca6ac584217ed4415cda60573719fa053e5379b12cf4e13db34d8170000000000000001000000000000000000000000000000200a811c67215d2836baae6caa0f504bbfcfbc0dde40ac3cdb17a78f196390ece2000000000000000100000000000000010000000000000020e37459f4af5b5707d5514ce01420f09564ba84b8869477082c7888c4e5c8acb40000000000000001000000000000000100000000000000209612f8ccc3d773d4654e0ff003cfebf4d2472a2ce0e99df1b061fe6cdbe42b0a0000000000000001000000000000000100000000000000201b1209df24fc035a2c9a10f8fa4a257b162a0fa319c7fe99195373ca0c28dd740000000000000078000000000000007f0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000207a3fd5b6cbd489a63d5f3dbd95c3449fddd1dcfb44d545c4b168816e2104d1410000000000000001000000000000000000000000000000209a710e8ee5d06d99f70d7bc59f66237ff85c047c67c75715818f8e063f9cc08200000000000000010000000000000000000000000000002068af6f2f654d8175393a4e2296ca5da29c4ecdce2e5b1d0b4d5c1c76c0f46223000000000000000100000000000000000000000000000020d9b8d5ec67254b42678ab91739e07b1ddcd23647902b76537c5f5b68b6b53be7000000000000000100000000000000000000000000000020ff0e61f4a21c645f0a5fc8fc1d6204e2b2befec15e74ee679959788e62c2b7220000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000003f00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000000000000000000002051a280cf5323746430a83b983c8ae27456adc35ab32c06202b9ed6076bfdbd540000000000000001000000000000000000000000000000209ac47f0db306fce2bf48e3a36a61ba34d40f847b8538f926c732b1e84c6d56ea00000000000000010000000000000000000000000000002087ddb794b71304c7adada2bc3591f9cc037724ece83a65fdd8e1020925b9957c000000000000000100000000000000000000000000000020278cc806407a74ae434d1b1dff34326b54f20a3de6ad3df2d2448c7346240da700000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000001f000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000000000000000000203d459898e5917fe5627848ee6da9448d8b05360947d45e408293e71f0c38578f00000000000000010000000000000000000000000000002041f935ee7b8e9d4e4c37487dbeefbea7b5a747f4dd17ce3b3d48d14596b4e72e000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000400000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020e668edc7ac41d983f74008271cdb4d79f7c3cdf513cdb1feca01156ba65c6971000000000000000100000000000000010000000000000020f96f5fe97740ed4d0ac78bd6ee6de02f50b02a2869e6b3960d738a88f2cf11e80000000000000001000000000000000100000000000000207cea880a0a8bda0eba998f9db419725855015589b371edd989dbe4f2703e66fd000000000000000100000000000000010000000000000020c834ecb1c39055e35872e8d68d01a84d3fe36a451d1bd01030847bdbc188a8100000000000000001000000000000000100000000000000205d020dd197cd8bc8d2a700f7b64d0ee052f49e38a4b57340dac8626609704eb3000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000000000000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020155b886d0681f186484801cf7b590bcf69bd7fa3e92f3676a253b4488bd372ee000000000000000100000000000000010000000000000020a11a50c4af6d78737792b97fb191f5d2692ccaf74776880c18e54137175dfb090000000000000001000000000000000100000000000000208426f227fd3e4328478afa6bfa8c45d6edaa61863be34324fb04ca8d95cd6c51000000000000000100000000000000010000000000000020b1c0755d20ab702b866cc8ac512368f4ce980380c6f5d7eb40b89839ba4b796600000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000000000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000204efb9415ee3c2dd215aa767e9a0862fc668ccdfbe84133e79c06fc777a26149b0000000000000001000000000000000100000000000000203012b53125bec6acf9ddb8021520d7e8b05fbd920c3f27437f3043180efe2bca0000000000000001000000000000000100000000000000207f6a4fb33bf8bfff5e59e759184fee41613d7717ee0492c3ad6399d0722993830000000000000001000000000000000100000000000000206d40fa545d5914d0673b52a7c1b477cd46d585972da343cacc3892f3bbfa7923000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000007a0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020deb6076e49b4fc6e6a34a06fa058a9fc133c39f69724ac5417e08d696ab29642000000000000000100000000000000000000000000000020dd37c618dfd92b3c41049f2e0dc4d8a18bc3ea3bdc0dc63c4772b9954c439d730000000000000001000000000000000100000000000000204d948ee02f121541df5adbc84ffca22dbbbb38600235df9941a2f20ab5c96df3000000000000000100000000000000000000000000000020d9b8d5ec67254b42678ab91739e07b1ddcd23647902b76537c5f5b68b6b53be7000000000000000100000000000000000000000000000020ff0e61f4a21c645f0a5fc8fc1d6204e2b2befec15e74ee679959788e62c2b7220000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000003a00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000205d6beb5f08c9ef8bd9359bd224406206b660b1fed3f616221fd6c21a5895c30500000000000000010000000000000000000000000000002092b0a7d54412ecb194281235cf7896f354655403bb6cf7d6ad7e4d14335856a0000000000000000100000000000000010000000000000020f8199fc40a1a0c9db7b80b75095eeab687bfbb6e6550e93657ee6f2d4ae3d86d000000000000000100000000000000000000000000000020278cc806407a74ae434d1b1dff34326b54f20a3de6ad3df2d2448c7346240da700000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000001a000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020eea1b50ec40a1d88c2995fadbcd9f72a382913df10f4333fcb9be71e194fe87600000000000000010000000000000000000000000000002008f60556d73bb163220ae34d041b7dbe7733e8f9227c3af0a177a00b4b742bed000000000000000100000000000000010000000000000020c9de92c70724f2fa66cdd10cb0c2b9e1cc33e37ec8233a5650e23f84148402e000000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000006d0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020d26ec6807018b2644d35a8792ca7706ec515082274f63f9193f84f274aa59e09000000000000000100000000000000010000000000000020c7eb03cecc37c8f6051116d6956623fcc836ee8a367bd52436d1b1e584ca7f57000000000000000100000000000000000000000000000020e94429f8742ecea1d8baafd0a9e5ba1f9391b38feb3aceebab08baf65e26f0450000000000000001000000000000000000000000000000201fe41c7c2aa462598d402faec6fb9cd0bd2fcc35d1ce562c8cf3f7f8ad4588cc0000000000000001000000000000000100000000000000203981922e553fc8e354731be6bd375b1785364b2e2476151e7154d94fce95b2110000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000002d00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000000000000000000002024151db8d38cf3038774b9dd8ff5ce28aac63f36853e52f4bd9b3ad89bac25e20000000000000001000000000000000100000000000000209c353e38dff86e8d057ad81e0d879a01a1b93cd7e16c03abd6c57147b8758047000000000000000100000000000000000000000000000020a5a3a78d21fabb4c098c133a0e4cf00d903bbad62c9c916d47a3b6ebfdca2f680000000000000001000000000000000000000000000000209df67d6696a217d379788a570014872e39da29c1a327fbd7754c8f2bdf33ee0e00000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000000d000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000000000000000000020501fa6430ac62046f86a46e9a646835b2004327218ea12dcc685e77c14094ee6000000000000000100000000000000010000000000000020f12525946b31c3188fc50cee9b7544de3bf4b598d9b9e0dd535b10a78d0bb27b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000006c0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020a3c98d2dffd099463c220ed7acfc6ee3a34c7054883954f13509a31bd0cd9703000000000000000100000000000000010000000000000020c7eb03cecc37c8f6051116d6956623fcc836ee8a367bd52436d1b1e584ca7f57000000000000000100000000000000000000000000000020e94429f8742ecea1d8baafd0a9e5ba1f9391b38feb3aceebab08baf65e26f0450000000000000001000000000000000000000000000000201fe41c7c2aa462598d402faec6fb9cd0bd2fcc35d1ce562c8cf3f7f8ad4588cc0000000000000001000000000000000100000000000000203981922e553fc8e354731be6bd375b1785364b2e2476151e7154d94fce95b2110000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000002c00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000205f2cdaec8ebf35dc3816253bcce976a50b20abd939447a39f0093d65366334bc0000000000000001000000000000000100000000000000209c353e38dff86e8d057ad81e0d879a01a1b93cd7e16c03abd6c57147b8758047000000000000000100000000000000000000000000000020a5a3a78d21fabb4c098c133a0e4cf00d903bbad62c9c916d47a3b6ebfdca2f680000000000000001000000000000000000000000000000209df67d6696a217d379788a570014872e39da29c1a327fbd7754c8f2bdf33ee0e00000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000000c000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000209f7120f23a7dc936ece89768acd7a10948b7f8e3a3c79e9d7cf32e35b63c0388000000000000000100000000000000010000000000000020f12525946b31c3188fc50cee9b7544de3bf4b598d9b9e0dd535b10a78d0bb27b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc4647900000000000000180000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000205add4d19a832bf2e6532263a22967f8adc3a314d36cb356de5cacdc7bdd213ae0000000000000001000000000000000100000000000000202615b226d279a3efa6d40bdc8fdbf31c4de995a81cf0dfc1e3b243bf29ae3878000000000000000100000000000000010000000000000020360de1e1fe41da256567e19a623d1143bf34f8300179317f0ee23637a1496984000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001800000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000200430c08d5ea73aacfb2dc0646a7034c5893caeee51dc7f321b3a9496cd8814640000000000000001000000000000000100000000000000207c648cf1d135f3ddef05d9ba19a07d84ca375dc645200396b259b2d3216d1773000000000000000100000000000000010000000000000020a406da53348c4c7e0239eb6a2fc7fdb8e52304f542b526606966b0a389120188000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000018000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000204e743d46febadc18130d98508dfd6edfd26db2b05ff5d5429fbbbe31acf2fc2300000000000000010000000000000001000000000000002027130d104091b47b17eea77d851efd86ce50a5c4cf8bbb944c20516c8b08e0bd000000000000000100000000000000010000000000000020c9de92c70724f2fa66cdd10cb0c2b9e1cc33e37ec8233a5650e23f84148402e000000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000005c0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020474416b31e937b0f731c62dc9055a992b6997ff7f888f52fddbc8b7fa8208a0c00000000000000010000000000000001000000000000002038b1c75543428992f499c63c0f64a2962657c6532a4d8009908c01d2ac6078810000000000000001000000000000000000000000000000207d4963b5724ebf61b258f4970661899221da919a12138a2998c0ab92d4aea935000000000000000100000000000000000000000000000020a9662c874be7945649b98b9c81f465a508fe14539573b8c3fec3f2d611bf1e7c000000000000000100000000000000000000000000000020de6926c2b2c79f2370d45818ff9eb4d4547065c9f10f31f9416413a9a91e1b68000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000001c00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000201634c0f0337a12534f7a2b46e7f0c13d65c6d66882e2ce2ebf8f4da0eb0fa69d000000000000000100000000000000010000000000000020053fead031d6f530ead877c5775adf9f092d11b293da5580c027ccd0b0238273000000000000000100000000000000000000000000000020eef772e834ab948f74fe439b2765a904f6737992cd2a6c66e5b0a2076e78a0bf000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001c000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000208acaef2a5a512f2b783ce1db962701cf184ebb814600da20c7c0dde465b78e8e0000000000000001000000000000000100000000000000208d8faa056ddb0662b9699b4244eccc38910a8e83ed97e5d0d9a0a68b62c60226000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000002a0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000207207273d284705d93208e79f3ac21f931634cd1ede43287b529e2ad8459f80a9000000000000000100000000000000000000000000000020725b2720a04f60dd54ed2b38f3beeb986fe2d3ce28d4181b55846c0ed176c85e0000000000000001000000000000000100000000000000200fc14509d562c9f75e5e1a937da3e8f0f41140501a4b71d85a2dede96d6b5ccb00000000000000010000000000000000000000000000002098a42ef655f9e2b2020ef1d59bae4b378804e09b92201707c9bafe56215bb37d000000000000000100000000000000010000000000000020f8a086bacd0b41568194a8a5696422282191bb07bd68b5fc1884372d5a87e710000000000000000100000000000000000000000000000020cd6e61cf43694efd95cda323b25b2d4aaee54a194dbfb5a42b32da586bc1fa680000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000002a00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020d8bcacbf15f3529ff7cbdbf71badf8c899af2cc07b53e74913d673199141fa470000000000000001000000000000000000000000000000208e35cb228a71a3da1d606e5e51d7126df395ab88e238a8655eeec47e4d30951e000000000000000100000000000000010000000000000020fdcfe324c22049dd7d8344f164cf4d2433ffb80a9020bef28383e88d2cf96d080000000000000001000000000000000000000000000000209df67d6696a217d379788a570014872e39da29c1a327fbd7754c8f2bdf33ee0e00000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000000a000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020561aa2ba78d50edb75b74ab80d2bcb5553427f38f142ef99920981f7b6adc0b7000000000000000100000000000000000000000000000020d0974be052f14dec56f452df9ef263f9f7ef784c616e66e25f3c6283f358373800000000000000010000000000000001000000000000002072a19f5940dcf756c5399fb0515736767a580459dd186a47274ed1642b39c5c000000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000006f0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020bfcda80dde4f4baeb9c987131ceb0e5e4ea174f7d8309d4e404423561f0e11d8000000000000000100000000000000000000000000000020823049c4e196ef320a2dab97f1f6b5c87823e90fe90fc54bc021d56e338bba96000000000000000100000000000000000000000000000020e94429f8742ecea1d8baafd0a9e5ba1f9391b38feb3aceebab08baf65e26f0450000000000000001000000000000000000000000000000201fe41c7c2aa462598d402faec6fb9cd0bd2fcc35d1ce562c8cf3f7f8ad4588cc0000000000000001000000000000000100000000000000203981922e553fc8e354731be6bd375b1785364b2e2476151e7154d94fce95b2110000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000002f00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000000000000000000002071f2515674da8ee74a324ae5af5de23fc1d26e5911bc2fe1dc08607aac712eb10000000000000001000000000000000000000000000000203012119f6499bb8adbe11342961e20660dc88752a608cff867148e2ca4498402000000000000000100000000000000000000000000000020a5a3a78d21fabb4c098c133a0e4cf00d903bbad62c9c916d47a3b6ebfdca2f680000000000000001000000000000000000000000000000209df67d6696a217d379788a570014872e39da29c1a327fbd7754c8f2bdf33ee0e00000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000000f000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000000000000000000020b9e5ab5aeb2b43e65e0c8693fc28386fb06a6c997f398a642c95f88df7741ed6000000000000000100000000000000000000000000000020ee4272859658c2d7124d91bc6a4803ed75d25c5923efdc417f76a407c217f10b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000001c0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000207588297841ea4adb3e9954686fc1e4327ad874b558dd494194b5452f0bd5c8b1000000000000000100000000000000010000000000000020b73a3f1172fad13086984b611f286b62f1bc115b44828766f282648a15c276bb0000000000000001000000000000000000000000000000201ee3c6a81e72922427fb7143300c4ba2e6b17afef0c34ec5dd487b43943a0543000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001c00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000201634c0f0337a12534f7a2b46e7f0c13d65c6d66882e2ce2ebf8f4da0eb0fa69d000000000000000100000000000000010000000000000020053fead031d6f530ead877c5775adf9f092d11b293da5580c027ccd0b0238273000000000000000100000000000000000000000000000020eef772e834ab948f74fe439b2765a904f6737992cd2a6c66e5b0a2076e78a0bf000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001c000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000208acaef2a5a512f2b783ce1db962701cf184ebb814600da20c7c0dde465b78e8e0000000000000001000000000000000100000000000000208d8faa056ddb0662b9699b4244eccc38910a8e83ed97e5d0d9a0a68b62c60226000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000560000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020cf2096b82487fd0b4ebf90013950dd889d72ba25c40b38873bbe55d444fc30af00000000000000010000000000000000000000000000002034b5b5a0c8c24b575aa3f74270b73cbc439cb880c751d9daa8af8c2350f83f76000000000000000100000000000000000000000000000020776b06a5acf790761f6240bf2c13f5d36e321443e8307f2636608749378b82df000000000000000100000000000000010000000000000020db0e023ec8d72c071ea8d995edc8f074b62fe7ea5d79f7f861578fc217f6c5b3000000000000000100000000000000000000000000000020de6926c2b2c79f2370d45818ff9eb4d4547065c9f10f31f9416413a9a91e1b68000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000001600000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020bab814f583e5dff7def3c9bfa67fa93b4fa83624c3b778c61c6e3a7f9c5eb029000000000000000100000000000000000000000000000020fa8c57349cd8e988761c9bf04624f98d40aad1258694ef86a33a29ef41f3336a000000000000000100000000000000000000000000000020fb410790acd5fdbf89d24f2ede1d32c95e8336f3583010cf24f41e2ac1fb39d60000000000000001000000000000000100000000000000201d3aa2233b91add56e9b89574fd69e12e9d23dec9dc72db6e6d0fe8d1bcd3d910000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000016000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020a26e442aa35decbd11f2707b79df635527ea80561da9712b8afc6855a9a7fbef00000000000000010000000000000000000000000000002093c2f58026d47aa6bd82686021e20b129925139433f046168b00a8775db238be00000000000000010000000000000000000000000000002091a1a84e836796bff075a433deefbf7e25101832a3dfa8fe5085023a05c3bebe0000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000001e0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020b15b870f5863ab3bd204dc8d6d479d1c04e4e43a62c3af50c8d64ebfb053ae52000000000000000100000000000000000000000000000020fffe67ddb49f969a2fcf113bd2e7a7440b2f0c3b23e494a0539d2b632d20c8050000000000000001000000000000000000000000000000201ee3c6a81e72922427fb7143300c4ba2e6b17afef0c34ec5dd487b43943a0543000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001e00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000001000000000000002085a908a127f6b193f4ef9e5c74797bec786af9acedaf5d038e9451ec1c3d351f000000000000000100000000000000000000000000000020898fce017de36c56a496c2d075e9a3589b8a6c632cb9c88c17c616b9dedc60b8000000000000000100000000000000000000000000000020eef772e834ab948f74fe439b2765a904f6737992cd2a6c66e5b0a2076e78a0bf000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001e000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000207aa6510bda4e0ecaebc65c79eb393e806122e5528076754acddcaf9ddc391e4d00000000000000010000000000000000000000000000002041f935ee7b8e9d4e4c37487dbeefbea7b5a747f4dd17ce3b3d48d14596b4e72e000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000720000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000208de8f620a5fc399b5ecc2d43ea902931f71f9ae447700c2535c6a6f115938cde000000000000000100000000000000000000000000000020de9f046f1aad750186b57c9cfeacfa4e57ba177d31a0724e326df1e60afc15920000000000000001000000000000000100000000000000205af0c30301c2cebde85b26134fb68923a872af8613b7ede4104a7f3786c2e399000000000000000100000000000000010000000000000020e64a0b1e5bfa3cc13b42f1c94f8b754ddbc1ac5c7410d9e82bea6b20ba17c12d000000000000000100000000000000000000000000000020ff0e61f4a21c645f0a5fc8fc1d6204e2b2befec15e74ee679959788e62c2b7220000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000003200000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020869a859ad83c189942deb65c779868ea78a24f226849d17f6f7c75dc8094366d000000000000000100000000000000000000000000000020e5227b76320bb43e07aeca54708b074ddca560d8f5f10ba85577ff643ba11b48000000000000000100000000000000010000000000000020c8e48abe7707919d92a6c7ada60f64b5c9d5b1dc6b0c597a76fa4dde365b28790000000000000001000000000000000100000000000000204be907fa0033d260ddb828cd6bd1a2f16b4b7c8b78b9f3cb0f79a8c797e54c1100000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000012000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000001000000000000002056c62ecc4d2213c21068a2cdd186922392f41def2d327df33699a445258e5a780000000000000001000000000000000000000000000000200f5dd7c1922948c1439777ed0b491d1fa487cb063021a98b2df0412b70d5c4670000000000000001000000000000000100000000000000200a020532b9330815e1b068025d04ffb8ead304a30c535e98e92b157bab1b99b00000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000370000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000203b3a18526dbbfd1ff865d7a299b747bad14115f35e1ac09b2a3398204debab7d000000000000000100000000000000000000000000000020d2696bc36277658ec9e8e35ac799d2e6c06c9244e092fc7addc19e11033ad5190000000000000001000000000000000000000000000000200d1b3af869c8d78079cedd835e78f5bf042fe359c737649e31850d975c47955400000000000000010000000000000001000000000000002089ec037db050a177374eb9421ba4035962ad6c11985e3d3682c8a38d803cb8ee00000000000000010000000000000000000000000000002059b6d00a0f8faf8f5da1d200d318a515f3333f98ddf3acbfcb22f9d5e829d943000000000000000100000000000000000000000000000020cd6e61cf43694efd95cda323b25b2d4aaee54a194dbfb5a42b32da586bc1fa680000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000003700000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000000000000000000202768f5abdff5bd38dd7a5126680a094ae0890071146d5670726e7ade65ef3f00000000000000000100000000000000000000000000000020bb93bdd4182a1e1be23fe4633b3a17ef29d9394f1395d96dd06129c1fd7026e2000000000000000100000000000000000000000000000020604247288613d9947a4ceffd3da8b7f3867475b2f5aac9cdaacd4b0259430df50000000000000001000000000000000100000000000000204be907fa0033d260ddb828cd6bd1a2f16b4b7c8b78b9f3cb0f79a8c797e54c1100000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000017000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000000000000000000002092eb996e80537dc31c88663e3f823c2c8b62d2eb287accdc28b3729d0703df6000000000000000010000000000000000000000000000002093c2f58026d47aa6bd82686021e20b129925139433f046168b00a8775db238be00000000000000010000000000000000000000000000002091a1a84e836796bff075a433deefbf7e25101832a3dfa8fe5085023a05c3bebe0000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000420000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e63000000000000000700000000000000010000000000000001000000000000002075a6d91ca5f1c98dc29169c87c815299a0a0cbb59cb81a7cdfea1c760215dbcf0000000000000001000000000000000000000000000000205d1af57993b1311f451cd8f3ad1630a69d364f98f0aa121c7a5351255c68f1120000000000000001000000000000000100000000000000207cea880a0a8bda0eba998f9db419725855015589b371edd989dbe4f2703e66fd000000000000000100000000000000010000000000000020c834ecb1c39055e35872e8d68d01a84d3fe36a451d1bd01030847bdbc188a8100000000000000001000000000000000100000000000000205d020dd197cd8bc8d2a700f7b64d0ee052f49e38a4b57340dac8626609704eb3000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000000200000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000203f1d5733faf6919bb0221886fef7723c556b881dd37499da796b310c0a510553000000000000000100000000000000000000000000000020973abe56098c5cb6f2fd1a10ed41542aa7e5dd0213808541bcd299c4276351150000000000000001000000000000000100000000000000208426f227fd3e4328478afa6bfa8c45d6edaa61863be34324fb04ca8d95cd6c51000000000000000100000000000000010000000000000020b1c0755d20ab702b866cc8ac512368f4ce980380c6f5d7eb40b89839ba4b796600000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000002000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020c7a75c7b0fd962d10fa408a394120615ef9bb9f0eb7b56b7b0191f35fda0cb460000000000000001000000000000000000000000000000207c3b41e0459d429789bc86f01b4ed1339eb1ef45db1cebe9aaf7645752bfcfae0000000000000001000000000000000100000000000000207f6a4fb33bf8bfff5e59e759184fee41613d7717ee0492c3ad6399d0722993830000000000000001000000000000000100000000000000206d40fa545d5914d0673b52a7c1b477cd46d585972da343cacc3892f3bbfa7923000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000001b0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020640e3f3ff7ad663637c5f5ef98820d322f1a543b419c459f8b8e7a4dfe8dcf1000000000000000010000000000000000000000000000002028341ede75d2ef06bfe13bbeee6b5c35cbc0fd8322130f5aeb56b5cf32c584e5000000000000000100000000000000010000000000000020360de1e1fe41da256567e19a623d1143bf34f8300179317f0ee23637a1496984000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001b00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000000000000000000206896e2106ca62340c925f41cb2fc5737808ea05aec4e9f4da15b2c80cebd0ed500000000000000010000000000000000000000000000002071e1b34d4462f76c0df1694ec6f9b40f08cbaf8010ce392863ad7cff3ea79bde000000000000000100000000000000010000000000000020a406da53348c4c7e0239eb6a2fc7fdb8e52304f542b526606966b0a389120188000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001b000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000000000000000000207bfd50ec28a9603301e0f406b169f77884e96d61cbdb11b3fd09833c6d1a43e300000000000000010000000000000000000000000000002008f60556d73bb163220ae34d041b7dbe7733e8f9227c3af0a177a00b4b742bed000000000000000100000000000000010000000000000020c9de92c70724f2fa66cdd10cb0c2b9e1cc33e37ec8233a5650e23f84148402e000000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000420000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e63000000000000000700000000000000010000000000000001000000000000002075a6d91ca5f1c98dc29169c87c815299a0a0cbb59cb81a7cdfea1c760215dbcf0000000000000001000000000000000000000000000000205d1af57993b1311f451cd8f3ad1630a69d364f98f0aa121c7a5351255c68f1120000000000000001000000000000000100000000000000207cea880a0a8bda0eba998f9db419725855015589b371edd989dbe4f2703e66fd000000000000000100000000000000010000000000000020c834ecb1c39055e35872e8d68d01a84d3fe36a451d1bd01030847bdbc188a8100000000000000001000000000000000100000000000000205d020dd197cd8bc8d2a700f7b64d0ee052f49e38a4b57340dac8626609704eb3000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000000200000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000203f1d5733faf6919bb0221886fef7723c556b881dd37499da796b310c0a510553000000000000000100000000000000000000000000000020973abe56098c5cb6f2fd1a10ed41542aa7e5dd0213808541bcd299c4276351150000000000000001000000000000000100000000000000208426f227fd3e4328478afa6bfa8c45d6edaa61863be34324fb04ca8d95cd6c51000000000000000100000000000000010000000000000020b1c0755d20ab702b866cc8ac512368f4ce980380c6f5d7eb40b89839ba4b796600000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000002000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020c7a75c7b0fd962d10fa408a394120615ef9bb9f0eb7b56b7b0191f35fda0cb460000000000000001000000000000000000000000000000207c3b41e0459d429789bc86f01b4ed1339eb1ef45db1cebe9aaf7645752bfcfae0000000000000001000000000000000100000000000000207f6a4fb33bf8bfff5e59e759184fee41613d7717ee0492c3ad6399d0722993830000000000000001000000000000000100000000000000206d40fa545d5914d0673b52a7c1b477cd46d585972da343cacc3892f3bbfa7923000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000000b0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000208eda1a225e2718acef44e424ef68fd56cef70e49eea70b00c34fa4f30ef25efc000000000000000100000000000000000000000000000020b9c99aa72545b85f4cfe87140ac26921b0f73bb1fdffff4aa58491d50ec71d1e0000000000000001000000000000000100000000000000205d3fc9b15b4a6ebdca0105ab038974a59de979911cdfffe9b4070dbd771a360d00000000000000010000000000000000000000000000002025792043171cc4f0cd46bcdcb41991bddf423d2bf5a2d92b108cc43718a777c400000000000000010000000000000001000000000000002099055a5888504b4ed0efd5c8af2f74de5a3393c42b7bf782fc33893679ecf96d0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000000b00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000000000000000000020f7ee07df88c96c5556aaaaf0592199655409839928ef36a857405582e14fd2850000000000000001000000000000000000000000000000201fd03114734a909f2af9dfbfc1a402ed2d45cfe212772b029540e8d1d47bc5630000000000000001000000000000000100000000000000206725d101631566887b8eb9586e109b8d43a61c2a38c0cb3f0c081d9259a077070000000000000001000000000000000000000000000000209bdd6b7b6cb5c1ad04c3223eb734f02259a900dabfa2e5fbdf2c53f1ba29a89800000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000000b000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000000000000000000020a2efb5a2eb11373f1a7a64d61ccdecc4f72e8508b953ffefb6c11436dab4763a000000000000000100000000000000000000000000000020d0974be052f14dec56f452df9ef263f9f7ef784c616e66e25f3c6283f358373800000000000000010000000000000001000000000000002072a19f5940dcf756c5399fb0515736767a580459dd186a47274ed1642b39c5c000000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc4647900000000000000110000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000201f2df64b02c9b286c65cefb571614170a82f64edcd620fae61b8feb7606576f8000000000000000100000000000000010000000000000020607633779fc9548f6c03d39df9afd4c608220c8a57ea3a79dcb3482526773bcc000000000000000100000000000000010000000000000020a848b049a7fb70f1b42aa0e44a4f49dda984a02cbaf493d9f85e1b6012bfde1f000000000000000100000000000000010000000000000020439fe973303483577ecab19db8caf1eb316ab2a99e8f21e89acb06368d44beef0000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001100000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000000000000000000205948b47c964e3a9d6c46bbdd27aab3059250496ab3c8376f6f888f2480b7c715000000000000000100000000000000010000000000000020e27c34d3b719a65401a92ab17e372c2a694f15bb047dda8c848f06b1e4cc58c6000000000000000100000000000000010000000000000020a266ad3dcdd42e3fd32f436bc9e907341340a124556a48afb6888dc3034d15770000000000000001000000000000000100000000000000201d3aa2233b91add56e9b89574fd69e12e9d23dec9dc72db6e6d0fe8d1bcd3d910000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000011000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000000000000000000002077729fe996c05cdb57999d70c8708509e0af512232163b286452bf0e9812e9d5000000000000000100000000000000010000000000000020ff3db225a43867cf28972b6cbbb49c9dca91a4450ee7eb5dc1b5c8c1f529685e0000000000000001000000000000000100000000000000200a020532b9330815e1b068025d04ffb8ead304a30c535e98e92b157bab1b99b00000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000000c0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000203d67e891d44f5cecad2331b37af621f439ca5bd2342dea8efd59ba26287c040f00000000000000010000000000000001000000000000002042877b2cba3d1570bb3b50091755de23f1d7444ec6b12b83dd73760da9b3988e0000000000000001000000000000000000000000000000201aed8ecced497889326ef67a146e0204c4108f8085e91a939ef0543a35c0c5c000000000000000010000000000000000000000000000002025792043171cc4f0cd46bcdcb41991bddf423d2bf5a2d92b108cc43718a777c400000000000000010000000000000001000000000000002099055a5888504b4ed0efd5c8af2f74de5a3393c42b7bf782fc33893679ecf96d0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000000c00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020048f22f5e9be99ff08bee5e1d9d4a515b0bc8c5b236ebdc52ec29ef7cd77be530000000000000001000000000000000100000000000000209cc3cf496fe8ce5bc784e21b86b497b39c543f22ebf57bce4bc41da1ee5d9ed1000000000000000100000000000000000000000000000020f702b28cbc382aed2634a1cc751d12e676d74a66fd98ce3e17dfc965f1d74ad10000000000000001000000000000000000000000000000209bdd6b7b6cb5c1ad04c3223eb734f02259a900dabfa2e5fbdf2c53f1ba29a89800000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000000c000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000209f7120f23a7dc936ece89768acd7a10948b7f8e3a3c79e9d7cf32e35b63c0388000000000000000100000000000000010000000000000020f12525946b31c3188fc50cee9b7544de3bf4b598d9b9e0dd535b10a78d0bb27b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000003f0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020120cd4bc1d76acd4e3050669eea7fee73d73d2b1be80280adf22f97082ee9c92000000000000000100000000000000000000000000000020f6c78ce5d7063167734cd1f5cdbc8e39b2a71d977071916a6347aa0317b255f4000000000000000100000000000000000000000000000020171867ad694f5802e6c97a9b0ad25708e020cb5be5521e80eeb5c49f56817e1b0000000000000001000000000000000000000000000000207508190087b5ebd4e3ce7dea2b51142411a26feea0e1883128d3ad2ac3f8843500000000000000010000000000000000000000000000002059b6d00a0f8faf8f5da1d200d318a515f3333f98ddf3acbfcb22f9d5e829d943000000000000000100000000000000000000000000000020cd6e61cf43694efd95cda323b25b2d4aaee54a194dbfb5a42b32da586bc1fa680000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000003f00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000000000000000000002051a280cf5323746430a83b983c8ae27456adc35ab32c06202b9ed6076bfdbd540000000000000001000000000000000000000000000000209ac47f0db306fce2bf48e3a36a61ba34d40f847b8538f926c732b1e84c6d56ea00000000000000010000000000000000000000000000002087ddb794b71304c7adada2bc3591f9cc037724ece83a65fdd8e1020925b9957c000000000000000100000000000000000000000000000020278cc806407a74ae434d1b1dff34326b54f20a3de6ad3df2d2448c7346240da700000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000001f000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000000000000000000203d459898e5917fe5627848ee6da9448d8b05360947d45e408293e71f0c38578f00000000000000010000000000000000000000000000002041f935ee7b8e9d4e4c37487dbeefbea7b5a747f4dd17ce3b3d48d14596b4e72e000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000170000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020599d1bf380a068738c5999aa5c956a93ebcbde3a151eaace2f3b784d9585422b000000000000000100000000000000000000000000000020e7e34aadae33b44b777965a45b2d15cbd15069af0dcf0b26d33a838994dab5480000000000000001000000000000000000000000000000201c88b470940b086f3bcb2a9c1deb4fac39468f9d8c03e4ee2c93715bdfd36793000000000000000100000000000000010000000000000020439fe973303483577ecab19db8caf1eb316ab2a99e8f21e89acb06368d44beef0000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001700000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000000000000000000002086889ddc8d9e4979bfa600b5cd027847947a35aade48ff618e5f592a65b83289000000000000000100000000000000000000000000000020fa8c57349cd8e988761c9bf04624f98d40aad1258694ef86a33a29ef41f3336a000000000000000100000000000000000000000000000020fb410790acd5fdbf89d24f2ede1d32c95e8336f3583010cf24f41e2ac1fb39d60000000000000001000000000000000100000000000000201d3aa2233b91add56e9b89574fd69e12e9d23dec9dc72db6e6d0fe8d1bcd3d910000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000017000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000000000000000000002092eb996e80537dc31c88663e3f823c2c8b62d2eb287accdc28b3729d0703df6000000000000000010000000000000000000000000000002093c2f58026d47aa6bd82686021e20b129925139433f046168b00a8775db238be00000000000000010000000000000000000000000000002091a1a84e836796bff075a433deefbf7e25101832a3dfa8fe5085023a05c3bebe0000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000420000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e63000000000000000700000000000000010000000000000001000000000000002075a6d91ca5f1c98dc29169c87c815299a0a0cbb59cb81a7cdfea1c760215dbcf0000000000000001000000000000000000000000000000205d1af57993b1311f451cd8f3ad1630a69d364f98f0aa121c7a5351255c68f1120000000000000001000000000000000100000000000000207cea880a0a8bda0eba998f9db419725855015589b371edd989dbe4f2703e66fd000000000000000100000000000000010000000000000020c834ecb1c39055e35872e8d68d01a84d3fe36a451d1bd01030847bdbc188a8100000000000000001000000000000000100000000000000205d020dd197cd8bc8d2a700f7b64d0ee052f49e38a4b57340dac8626609704eb3000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000000200000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000203f1d5733faf6919bb0221886fef7723c556b881dd37499da796b310c0a510553000000000000000100000000000000000000000000000020973abe56098c5cb6f2fd1a10ed41542aa7e5dd0213808541bcd299c4276351150000000000000001000000000000000100000000000000208426f227fd3e4328478afa6bfa8c45d6edaa61863be34324fb04ca8d95cd6c51000000000000000100000000000000010000000000000020b1c0755d20ab702b866cc8ac512368f4ce980380c6f5d7eb40b89839ba4b796600000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000002000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020c7a75c7b0fd962d10fa408a394120615ef9bb9f0eb7b56b7b0191f35fda0cb460000000000000001000000000000000000000000000000207c3b41e0459d429789bc86f01b4ed1339eb1ef45db1cebe9aaf7645752bfcfae0000000000000001000000000000000100000000000000207f6a4fb33bf8bfff5e59e759184fee41613d7717ee0492c3ad6399d0722993830000000000000001000000000000000100000000000000206d40fa545d5914d0673b52a7c1b477cd46d585972da343cacc3892f3bbfa7923000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000007a0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020deb6076e49b4fc6e6a34a06fa058a9fc133c39f69724ac5417e08d696ab29642000000000000000100000000000000000000000000000020dd37c618dfd92b3c41049f2e0dc4d8a18bc3ea3bdc0dc63c4772b9954c439d730000000000000001000000000000000100000000000000204d948ee02f121541df5adbc84ffca22dbbbb38600235df9941a2f20ab5c96df3000000000000000100000000000000000000000000000020d9b8d5ec67254b42678ab91739e07b1ddcd23647902b76537c5f5b68b6b53be7000000000000000100000000000000000000000000000020ff0e61f4a21c645f0a5fc8fc1d6204e2b2befec15e74ee679959788e62c2b7220000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000003a00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000205d6beb5f08c9ef8bd9359bd224406206b660b1fed3f616221fd6c21a5895c30500000000000000010000000000000000000000000000002092b0a7d54412ecb194281235cf7896f354655403bb6cf7d6ad7e4d14335856a0000000000000000100000000000000010000000000000020f8199fc40a1a0c9db7b80b75095eeab687bfbb6e6550e93657ee6f2d4ae3d86d000000000000000100000000000000000000000000000020278cc806407a74ae434d1b1dff34326b54f20a3de6ad3df2d2448c7346240da700000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000001a000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020eea1b50ec40a1d88c2995fadbcd9f72a382913df10f4333fcb9be71e194fe87600000000000000010000000000000000000000000000002008f60556d73bb163220ae34d041b7dbe7733e8f9227c3af0a177a00b4b742bed000000000000000100000000000000010000000000000020c9de92c70724f2fa66cdd10cb0c2b9e1cc33e37ec8233a5650e23f84148402e000000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000300000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000203148fb929632385bce86f244f506ab76df645dc019218fc0decfac79e3624c1b0000000000000001000000000000000100000000000000209c1914954a83375d5ba09778a49cebd88fdef1e220d5b262dfdfb2dee2b3946e000000000000000100000000000000010000000000000020146ccd87ea3ec153babac0b26e23b789e526d8bce6cdd5d6b0af3e0316a40ab000000000000000010000000000000001000000000000002089ec037db050a177374eb9421ba4035962ad6c11985e3d3682c8a38d803cb8ee00000000000000010000000000000000000000000000002059b6d00a0f8faf8f5da1d200d318a515f3333f98ddf3acbfcb22f9d5e829d943000000000000000100000000000000000000000000000020cd6e61cf43694efd95cda323b25b2d4aaee54a194dbfb5a42b32da586bc1fa680000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000003000000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020bf8a1de46276016b7e41424ca5afeaf232fb50079cd21e0151a2af069d460665000000000000000100000000000000010000000000000020dd3fd863d5d16d0a55e43e579b2bab134d41ee0596a279cb4e270900f70aa313000000000000000100000000000000010000000000000020c8e48abe7707919d92a6c7ada60f64b5c9d5b1dc6b0c597a76fa4dde365b28790000000000000001000000000000000100000000000000204be907fa0033d260ddb828cd6bd1a2f16b4b7c8b78b9f3cb0f79a8c797e54c1100000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000010000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000001000000000000002031a42ac7ae67e6afa4327feed11d2bc7194411f35667988901d26d44be6d8428000000000000000100000000000000010000000000000020ff3db225a43867cf28972b6cbbb49c9dca91a4450ee7eb5dc1b5c8c1f529685e0000000000000001000000000000000100000000000000200a020532b9330815e1b068025d04ffb8ead304a30c535e98e92b157bab1b99b00000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000720000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000208de8f620a5fc399b5ecc2d43ea902931f71f9ae447700c2535c6a6f115938cde000000000000000100000000000000000000000000000020de9f046f1aad750186b57c9cfeacfa4e57ba177d31a0724e326df1e60afc15920000000000000001000000000000000100000000000000205af0c30301c2cebde85b26134fb68923a872af8613b7ede4104a7f3786c2e399000000000000000100000000000000010000000000000020e64a0b1e5bfa3cc13b42f1c94f8b754ddbc1ac5c7410d9e82bea6b20ba17c12d000000000000000100000000000000000000000000000020ff0e61f4a21c645f0a5fc8fc1d6204e2b2befec15e74ee679959788e62c2b7220000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000003200000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020869a859ad83c189942deb65c779868ea78a24f226849d17f6f7c75dc8094366d000000000000000100000000000000000000000000000020e5227b76320bb43e07aeca54708b074ddca560d8f5f10ba85577ff643ba11b48000000000000000100000000000000010000000000000020c8e48abe7707919d92a6c7ada60f64b5c9d5b1dc6b0c597a76fa4dde365b28790000000000000001000000000000000100000000000000204be907fa0033d260ddb828cd6bd1a2f16b4b7c8b78b9f3cb0f79a8c797e54c1100000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000012000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000001000000000000002056c62ecc4d2213c21068a2cdd186922392f41def2d327df33699a445258e5a780000000000000001000000000000000000000000000000200f5dd7c1922948c1439777ed0b491d1fa487cb063021a98b2df0412b70d5c4670000000000000001000000000000000100000000000000200a020532b9330815e1b068025d04ffb8ead304a30c535e98e92b157bab1b99b00000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000070000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000200d40956f150b4f78df8af2a02cbbef42cd88a0b4aabad3f35e6843351c0484aa000000000000000100000000000000000000000000000020d0624510677ea5fbded312cb11b11718c6277617f42d3af3c4f16cdbba6738d7000000000000000100000000000000000000000000000020f14f80821903860da087c1b1b7662a08cab4a040fd04b70c275657809939505600000000000000010000000000000001000000000000002029241ba8217ad72b0dac9bd7c8fc4389f23ac41b9c9678eaa733f4b31af8de9500000000000000010000000000000001000000000000002099055a5888504b4ed0efd5c8af2f74de5a3393c42b7bf782fc33893679ecf96d0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000000700000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000000000000000000208615bd29e618d25bdbe58a362147791e1b5f677f0387ec318eb836a6707302a200000000000000010000000000000000000000000000002066b9314b439c03d070c13b7b828678e8f19ad511e17e8b01d622b96a03e0b4b9000000000000000100000000000000000000000000000020796a6a4942c9915ef0f135ff4654fff6b509514e9b42ecc4f0196a67fdd57f19000000000000000100000000000000010000000000000020b1c0755d20ab702b866cc8ac512368f4ce980380c6f5d7eb40b89839ba4b796600000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000007000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000000000000000000202640fa45ff42b079f1168b1432978039a8629fd8be06d40efc409c716dda3ee0000000000000000100000000000000000000000000000020be2a61482da2e4d2a8cf7a7dd6bc41ce863ee0ba102d7216015c80a9a1458d10000000000000000100000000000000000000000000000020bac21397425e5c4a7c69631fc20e4e1bdc8c609022763df48f6210c07e174c940000000000000001000000000000000100000000000000206d40fa545d5914d0673b52a7c1b477cd46d585972da343cacc3892f3bbfa7923000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc4647900000000000000690000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000200d88ce3f344e954dfc58453be74afbb006ef4240da2054e63d4c7fa81c430d72000000000000000100000000000000010000000000000020e9a61279ce8e341b1d01690fece60bff1b8c7f612e1ea2db3f5c9dd86224a41d000000000000000100000000000000010000000000000020f9b98f9d2ac5c44cfeea49c4f61670e54a8c1db8c61cdc69be4f90c254556a400000000000000001000000000000000000000000000000201fe41c7c2aa462598d402faec6fb9cd0bd2fcc35d1ce562c8cf3f7f8ad4588cc0000000000000001000000000000000100000000000000203981922e553fc8e354731be6bd375b1785364b2e2476151e7154d94fce95b2110000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000002900000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000000000000000000020051fdca82bb8199a879c2bafe8e08d239b0559424120b9538cb6c23b2a93aea8000000000000000100000000000000010000000000000020d1ca734f51f8b1f82c822515046edbdb1d584a1b7511e971d6b9c17296d93440000000000000000100000000000000010000000000000020fdcfe324c22049dd7d8344f164cf4d2433ffb80a9020bef28383e88d2cf96d080000000000000001000000000000000000000000000000209df67d6696a217d379788a570014872e39da29c1a327fbd7754c8f2bdf33ee0e00000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000009000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000000000000000000020edd286fa7d8544b79d9e8a3ec191602b32d0ee1316648eba56c3903cf324e9b00000000000000001000000000000000100000000000000202c95cca30e6a3964ec1d029cfe401ff1e3ebe84b1b151fd02a835412277c516a00000000000000010000000000000001000000000000002072a19f5940dcf756c5399fb0515736767a580459dd186a47274ed1642b39c5c000000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc4647900000000000000720000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000208de8f620a5fc399b5ecc2d43ea902931f71f9ae447700c2535c6a6f115938cde000000000000000100000000000000000000000000000020de9f046f1aad750186b57c9cfeacfa4e57ba177d31a0724e326df1e60afc15920000000000000001000000000000000100000000000000205af0c30301c2cebde85b26134fb68923a872af8613b7ede4104a7f3786c2e399000000000000000100000000000000010000000000000020e64a0b1e5bfa3cc13b42f1c94f8b754ddbc1ac5c7410d9e82bea6b20ba17c12d000000000000000100000000000000000000000000000020ff0e61f4a21c645f0a5fc8fc1d6204e2b2befec15e74ee679959788e62c2b7220000000000000001000000000000000000000000000000203f11b2fdafe389d4b4fba99881e3cf8e613dd21e28861c021036836c21d90e240000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000003200000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020869a859ad83c189942deb65c779868ea78a24f226849d17f6f7c75dc8094366d000000000000000100000000000000000000000000000020e5227b76320bb43e07aeca54708b074ddca560d8f5f10ba85577ff643ba11b48000000000000000100000000000000010000000000000020c8e48abe7707919d92a6c7ada60f64b5c9d5b1dc6b0c597a76fa4dde365b28790000000000000001000000000000000100000000000000204be907fa0033d260ddb828cd6bd1a2f16b4b7c8b78b9f3cb0f79a8c797e54c1100000000000000010000000000000000000000000000002039ead5b3ef03500baddf8be78b748f4ba57eeb8c385a3365cdae3ce2216dc965000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000012000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000001000000000000002056c62ecc4d2213c21068a2cdd186922392f41def2d327df33699a445258e5a780000000000000001000000000000000000000000000000200f5dd7c1922948c1439777ed0b491d1fa487cb063021a98b2df0412b70d5c4670000000000000001000000000000000100000000000000200a020532b9330815e1b068025d04ffb8ead304a30c535e98e92b157bab1b99b00000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000000f0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000209c248715b17e880946d47aa4058d59a9e664c930c34d52f5c241516595cedfb20000000000000001000000000000000000000000000000206849fbce696f1f582d99563aebb45d14dde4a1c6b49b743b8e9a01129807eec40000000000000001000000000000000000000000000000201aed8ecced497889326ef67a146e0204c4108f8085e91a939ef0543a35c0c5c000000000000000010000000000000000000000000000002025792043171cc4f0cd46bcdcb41991bddf423d2bf5a2d92b108cc43718a777c400000000000000010000000000000001000000000000002099055a5888504b4ed0efd5c8af2f74de5a3393c42b7bf782fc33893679ecf96d0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000000f00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000000000000000000202c67b8dd43e7c16379ebd0d0e7fe8695bb3152eff29f5761175f20a5b80839fe0000000000000001000000000000000000000000000000206b865f9ad9b586b35ea83fde83095ef4f15863dafb699beed1c2a42a45bf013e000000000000000100000000000000000000000000000020f702b28cbc382aed2634a1cc751d12e676d74a66fd98ce3e17dfc965f1d74ad10000000000000001000000000000000000000000000000209bdd6b7b6cb5c1ad04c3223eb734f02259a900dabfa2e5fbdf2c53f1ba29a89800000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000000f000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000000000000000000020b9e5ab5aeb2b43e65e0c8693fc28386fb06a6c997f398a642c95f88df7741ed6000000000000000100000000000000000000000000000020ee4272859658c2d7124d91bc6a4803ed75d25c5923efdc417f76a407c217f10b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000005a0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020563d891caf44e0e5830cf9749bcf785be1528da09496073b989d7fd1be4ed2ec0000000000000001000000000000000000000000000000201a78db441159e4de1508d5ed0e22f2f0794cd20bede4cbbced995d5ee52239ff000000000000000100000000000000010000000000000020fb8497c96e63b0dce651489de58a59d110992d4ef229862380f25c74cc429715000000000000000100000000000000000000000000000020a9662c874be7945649b98b9c81f465a508fe14539573b8c3fec3f2d611bf1e7c000000000000000100000000000000000000000000000020de6926c2b2c79f2370d45818ff9eb4d4547065c9f10f31f9416413a9a91e1b68000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000001a00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020ec19530ba3c8e532d436daf323283e3d1fcc9fa9b53cc67b9a249455e989fa3b00000000000000010000000000000000000000000000002071e1b34d4462f76c0df1694ec6f9b40f08cbaf8010ce392863ad7cff3ea79bde000000000000000100000000000000010000000000000020a406da53348c4c7e0239eb6a2fc7fdb8e52304f542b526606966b0a389120188000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001a000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020eea1b50ec40a1d88c2995fadbcd9f72a382913df10f4333fcb9be71e194fe87600000000000000010000000000000000000000000000002008f60556d73bb163220ae34d041b7dbe7733e8f9227c3af0a177a00b4b742bed000000000000000100000000000000010000000000000020c9de92c70724f2fa66cdd10cb0c2b9e1cc33e37ec8233a5650e23f84148402e000000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000002e0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020f995393982a1a00e8c52af6da1d39fc8d247269b546070e81ca680e4be2dd8860000000000000001000000000000000000000000000000205435cfed5b93e6ef62f4b72b7fc10a6f4c566bc09853e384793b3486bce087f50000000000000001000000000000000000000000000000207a98025427da3a2e44cfa149cc3f9191b0b1be4d884c0f9fea387a4f51769e3500000000000000010000000000000000000000000000002098a42ef655f9e2b2020ef1d59bae4b378804e09b92201707c9bafe56215bb37d000000000000000100000000000000010000000000000020f8a086bacd0b41568194a8a5696422282191bb07bd68b5fc1884372d5a87e710000000000000000100000000000000000000000000000020cd6e61cf43694efd95cda323b25b2d4aaee54a194dbfb5a42b32da586bc1fa680000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000002e00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020cbc3acb82e65ece3d9eecc2c0d5a423c5f8ee0939377bb7aaabdd6cea8a1f80e0000000000000001000000000000000000000000000000203012119f6499bb8adbe11342961e20660dc88752a608cff867148e2ca4498402000000000000000100000000000000000000000000000020a5a3a78d21fabb4c098c133a0e4cf00d903bbad62c9c916d47a3b6ebfdca2f680000000000000001000000000000000000000000000000209df67d6696a217d379788a570014872e39da29c1a327fbd7754c8f2bdf33ee0e00000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b000000000000000e000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020dd04ab9f83c6236e21306d40a1fb47fda70a351259a413be4247a8fc729d7bcb000000000000000100000000000000000000000000000020ee4272859658c2d7124d91bc6a4803ed75d25c5923efdc417f76a407c217f10b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc46479000000000000005c0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020474416b31e937b0f731c62dc9055a992b6997ff7f888f52fddbc8b7fa8208a0c00000000000000010000000000000001000000000000002038b1c75543428992f499c63c0f64a2962657c6532a4d8009908c01d2ac6078810000000000000001000000000000000000000000000000207d4963b5724ebf61b258f4970661899221da919a12138a2998c0ab92d4aea935000000000000000100000000000000000000000000000020a9662c874be7945649b98b9c81f465a508fe14539573b8c3fec3f2d611bf1e7c000000000000000100000000000000000000000000000020de6926c2b2c79f2370d45818ff9eb4d4547065c9f10f31f9416413a9a91e1b68000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000001c00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d48700000000000000060000000000000001000000000000000100000000000000201634c0f0337a12534f7a2b46e7f0c13d65c6d66882e2ce2ebf8f4da0eb0fa69d000000000000000100000000000000010000000000000020053fead031d6f530ead877c5775adf9f092d11b293da5580c027ccd0b0238273000000000000000100000000000000000000000000000020eef772e834ab948f74fe439b2765a904f6737992cd2a6c66e5b0a2076e78a0bf000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001c000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000208acaef2a5a512f2b783ce1db962701cf184ebb814600da20c7c0dde465b78e8e0000000000000001000000000000000100000000000000208d8faa056ddb0662b9699b4244eccc38910a8e83ed97e5d0d9a0a68b62c60226000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000230000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000000000000000000207b8ba165be5ab6fea302bb060f8adf5f3a4b56fb6bcd469b1580cdd7d1806f5900000000000000010000000000000000000000000000002086d22fbf42869ef478ec4797be93bbbdcfaaf203661b20797091ae826d9f8488000000000000000100000000000000010000000000000020e4637e60a830369d12bd5e240878b11dc6158cb775f69d6a5abeb1b75cff57b9000000000000000100000000000000010000000000000020d59beb50aed87de53804691d5b74758777567391095861dfa441a4787c37fab8000000000000000100000000000000010000000000000020f8a086bacd0b41568194a8a5696422282191bb07bd68b5fc1884372d5a87e710000000000000000100000000000000000000000000000020cd6e61cf43694efd95cda323b25b2d4aaee54a194dbfb5a42b32da586bc1fa680000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000002300000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000000000000000000020399da0b17ec864f5ff0a5b849a7134434c0f882db8cefb522c6d01e3a0f9ccfe000000000000000100000000000000000000000000000020198cb6817a75d5e897eed314bf956f062fa221a79c3c1d55716e70d69fa53a3c000000000000000100000000000000010000000000000020dcda586de071ee0cbb711d6baf80877c910becd3394981818fe235d70af5ab830000000000000001000000000000000100000000000000202f920dfb490f5730be959b8ee4207a1fbddfa14c6cd180ad99571d5efd70ac1000000000000000010000000000000001000000000000002039c7bbacb3b195fd96b8f1dcbf563bc14598dc6decf19beca1354343c60c51ce000000000000000100000000000000000000000000000020e1dffbeb542db104ce196a3d292995512e151764a713dfae161524e42791443b0000000000000003000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000000000000000000002084e999944751f08db324a339ed4ab115c054ba5873577cd1570f798131e6ac9b0000000000000001000000000000000000000000000000207c3b41e0459d429789bc86f01b4ed1339eb1ef45db1cebe9aaf7645752bfcfae0000000000000001000000000000000100000000000000207f6a4fb33bf8bfff5e59e759184fee41613d7717ee0492c3ad6399d0722993830000000000000001000000000000000100000000000000206d40fa545d5914d0673b52a7c1b477cd46d585972da343cacc3892f3bbfa7923000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc4647900000000000000540000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020ed2c59819375f748af482f68303d7e171fc16ec4c849ba99838a0e7d1337e4f7000000000000000100000000000000010000000000000020ae31e7d56865ba73361fab52429db2c86655fc720f15894c4caa0eabb96ddee9000000000000000100000000000000000000000000000020776b06a5acf790761f6240bf2c13f5d36e321443e8307f2636608749378b82df000000000000000100000000000000010000000000000020db0e023ec8d72c071ea8d995edc8f074b62fe7ea5d79f7f861578fc217f6c5b3000000000000000100000000000000000000000000000020de6926c2b2c79f2370d45818ff9eb4d4547065c9f10f31f9416413a9a91e1b68000000000000000100000000000000010000000000000020f7b2ca4db943ce00bdc52efca23a7b276b14e2f07b8f59b903ce1f04538c30650000000000000001000000000000000000000000000000208cd694b74ce1af9846da9590068d85c983646f7a712ec8ce838b5751ff39da7e000000000000001400000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020ab9d3efc17262d1a0de889df50c8d8e0c34fa8097386fcceb4f9786185c772730000000000000001000000000000000100000000000000209e28b5e71c8e4fbfcba667a5fcab5eccf8d9293468118f40284906b1c8d31b25000000000000000100000000000000000000000000000020fb410790acd5fdbf89d24f2ede1d32c95e8336f3583010cf24f41e2ac1fb39d60000000000000001000000000000000100000000000000201d3aa2233b91add56e9b89574fd69e12e9d23dec9dc72db6e6d0fe8d1bcd3d910000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000014000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020a0368e6257a2538a36867260471dcc6623e02133134066ddf5c41f0e10a3df950000000000000001000000000000000100000000000000206bdeec54f7dc5d17354cdb7530097a76052cd0bc590bb4caccfa6745607184c200000000000000010000000000000000000000000000002091a1a84e836796bff075a433deefbf7e25101832a3dfa8fe5085023a05c3bebe0000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000001e0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020b15b870f5863ab3bd204dc8d6d479d1c04e4e43a62c3af50c8d64ebfb053ae52000000000000000100000000000000000000000000000020fffe67ddb49f969a2fcf113bd2e7a7440b2f0c3b23e494a0539d2b632d20c8050000000000000001000000000000000000000000000000201ee3c6a81e72922427fb7143300c4ba2e6b17afef0c34ec5dd487b43943a0543000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001e00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000001000000000000002085a908a127f6b193f4ef9e5c74797bec786af9acedaf5d038e9451ec1c3d351f000000000000000100000000000000000000000000000020898fce017de36c56a496c2d075e9a3589b8a6c632cb9c88c17c616b9dedc60b8000000000000000100000000000000000000000000000020eef772e834ab948f74fe439b2765a904f6737992cd2a6c66e5b0a2076e78a0bf000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001e000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000207aa6510bda4e0ecaebc65c79eb393e806122e5528076754acddcaf9ddc391e4d00000000000000010000000000000000000000000000002041f935ee7b8e9d4e4c37487dbeefbea7b5a747f4dd17ce3b3d48d14596b4e72e000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad0600000000000000170000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020599d1bf380a068738c5999aa5c956a93ebcbde3a151eaace2f3b784d9585422b000000000000000100000000000000000000000000000020e7e34aadae33b44b777965a45b2d15cbd15069af0dcf0b26d33a838994dab5480000000000000001000000000000000000000000000000201c88b470940b086f3bcb2a9c1deb4fac39468f9d8c03e4ee2c93715bdfd36793000000000000000100000000000000010000000000000020439fe973303483577ecab19db8caf1eb316ab2a99e8f21e89acb06368d44beef0000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001700000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d487000000000000000600000000000000010000000000000000000000000000002086889ddc8d9e4979bfa600b5cd027847947a35aade48ff618e5f592a65b83289000000000000000100000000000000000000000000000020fa8c57349cd8e988761c9bf04624f98d40aad1258694ef86a33a29ef41f3336a000000000000000100000000000000000000000000000020fb410790acd5fdbf89d24f2ede1d32c95e8336f3583010cf24f41e2ac1fb39d60000000000000001000000000000000100000000000000201d3aa2233b91add56e9b89574fd69e12e9d23dec9dc72db6e6d0fe8d1bcd3d910000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff0000000000000017000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c000000000000000500000000000000010000000000000000000000000000002092eb996e80537dc31c88663e3f823c2c8b62d2eb287accdc28b3729d0703df6000000000000000010000000000000000000000000000002093c2f58026d47aa6bd82686021e20b129925139433f046168b00a8775db238be00000000000000010000000000000000000000000000002091a1a84e836796bff075a433deefbf7e25101832a3dfa8fe5085023a05c3bebe0000000000000001000000000000000100000000000000204416ff43eecbe10f2bf44eb13e02cf951c3da99d4488c99e7e0f7dd3d90cafce000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000001f0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000000000000000000020b57bf905c639a799c9fbf01da746c6854e9da77de76bbe6186df70a1ef95ba70000000000000000100000000000000000000000000000020fffe67ddb49f969a2fcf113bd2e7a7440b2f0c3b23e494a0539d2b632d20c8050000000000000001000000000000000000000000000000201ee3c6a81e72922427fb7143300c4ba2e6b17afef0c34ec5dd487b43943a0543000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001f00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000000000000000000020284325469dc675e0360ae715af1f9f4aa4951a0b1c1d8ed3c65da0fefa16f680000000000000000100000000000000000000000000000020898fce017de36c56a496c2d075e9a3589b8a6c632cb9c88c17c616b9dedc60b8000000000000000100000000000000000000000000000020eef772e834ab948f74fe439b2765a904f6737992cd2a6c66e5b0a2076e78a0bf000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001f000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000000000000000000203d459898e5917fe5627848ee6da9448d8b05360947d45e408293e71f0c38578f00000000000000010000000000000000000000000000002041f935ee7b8e9d4e4c37487dbeefbea7b5a747f4dd17ce3b3d48d14596b4e72e000000000000000100000000000000000000000000000020929d0189eb8b3e306cd93f3be03855fe5bd6e6618a882ced8479cadca3ef7fc400000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000001a0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e630000000000000007000000000000000100000000000000010000000000000020ac0f55a69aa7de6bf0e578dd3801650bad210e2414984e08b18ac61c5df4860000000000000000010000000000000000000000000000002028341ede75d2ef06bfe13bbeee6b5c35cbc0fd8322130f5aeb56b5cf32c584e5000000000000000100000000000000010000000000000020360de1e1fe41da256567e19a623d1143bf34f8300179317f0ee23637a1496984000000000000000100000000000000000000000000000020fe36a11a026c432e51bf4e8eb77ee04bbc9dff00ae0bc5d532be95b91d484e860000000000000001000000000000000000000000000000205557e212321aacbd26740638259e16cc5103b3432956c5bb69ad2b6e2503392a0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000001a00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020ec19530ba3c8e532d436daf323283e3d1fcc9fa9b53cc67b9a249455e989fa3b00000000000000010000000000000000000000000000002071e1b34d4462f76c0df1694ec6f9b40f08cbaf8010ce392863ad7cff3ea79bde000000000000000100000000000000010000000000000020a406da53348c4c7e0239eb6a2fc7fdb8e52304f542b526606966b0a389120188000000000000000100000000000000000000000000000020419f3dc9d443c3df07838567fe3d290c6219bd356f3f46dba8090b9d8565cffc0000000000000001000000000000000000000000000000209dedd3c8d9111eaae6e346a23db97436b0f402a56e62edef9a21f054f1fd2b45000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000001a000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c0000000000000005000000000000000100000000000000010000000000000020eea1b50ec40a1d88c2995fadbcd9f72a382913df10f4333fcb9be71e194fe87600000000000000010000000000000000000000000000002008f60556d73bb163220ae34d041b7dbe7733e8f9227c3af0a177a00b4b742bed000000000000000100000000000000010000000000000020c9de92c70724f2fa66cdd10cb0c2b9e1cc33e37ec8233a5650e23f84148402e000000000000000010000000000000000000000000000002019437050708dd830be222646c89d46c2eb36070ff99c92acce71ffd5b0b44384000000000000000100000000000000000000000000000020be2083ebcb8e5eb87e562bf062e6d215cfaa4997eac6f483f15c4fd871ecad06000000000000000c0000000000000020e9585d034cb679e41ed017aca9f733e1453b98feffff268ef67b10a4d9cd8e6300000000000000070000000000000001000000000000000100000000000000203d67e891d44f5cecad2331b37af621f439ca5bd2342dea8efd59ba26287c040f00000000000000010000000000000001000000000000002042877b2cba3d1570bb3b50091755de23f1d7444ec6b12b83dd73760da9b3988e0000000000000001000000000000000000000000000000201aed8ecced497889326ef67a146e0204c4108f8085e91a939ef0543a35c0c5c000000000000000010000000000000000000000000000002025792043171cc4f0cd46bcdcb41991bddf423d2bf5a2d92b108cc43718a777c400000000000000010000000000000001000000000000002099055a5888504b4ed0efd5c8af2f74de5a3393c42b7bf782fc33893679ecf96d0000000000000001000000000000000100000000000000209e3bb8ee3ce9ff666177b27136fed42cb363c7cabe90e5215830e9c88727e55c0000000000000001000000000000000100000000000000205a63b79d9bdc6f6ef6fa02370ddf7cd533cf9028f080c1b673f8c0c8a7756d3e000000000000000c00000000000000208ef370db3cb27007677913d01c918d47ae91cfb8b23d3de351487fcbd560d4870000000000000006000000000000000100000000000000010000000000000020048f22f5e9be99ff08bee5e1d9d4a515b0bc8c5b236ebdc52ec29ef7cd77be530000000000000001000000000000000100000000000000209cc3cf496fe8ce5bc784e21b86b497b39c543f22ebf57bce4bc41da1ee5d9ed1000000000000000100000000000000000000000000000020f702b28cbc382aed2634a1cc751d12e676d74a66fd98ce3e17dfc965f1d74ad10000000000000001000000000000000000000000000000209bdd6b7b6cb5c1ad04c3223eb734f02259a900dabfa2e5fbdf2c53f1ba29a89800000000000000010000000000000001000000000000002006fce0ce3069ee6294018d140a01041f6b9e176142ef829c02e133dfe9b2de34000000000000000100000000000000010000000000000020fff772654f3af7c8f9c95d786737ebccc3ae1e9ae47307a5594181b3b08695ff000000000000000c000000000000002041acf452f2cfcc262df4243c0ecc2e0530739ed713cdca7308187408ac9e7d9c00000000000000050000000000000001000000000000000100000000000000209f7120f23a7dc936ece89768acd7a10948b7f8e3a3c79e9d7cf32e35b63c0388000000000000000100000000000000010000000000000020f12525946b31c3188fc50cee9b7544de3bf4b598d9b9e0dd535b10a78d0bb27b000000000000000100000000000000000000000000000020644e758401b5e0e7263e1ceadaa1172bbfbec88158f44db196a188aacda03e6600000000000000010000000000000000000000000000002085c13800d5031086d1af1e59d5969748b38b9482fe9db3f8607940e29d5568b3000000000000000100000000000000010000000000000020e5d3c6a76342fcad913e816a80c0ef42f59c71a5881bb0b5b21cb0d97dc4647900000000000000020be8da3d719afa8958d36473320cf81fb4f6004ea77570ffec5745379d2a137e24953dd5c699c9959489f849fa0ebf06f0b971c60d754e3cd098754a227fc0d46b8c13a7 \ No newline at end of file diff --git a/contracts/zkllvm/circuit2/commitment.sol b/contracts/zkllvm/circuit2/commitment.sol new file mode 100644 index 0000000..ecb2969 --- /dev/null +++ b/contracts/zkllvm/circuit2/commitment.sol @@ -0,0 +1,635 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_commitment.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../containers/merkle_verifier.sol"; +import "../../algebra/polynomial.sol"; +import "hardhat/console.sol"; + +library modular_commitment_scheme_circuit2 { + uint256 constant modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513; + uint64 constant batches_num = 4; + uint256 constant r = 3; + uint256 constant lambda = 1; + uint256 constant D0_size = 256; + uint256 constant max_degree = 15; + uint256 constant D0_omega = 36007022166693598376559747923784822035233416720563672082740011604939309541707; + uint256 constant unique_points = 5; + uint256 constant permutation_point = 3; + uint256 constant quotient_point = 1; + uint256 constant lookup_point = 0; + bytes constant points_ids = hex"02020202020202020404020200010101"; + uint256 constant omega = 14788168760825820622209131888203028446852016562542525606630160374691593895118; + uint256 constant _etha = 12217208067492249031102872072655908974751031861422067257283053495957748658893; + + struct commitment_state{ + bytes leaf_data; + uint256 roots_offset; + uint256 initial_data_offset; + uint256 initial_proof_offset; + uint256 round_proof_offset; + uint256 round_data_offset; + uint256[r] alphas; + uint64[batches_num] batch_sizes; + uint64 poly_num; + uint256 points_num; + uint256 theta; + uint256 x_index; + uint256 x; + uint256 max_batch; + uint256 domain_size; + uint256[] final_polynomial; + uint256 leaf_length; + uint256[][unique_points] denominators; + uint256[unique_points] factors; + uint256[][unique_points] combined_U; + uint256[][unique_points] unique_eval_points; + uint256[2] y; + uint256 j; + uint256 offset; + } + + function calculate_2points_interpolation(uint256[] memory xi, uint256[2] memory z) + internal pure returns(uint256[2] memory U){ +// require( xi.length == 2 ); +unchecked { + U[0] = addmod(mulmod(z[0], xi[1], modulus),modulus - mulmod(z[1], xi[0], modulus), modulus); + U[1] = addmod(z[1], modulus - z[0], modulus); +} + } + +// coeffs for zs on each degree can be precomputed if necessary + function calculate_3points_interpolation(uint256[] memory xi, uint256[3] memory z) + internal pure returns(uint256[3] memory U){ +// require( xi.length == 3 ); +unchecked { + z[0] = mulmod(z[0], addmod(xi[1], modulus - xi[2], modulus), modulus); + z[1] = mulmod(z[1], addmod(xi[2], modulus - xi[0], modulus), modulus); + z[2] = mulmod(z[2], addmod(xi[0], modulus - xi[1], modulus), modulus); + + U[0] = mulmod(z[0], mulmod(xi[1], xi[2], modulus), modulus); + U[0] = addmod(U[0], mulmod(z[1], mulmod(xi[0], xi[2], modulus), modulus), modulus); + U[0] = addmod(U[0], mulmod(z[2], mulmod(xi[0], xi[1], modulus), modulus), modulus); + + U[1] = modulus - mulmod(z[0], addmod(xi[1], xi[2], modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[1], addmod(xi[0], xi[2], modulus), modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[2], addmod(xi[0], xi[1], modulus), modulus), modulus); + + U[2] = addmod(z[0], addmod(z[1], z[2], modulus), modulus); +} + } + + function prepare_eval_points(uint256[][unique_points] memory result, uint256 xi) internal view { + uint256 inversed_omega = field.inverse_static(omega, modulus); + result[0] = new uint256[](2); + result[0][0] = mulmod(xi, inversed_omega, modulus); + result[0][1] = xi; + result[1] = new uint256[](1); + result[1][0] = xi; + result[2] = new uint256[](2); + result[2][0] = xi; + result[2][1] = _etha; + result[3] = new uint256[](2); + result[3][0] = xi; + result[3][1] = mulmod(xi, omega, modulus); + result[4] = new uint256[](3); + result[4][0] = xi; + result[4][1] = mulmod(xi, omega, modulus); + result[4][2] = _etha; + + } + + function prepare_U_V(bytes calldata blob, commitment_state memory state, uint256 xi) internal view returns(bool result){ + +unchecked { + result = true; + uint64 ind = 0; + prepare_eval_points(state.unique_eval_points, xi); + // Prepare denominators + for( ind = 0; ind < state.unique_eval_points.length;){ + state.denominators[ind] = new uint256[](state.unique_eval_points[ind].length + 1); + if( state.unique_eval_points[ind].length == 1 ){ + state.factors[ind] = 1; + state.denominators[ind][0] = modulus - state.unique_eval_points[ind][0]; + state.denominators[ind][1] = 1; + } else + if( state.unique_eval_points[ind].length == 2 ){ + // xi1 - xi0 + state.factors[ind] = + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][0], modulus); + state.denominators[ind][2] = 1; + + state.denominators[ind][1] = + modulus - addmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + + state.denominators[ind][0] = + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + } else + if( state.unique_eval_points[ind].length == 3 ){ + state.factors[ind] = modulus - + mulmod( + mulmod( + addmod(state.unique_eval_points[ind][0], modulus - state.unique_eval_points[ind][1], modulus), + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][2], modulus), + modulus + ), + addmod(state.unique_eval_points[ind][2], modulus - state.unique_eval_points[ind][0], modulus), + modulus + ); + state.denominators[ind][3] = 1; + state.denominators[ind][2] = + modulus - addmod( + state.unique_eval_points[ind][0], + addmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][1] = + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus), + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][2], modulus), + mulmod(state.unique_eval_points[ind][1], state.unique_eval_points[ind][2], modulus), + modulus + ), + modulus + ); + state.denominators[ind][0] = + modulus - mulmod( + state.unique_eval_points[ind][0], + mulmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + state.denominators[ind][3] = mulmod(state.denominators[ind][3], state.factors[ind], modulus); + } else { + console.log("UNPROCESSED number of evaluation points"); + return false; + } + ind++; + } + + // Prepare combined U + for( uint256 ind = 0; ind < unique_points;){ + uint256[] memory point = state.unique_eval_points[ind]; + state.combined_U[ind] = new uint256[](state.unique_eval_points[ind].length); + uint64 cur = 0; + uint256 offset = 0x8; + for( uint256 k = 0; k < batches_num;){ + for( uint256 i = 0; i < state.batch_sizes[k];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(k == 2) cur_point = permutation_point; + else if(k == 3) cur_point = quotient_point; + else if(k == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + polynomial.multiply_poly_on_coeff( + state.combined_U[ind], + state.theta, + modulus + ); + if( cur_point == ind ){ + if( point.length == 1 ){ + state.combined_U[ind][0] = addmod( + state.combined_U[ind][0], + basic_marshalling.get_uint256_be(blob, offset), + modulus + ); + } else + if( point.length == 2 ){ + uint256[2] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp = calculate_2points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + } else + if( point.length == 3){ + uint256[3] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp[2] = basic_marshalling.get_uint256_be(blob, offset + 0x40); + tmp = calculate_3points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + state.combined_U[ind][2] = addmod(state.combined_U[ind][2], tmp[2], modulus); + } else { + return false; + } + } + offset += state.unique_eval_points[cur_point].length * 0x20; + i++;cur++; + } + k++; + } + ind++; + } +} + } + + function compute_combined_Q(bytes calldata blob,commitment_state memory state) internal view returns(uint256[2] memory y){ + +unchecked { + uint256[2][unique_points] memory values; + { + uint256 offset = state.initial_data_offset - state.poly_num * 0x40; // Save initial data offset for future use; + uint256 cur = 0; + for(uint256 b = 0; b < batches_num;){ + for(uint256 j = 0; j < state.batch_sizes[b];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(b == 2) cur_point = permutation_point; + else if(b == 3) cur_point = quotient_point; + else if(b == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + for(uint256 k = 0; k < unique_points; ){ + values[k][0] = mulmod(values[k][0], state.theta, modulus); + values[k][1] = mulmod(values[k][1], state.theta, modulus); + k++; + } + + values[cur_point][0] = addmod(values[cur_point][0], basic_marshalling.get_uint256_be(blob, offset), modulus); + values[cur_point][1] = addmod(values[cur_point][1], basic_marshalling.get_uint256_be(blob, offset + 0x20), modulus); + offset += 0x40;j++; cur++; + } + b++; + } + } + for(uint256 p = 0; p < unique_points; ){ + uint256[2] memory tmp = values[p]; + tmp[0] = mulmod(tmp[0], state.factors[p], modulus); + tmp[1] = mulmod(tmp[1], state.factors[p], modulus); + uint256 s = state.x; + tmp[0] = addmod(tmp[0], modulus - polynomial.evaluate(state.combined_U[p], s , modulus), modulus); + tmp[1] = addmod(tmp[1], modulus - polynomial.evaluate(state.combined_U[p], modulus - s, modulus), modulus); + tmp[0] = mulmod(tmp[0], field.inverse_static(polynomial.evaluate(state.denominators[p], s, modulus), modulus), modulus); + tmp[1] = mulmod(tmp[1], field.inverse_static(polynomial.evaluate(state.denominators[p], modulus - s, modulus), modulus), modulus); + y[0] = addmod(y[0], tmp[0], modulus); + y[1] = addmod(y[1], tmp[1], modulus); + p++; + } +} + } + + function initialize( + bytes32 tr_state_before + ) internal returns(bytes32 tr_state_after){ + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + uint256 etha = transcript.get_field_challenge(tr_state, modulus); + require(etha == _etha, "Wrong etha"); + tr_state_after = tr_state.current_challenge; + } + + function copy_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + c + ) + mstore( + add(leaf, 0x40), + d + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_reverted_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + d + ) + mstore( + add(leaf, 0x40), + c + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool b){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, offset)) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function copy_reverted_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, offset)) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function colinear_check(uint256 x, uint256[2] memory y, uint256 alpha, uint256 colinear_value) internal pure returns(bool){ + +unchecked { + uint256 tmp; + tmp = addmod(y[0], y[1], modulus); + tmp = mulmod(tmp, x, modulus); + tmp = addmod( + tmp, + mulmod( + alpha, + addmod(y[0], modulus-y[1], modulus), + modulus + ), + modulus + ); + uint256 tmp1 = mulmod(colinear_value , 2, modulus); + tmp1 = mulmod(tmp1 , x, modulus); + if( tmp != tmp1 ){ + console.log("Colinear check failed"); + return false; + } + return true; +} + } + + function verify_eval( + bytes calldata blob, + uint256[5] memory commitments, + uint256 challenge, + bytes32 transcript_state + ) internal view returns (bool){ + +unchecked { + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + commitment_state memory state; + + { + uint256 poly_at_eta; + /* 1 - 2*permutation_size */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 40);// 0 + if(poly_at_eta != 0x1b02b1d914ea72056989679d7826ca1f9adbc9880002cf6daffb7f1fa3b332cd) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x68);// 0x1 + if(poly_at_eta != 0x4925359c68cba0ddaf87fd463f6daed7e844deb500155000cfe079de79e6639a) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xa8);// 0x2 + if(poly_at_eta != 0x304dd9fa371b70eeffd08ccb957867d20aeb86e7009bc009af235519554cb932) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xe8);// 0x3 + if(poly_at_eta != 0x6a45a7312e851bf898402981030726b3a4f5684b04458845c9f753b35519105c) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x128);// 0x4 + if(poly_at_eta != 0x1b02b1d914ea72056989679d7826ca1f9adbc9880002cf6daffb7f1fa3b332cd) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x168);// 0x5 + if(poly_at_eta != 0x3d9bd931d08eee60195862ede438d303f80e10fc9093f2a0920d1f3d2bed12c9) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1a8);// 0x6 + if(poly_at_eta != 0x5d118568c35ccff0c8e14aeb77fcd0a05ba585f78d646348b66c554b10625e60) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1e8);// 0x7 + if(poly_at_eta != 0x3a68771f10abc9d88dbdf7ce531cd3044141f573048011fdb1b76e4ec34435a6) return false; + /* 2 - special selectors */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x248);// 0x8 + if(poly_at_eta != 0x3f1b4adcabfaa14cf2ee7ec3990f58d91ae75bfaaefe1327313d89eb23baf96f) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2a8);// 0x9 + if(poly_at_eta != 0x662761bdeda7376d374c58b68475ecfa30064120c27daa97edfbda94eecaeaff) return false; + /* 3 - constant columns */ + /* 4 - selector columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2e8);// 0xa + if(poly_at_eta != 0x369369e984155e5f975bd41103c801ea569e500244152d768985604be0800b06) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x328);// 0xb + if(poly_at_eta != 0x3cd3d24de7686966f8fa3577ea539d516c0a16d46d0e2c283db58b157952ca53) return false; + } + + + { + uint256 offset; + + if (challenge!= transcript.get_field_challenge(tr_state, modulus)) return false; + + for(uint8 i = 0; i < batches_num;){ + transcript.update_transcript_b32(tr_state, bytes32(commitments[i])); + i++; + } + state.theta = transcript.get_field_challenge(tr_state, modulus); + + state.points_num = basic_marshalling.get_length(blob, 0x0); + offset = 0x8 + state.points_num*0x20 + 0x8; + for(uint8 i = 0; i < batches_num;){ + state.batch_sizes[i] = uint64(uint8(blob[offset + 0x1])); + if( state.batch_sizes[i] > state.max_batch ) state.max_batch = state.batch_sizes[i]; + state.poly_num += state.batch_sizes[i]; + i++; offset +=2; + } + + offset += 0x8; + offset += state.poly_num; + state.roots_offset = offset + 0x8; + offset += 0x8; + + for( uint8 i = 0; i < r;){ + transcript.update_transcript_b32(tr_state, bytes32(basic_marshalling.get_uint256_be(blob, offset + 0x8))); + state.alphas[i] = transcript.get_field_challenge(tr_state, modulus); + i++; offset +=40; + } + + + + offset += 0x8 + r; + state.initial_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + + state.round_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + offset += 0x8; + + state.initial_proof_offset = offset; + for(uint8 i = 0; i < lambda;){ + for(uint j = 0; j < batches_num;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != commitments[j] ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + offset += 0x8; + state.round_proof_offset = offset; + + for(uint256 i = 0; i < lambda;){ + for(uint256 j = 0; j < r;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != basic_marshalling.get_uint256_be(blob, state.roots_offset + j * 40 + 0x8) ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + + state.final_polynomial = new uint256[](basic_marshalling.get_length(blob, offset)); + offset += 0x8; + for (uint256 i = 0; i < state.final_polynomial.length;) { + state.final_polynomial[i] = basic_marshalling.get_uint256_be(blob, offset); + i++; offset+=0x20; + } + } + if( state.final_polynomial.length > (( 1 << (field.log2(max_degree + 1) - r + 1) ) ) ){ + console.log("Wrong final poly degree"); + return false; + } + + if( !prepare_U_V(blob, state, challenge) ) return false; + + state.leaf_data = new bytes(state.max_batch * 0x40 + 0x40); + for(uint256 i = 0; i < lambda;){ + // Initial proofs + state.x_index = uint256(transcript.get_integral_challenge_be(tr_state, 8)) % D0_size; + state.x = field.pow_small(D0_omega, state.x_index, modulus); + state.domain_size = D0_size >> 1; + for(uint256 j = 0; j < batches_num;){ + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } + state.leaf_length = state.batch_sizes[j] * 0x40; + state.initial_data_offset += state.batch_sizes[j] * 0x40; + state.initial_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.initial_proof_offset); + j++; + } + { + state.y = compute_combined_Q(blob, state); + if( state.x_index < state.domain_size ){ + if( !copy_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + }else{ + if( !copy_reverted_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + } + } + if( !colinear_check(state.x, state.y, state.alphas[0], basic_marshalling.get_uint256_be(blob,state.round_data_offset)) ){ + console.log("Colinear check failed"); + return false; + } + + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + for(state.j = 1; state.j < r;){ + state.x_index %= state.domain_size; + state.x = mulmod(state.x, state.x, modulus); + state.domain_size >>= 1; + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } + state.y[0] = basic_marshalling.get_uint256_be(blob, state.round_data_offset); + state.y[1] = basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20); + if( !colinear_check(state.x, state.y, state.alphas[state.j], basic_marshalling.get_uint256_be(blob,state.round_data_offset + 0x40)) ){ + console.log("Round colinear check failed"); + return false; + } + state.j++; state.round_data_offset += 0x40; + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + } + + state.x = mulmod(state.x, state.x, modulus); + if(polynomial.evaluate(state.final_polynomial, state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset)) { + console.log("Wrong final poly check"); + return false; + } + if(polynomial.evaluate(state.final_polynomial, modulus - state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20)){ + console.log("Wrong final poly check"); + return false; + } + state.round_data_offset += 0x40; + + i++; + } + return true; +} + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit2/gate_argument.sol b/contracts/zkllvm/circuit2/gate_argument.sol new file mode 100644 index 0000000..e5aa99d --- /dev/null +++ b/contracts/zkllvm/circuit2/gate_argument.sol @@ -0,0 +1,76 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_gate_argument.sol"; +import "hardhat/console.sol"; + + +contract modular_gate_argument_circuit2 is IGateArgument{ + uint256 constant modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513; + + // Append commitments + function verify( + bytes calldata blob, + uint256 theta + ) external view returns (uint256 F){ + uint256 theta_acc = 1; + uint256 eval; + uint256 x; + + uint256 prod; + uint256 sum; + uint256 gate; +// gate === 0 === + gate = 0; +// constraint 0 + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 224); + prod = mulmod(prod, 52435875175126190479447740508185965837690552500527637822603658699938581184512, modulus); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 192); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 160); + sum = addmod(sum, prod, modulus); + sum = mulmod(sum, theta_acc, modulus); + theta_acc = mulmod(theta, theta_acc, modulus); + gate = addmod(gate, sum, modulus); + gate = mulmod(gate, basic_marshalling.get_uint256_be(blob, 0), modulus); + F = addmod(F, gate, modulus); +// gate === 1 === + gate = 0; +// constraint 0 + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 128); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 224); + prod = mulmod(prod, 52435875175126190479447740508185965837690552500527637822603658699938581184512, modulus); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 160); + prod = mulmod(prod, basic_marshalling.get_uint256_be(blob, 192), modulus); + sum = addmod(sum, prod, modulus); + sum = mulmod(sum, theta_acc, modulus); + theta_acc = mulmod(theta, theta_acc, modulus); + gate = addmod(gate, sum, modulus); + gate = mulmod(gate, basic_marshalling.get_uint256_be(blob, 64), modulus); + F = addmod(F, gate, modulus); + + } +} \ No newline at end of file diff --git a/contracts/zkllvm/circuit2/input.json b/contracts/zkllvm/circuit2/input.json new file mode 100644 index 0000000..d7c12ac --- /dev/null +++ b/contracts/zkllvm/circuit2/input.json @@ -0,0 +1,5 @@ +[ + {"field": 49052524384703870792430850605823211740010368752655030397570455698676404652716 }, + {"field": 0 }, + {"field": 1 } +] \ No newline at end of file diff --git a/contracts/zkllvm/circuit2/lookup_argument.sol b/contracts/zkllvm/circuit2/lookup_argument.sol new file mode 100644 index 0000000..e4233b1 --- /dev/null +++ b/contracts/zkllvm/circuit2/lookup_argument.sol @@ -0,0 +1,22 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the +// License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +library modular_lookup_argument_circuit2{ +} diff --git a/contracts/zkllvm/circuit2/modular_verifier.sol b/contracts/zkllvm/circuit2/modular_verifier.sol new file mode 100644 index 0000000..8fcdd4c --- /dev/null +++ b/contracts/zkllvm/circuit2/modular_verifier.sol @@ -0,0 +1,246 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_verifier.sol"; +import "./commitment.sol"; +import "./gate_argument.sol"; +import "./lookup_argument.sol"; +import "./permutation_argument.sol"; +import "hardhat/console.sol"; +import "../../algebra/field.sol"; + +contract modular_verifier_circuit2 is IModularVerifier{ + uint256 constant modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513; + bool constant use_lookups = false; + bytes32 constant vk1 = bytes32(0x1154d6227897bca2848e9f5cb8eb7319c4c9f132830e93634656ba8282263a78); + bytes32 constant vk2 = bytes32(0xb024bd12fb5b07a167bc8a510f274a06946eac1240e823dd682ec71d18e04b4e); + bytes32 transcript_state; + address _gate_argument_address; + address _permutation_argument_address; + address _lookup_argument_address; + address _commitment_contract_address; + uint64 constant sorted_columns = 0; + uint64 constant f_parts = 8; // Individually on parts + uint64 constant z_offset = 0xa1; + uint64 constant table_offset = z_offset + 0x80 * 4 + 0xc0; + uint64 constant table_end_offset = table_offset + 288; + uint64 constant quotient_offset = 352; + uint64 constant rows_amount = 16; + uint256 constant omega = 14788168760825820622209131888203028446852016562542525606630160374691593895118; + uint256 constant special_selectors_offset = z_offset + 4 * 0x80; + + function initialize( +// address permutation_argument_address, + address lookup_argument_address, + address gate_argument_address, + address commitment_contract_address + ) public{ + types.transcript_data memory tr_state; + transcript.init_transcript(tr_state, hex""); + transcript.update_transcript_b32(tr_state, vk1); + transcript.update_transcript_b32(tr_state, vk2); + +// _permutation_argument_address = permutation_argument_address; + _lookup_argument_address = lookup_argument_address; + _gate_argument_address = gate_argument_address; + _commitment_contract_address = commitment_contract_address; + +// ICommitmentScheme commitment_scheme = ICommitmentScheme(commitment_contract_address); +// tr_state.current_challenge = commitment_scheme.initialize(tr_state.current_challenge); + tr_state.current_challenge = modular_commitment_scheme_circuit2.initialize(tr_state.current_challenge); + transcript_state = tr_state.current_challenge; + } + + struct verifier_state{ + uint256 xi; + uint256 Z_at_xi; + uint256 l0; + uint256[f_parts] F; + uint256 gas; + bool b; + } + + // Public input columns + function public_input_direct(bytes calldata blob, uint256[] calldata public_input, verifier_state memory state) internal view + returns (bool check){ + check = true; + + uint256 result = 0; + uint256 Omega = 1; + + for(uint256 i = 0; i < public_input.length;){ + if( public_input[i] != 0){ + uint256 L = mulmod( + Omega, + field.inverse_static( + addmod(state.xi, modulus - Omega, modulus), + modulus + ), + modulus + ); + + result = addmod( + result, + mulmod( + public_input[i], L, modulus + ), + modulus + ); + } + Omega = mulmod(Omega, omega, modulus); + unchecked{i++;} + } + result = mulmod( + result, addmod(field.pow_small(state.xi, rows_amount, modulus), modulus - 1, modulus), modulus + ); + result = mulmod(result, field.inverse_static(rows_amount, modulus), modulus); + + // Input is proof_map.eval_proof_combined_value_offset + if( result != basic_marshalling.get_uint256_be( + blob, 256 + )) check = false; + } + + function verify( + bytes calldata blob, + uint256[] calldata public_input + ) public view returns (bool result) { + verifier_state memory state; + state.b = true; + state.gas = gasleft(); + state.xi = basic_marshalling.get_uint256_be(blob, 0x79); + state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus); + state.l0 = mulmod( + state.Z_at_xi, + field.inverse_static(mulmod(addmod(state.xi, modulus - 1, modulus), rows_amount, modulus), modulus), + modulus + ); + + //0. Direct public input check + if(public_input.length > 0) { + if (!public_input_direct(blob[865:865+352], public_input, state)) { + console.log("Wrong public input!"); + state.b = false; + } + } + + //1. Init transcript + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + + { + //2. Push variable_values commitment to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x9); + + //3. Permutation argument + uint256[3] memory permutation_argument = modular_permutation_argument_circuit2.verify( + blob[0xa1:865+352], + transcript.get_field_challenge(tr_state, modulus), + transcript.get_field_challenge(tr_state, modulus), + state.l0 + ); + state.F[0] = permutation_argument[0]; + state.F[1] = permutation_argument[1]; + state.F[2] = permutation_argument[2]; + } + + //4. Lookup library call + //No lookups + + //5. Push permutation batch to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x31); + + { + //6. Gate argument + IGateArgument modular_gate_argument = IGateArgument(_gate_argument_address); + state.F[7] = modular_gate_argument.verify(blob[table_offset:table_end_offset], transcript.get_field_challenge(tr_state, modulus)); + state.F[7] = mulmod( + state.F[7], + addmod( + 1, + modulus - addmod( + basic_marshalling.get_uint256_be(blob, special_selectors_offset), + basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), + modulus + ), + modulus + ), + modulus + ); + } + + // No public input gate + + uint256 F_consolidated; + { + //7. Push quotient to transcript + for( uint8 i = 0; i < f_parts;){ + F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus); + unchecked{i++;} + } + uint256 points_num = basic_marshalling.get_length(blob, 0x79 + 0x20); + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59); + } + + //8. Commitment scheme verify_eval + { +// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address); + uint256[5] memory commitments; + commitments[0] = uint256(vk2); + for(uint16 i = 1; i < 4;){ + commitments[i] = basic_marshalling.get_uint256_be(blob, 0x9 + (i-1)*(0x28)); + unchecked{i++;} + } + if(!modular_commitment_scheme_circuit2.verify_eval( + blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge + )) { + console.log("Error from commitment scheme!"); + state.b = false; + } + } + + //9. Final check + { + uint256 T_consolidated; + uint256 factor = 1; + for(uint64 i = 0; i < uint64(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf]));){ + T_consolidated = addmod( + T_consolidated, + mulmod(basic_marshalling.get_uint256_be(blob, table_offset + quotient_offset + i *0x20), factor, modulus), + modulus + ); + factor = mulmod(factor, state.Z_at_xi + 1, modulus); + unchecked{i++;} + } + if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) { + console.log("Error. Table does't satisfy constraint system"); + state.b = false; + } + if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!"); + } + + console.log("Gas for verification:", state.gas-gasleft()); + result = state.b; + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit2/params.json b/contracts/zkllvm/circuit2/params.json new file mode 100644 index 0000000..c807d9a --- /dev/null +++ b/contracts/zkllvm/circuit2/params.json @@ -0,0 +1,52 @@ +{ + "test_name": "circuit2", + "modulus": "52435875175126190479447740508185965837690552500527637822603658699938581184513", + "rows_amount": "16", + "usable_rows_amount": "13", + "omega": "14788168760825820622209131888203028446852016562542525606630160374691593895118", + "verification_key": "1154d6227897bca2848e9f5cb8eb7319c4c9f132830e93634656ba8282263a78 b024bd12fb5b07a167bc8a510f274a06946eac1240e823dd682ec71d18e04b4e", + "ar_params": [ + "3", + "1", + "0", + "3" + ], + "columns_rotations_node": [ + [ + "-1", + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0" + ] + ], + "commitment_params_node": { + "type": "LPC", + "r": "3", + "m": "2", + "lambda": "1", + "max_degree": "15", + "step_list": [ + "1", + "1", + "1" + ], + "D_omegas": [ + "36007022166693598376559747923784822035233416720563672082740011604939309541707", + "47309214877430199588914062438791732591241783999377560080318349803002842391998", + "31519469946562159605140591558550197856588417350474800936898404023113662197331" + ] + } +} diff --git a/contracts/zkllvm/circuit2/permutation_argument.sol b/contracts/zkllvm/circuit2/permutation_argument.sol new file mode 100644 index 0000000..81afedf --- /dev/null +++ b/contracts/zkllvm/circuit2/permutation_argument.sol @@ -0,0 +1,93 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "hardhat/console.sol"; + +library modular_permutation_argument_circuit2{ + uint256 constant modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513; + uint256 constant permutation_size = 4; + uint256 constant special_selectors_offset = 4 * 0x80; + uint256 constant table_values_offset = 4 * 0x80 + 0xc0; + bytes constant zero_indices = hex"00a000c000e0010000000040"; + + function uint16_from_two_bytes(bytes1 b1, bytes1 b2) internal pure returns( uint256 result){ + unchecked{ + result = uint8(b1); + result = result << 8; + result += uint8(b2); + } + } + + // Append commitments + function verify( + bytes calldata blob, + uint256 beta, + uint256 gamma, + uint256 l0 + ) internal view returns (uint256[3] memory F){ + uint256 V_P_value = basic_marshalling.get_uint256_be(blob, table_values_offset + 288); + uint256 h = 1; + uint256 g = 1; + + for(uint256 i = 0; i < permutation_size;){ + uint256 tmp = addmod( + gamma, + basic_marshalling.get_uint256_be( + blob, table_values_offset + uint16_from_two_bytes(zero_indices[i<<1], zero_indices[(i<<1)+1]) + ), + modulus + ); + + g = mulmod(g, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, (i *0x40 )), modulus), + tmp, + modulus + ), modulus); + h = mulmod(h, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, permutation_size * 0x40 + (i *0x40 )), modulus), + tmp, + modulus + ), + modulus + ); + unchecked{i++;} + } + + F[0] = mulmod(l0, addmod(1, modulus - V_P_value, modulus), modulus); + F[1] = mulmod( + addmod(addmod(1, modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset), modulus), modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), modulus), + addmod( + mulmod(basic_marshalling.get_uint256_be(blob, table_values_offset + 288 + 0x20), h, modulus), + modulus - mulmod(V_P_value, g, modulus), + modulus + ), + modulus + ); + F[2] = mulmod( + mulmod(basic_marshalling.get_uint256_be(blob, permutation_size * 0x80), V_P_value, modulus), + addmod(V_P_value, modulus-1, modulus), + modulus + ); + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit2/proof.bin b/contracts/zkllvm/circuit2/proof.bin new file mode 100644 index 0000000..43c934c --- /dev/null +++ b/contracts/zkllvm/circuit2/proof.bin @@ -0,0 +1 @@ +0x030000000000000020a9481a88dcb5222d52c68d295634ced8129a4b0711c426f5678d89772d477fe20000000000000020b512d5e1723b60d350f2c83179c1051dd01f0b1943c891a50969051c0bd88d6f000000000000002053c60cb628b515e490aa568f3cc8ca29891d9563b6cff13539314b5a7221711908983eda4d8c83f5c823195a9411f4dbc344aac7a8f33438d5f95aaac4be82f6000000000000002608983eda4d8c83f5c823195a9411f4dbc344aac7a8f33438d5f95aaac4be82f61b02b1d914ea72056989679d7826ca1f9adbc9880002cf6daffb7f1fa3b332cd3c29b7f81ed79bb878f5b17a0c7db20256e0ab759ea66d8dd9d17aab613594ba4925359c68cba0ddaf87fd463f6daed7e844deb500155000cfe079de79e6639a495b11cf5b0cca32b50a523e3a8a560064ebc42e5691eae3f4ba5ab2a8771113304dd9fa371b70eeffd08ccb957867d20aeb86e7009bc009af235519554cb93231c6df5ed6e392422660df937340f9ed737bcd385e03fc3fb1187ae69b4177816a45a7312e851bf898402981030726b3a4f5684b04458845c9f753b35519105c08983eda4d8c83f5c823195a9411f4dbc344aac7a8f33438d5f95aaac4be82f61b02b1d914ea72056989679d7826ca1f9adbc9880002cf6daffb7f1fa3b332cd3745efb7711754e6ed9337ec04c2dd1815ce41161d436ea45e5a0afe5352c63f3d9bd931d08eee60195862ede438d303f80e10fc9093f2a0920d1f3d2bed12c96898431c9ad254bd3e90b476871f8ed9097874da3b106727ea8e8af99a03ce305d118568c35ccff0c8e14aeb77fcd0a05ba585f78d646348b66c554b10625e60016f044ce3e3a2a1a4b9d3c122bc19247968c293a38cb8deb4d3c106af899e353a68771f10abc9d88dbdf7ce531cd3044141f573048011fdb1b76e4ec34435a61a49c21704e3faf3eebdbf7ca1bd95ce85bd034affa8f64d10657a048cc796c6012e0229800e317b4f95a23a9a5570a962fcb11f71fe5ac85106392f406eb9963f1b4adcabfaa14cf2ee7ec3990f58d91ae75bfaaefe1327313d89eb23baf96f4cf918e356aa96392c52753f8b866058054d9c843a86ad32b6f3cc45de86fd4401270624e54f5b858244ebdb4f7802a52d24992f47d11e9c86e0d4a67349e020662761bdeda7376d374c58b68475ecfa30064120c27daa97edfbda94eecaeaff5e5819220d06fcbde0018a1c97afa52d813d66c1e37b28146760ed7609dae194369369e984155e5f975bd41103c801ea569e500244152d768985604be0800b064ecd57045a9bc747a663a29b2862beb17075a302671266069ac62a09c7801d483cd3d24de7686966f8fa3577ea539d516c0a16d46d0e2c283db58b157952ca5330d0e87d5a90d42985d4b5da16c96ca2d6a70107fce35e91f6b3669d57f828e428b5b07e8d7fabe4f0671904e44e7095caad0ce87e4a1206ab02fcd1ee5f48122ff922d702799a98e2808d0412a6eb1d611c54f95c78b8dbd113d4785b8e49593af08b2d7d92860abc5dce65f91188b7a77bf1d3fb566ff578c99748a7b82e1e11993a80a285b2e1d39c24c7f1cbc8359af114243a13dd7cec7a76c6cec4bb5151d7fbdf97b80f63f2a13b7362e2b6eaa1716deeb1f5a9803382281ea63d658434724c28b78ae43ce6d61acb240e7fc29289b3a31071e8238b4307d7a2cf0ba43136a39f18e36cea081aa558e434e71274837f29bf43047f1ddd21edb9a66f6c672a0116495522c66ac4d368ec44e0e3f066b6e2f52828257441989076a0dd8b17128482ac08ae5cda683b00898bd8c8ad88d21dd9078558818303520c9474d454ba6455d2eb12b7092bfa2ecd2052ae85ced69033e7c5c4c483c55759f8a3fb35b23e240948c295f8005f8c45d58947237e7e8eeb8c10d4be76605a049477f20000000000000008000c010402010305000000000000001602020202020202020303020202010101020101010101000000000000000300000000000000207c555c3aa09898bcabb7854d82e0e828bc28d322bfc54e61f9d395928622c489000000000000002023b69f8f92ba3ead285acc6a688d8b22c3f3600fde34c782fe9d09b52f3f9bc900000000000000208f4176a895e1ccac9040370bc31ff98d07fe56a85183b1067a9198863bbeb9de0000000000000003010101000000000000002c1aa909b8f9797bc1d44db4c7e28c3f15cbfd4ee83f1b2499dbe21753938adf7459449d9a302401865eec2340271598ef87c0551ac0e33765241de8ab6c75208d46b19cbba8b4e5049ae6196f2833e193402f8456b9bfa436032ea34a08cc1c2b2d3c0a9780e898439853be98e16df672138e1fac463eb7c8fcd15cb4f733e3d61f24abd4f67c4dff6f6351e9f2e3caf172560e5314440d7e1646770a3d94c52954c8fb7e33212f48c3d6861e16be0d13e16795afebba4e80e9b988f4c26b3ad866130b7f93c8a4b3d87d655d9a98b494cc9cc0428dde02739bed4148af11641e0dda9bd395d4d8945abc72aa6f0923708720e3c07220598b6412beb650ee9be31aa909b8f9797bc1d44db4c7e28c3f15cbfd4ee83f1b2499dbe21753938adf7459449d9a302401865eec2340271598ef87c0551ac0e33765241de8ab6c75208d52061e3efce7d6a31c13adb6d32058c5e6f146e48bb62cc073c87c31947d2c57098075adfcf1b7a6c99a4162b11dc83f281d406cf941f0b333df0ea0d41918f819165cb1bef36c435f3cc0ce1670f796dc30fbf37d725244b35ed0068bf3eb0b6e6edc17ff8312bbea15c0acd860433b08b0780611745e64de96ca9086f2591f2b60a5c08b07811425a960d4011f29545b141179d7070f55c000de45e86a555f3e5f05bcd475ab6f415ff6d5973865f5a782325e0fc5100bc78b7faa51e9c95c678164c95551eb09e79cdd1a2bd563208567ddec90035da244ec56869a86018d0f72324e4b0ebd9cf57c82079cc9eca04ee13a23d09856ada685567c3b8d302a5dafb266d3e9f628388ec0e8d99c4c84fa35fa528304e52afc5445f3bb5bb1ba60a41dafb4b73a0bd7cf7b9dc0e4d2a518a76b75942c5fa7d3fb5e2ab95696d7474527427adda5b16a94aa3ab7f3a60a7ce8b9200bec2685dfaeb4f256a16e185b770570665379e8ca0bae6815730dfde681d04f8d5222554baec904fa3225e5497e0ae517d1c167367c08a568a0a10610d1878571cc356b84c1ca831ef6828271ebfbb2f6e61d05e865543c5b587058cd4896a3844a0f86249225bf862dbabc6231baa24a585f3ec6427708472393ae586f99809ce30fabefe085169832d4ce2093930948482e7fe2750237f8f0d5fbe138643c19ecc6f3c4274b467e4824c71cecd50528fd6bee44f7a8cfabe259b740d7433bafcc877efc371cb6e6d7a71d64e8715fdad47383c6c0aafc63ae2c34430eb8fc4b9d12cbd0dad78cbd7d5d4a365636099a836a818a413a4d94913253b90bf26b1cef39ac28f1accc37efc200586f114d9bbeedf7c1a160b43b3a7974ae7c95d96dfc72ac15a8db43ae8b2820035fc5992668f0fd135c7bec1eeb31ce142558a12f837fe3384964501a03e6975afb9166c9239109c54c9dfeb858bd92e6c0f779781cc60e829549d2aa5475176769fc26458d31307192b17e9274f06bdd7c5c775f69730b7438081c9137ef6c442f0503a6842f0e1d3cfb0bdb85575baa67641c7973ad3d3d5430c5b99717323a428252f15e396191a0b4405391d7205a9224fbdde8fc3651363b8ae315f2704fa488c95dc95c2c959e0b23630b9bc4f5464387f473b0e725223218238541fa2a43a522da4a4da3ca2b25c96fe1d9091f8d06e4ee2d4aac523735a48054cddd303a80bfb4e612e97a184be942d81845d65f6b4d11e46bdfd7312a96118eed83584d0ea09122cec8b47863d0f99f46ec0e8b718c9e303a1a5c60b08ed70cbb4d225e119a61042bbb62aa00bcc69395211ca74a228297d039506494dd1b681b930e07849f3844790937bf09ca0c62a81d9b4ea31f59a79333be368bec8f0a9fe32f1c5fcd5245decf7ac1a62550f09b790d3b488f30d7c3a34d36c01bbcac28ff6bc2970801a9ce846a02ef052a714e13f5d7fcf28a755a17c62aff3c5abb55914d83b80a61936198766d7184378ff7cc19b7f548182e6256f1316c1238c2e15a00000000000000064b9d7b4de6229a3032ab8366026dd422f2be937c1e6b6541e1d43693fd41d65b4b5392a75af0104d5564b00bc03c3be2460035dc21b5e3e65c2ce4c6539b3f8465ffdf7e7fd4f2d184d00c57cc64367d229b66cb784fad0d352ddccf4309ce9707e9e04f6affee8ac168d9b30d0303c3839fd321d4c1585272f359b05281f7d726c22f5e395d6029bfbc25977ceae65962fb21c3ba4ddc2ad8988c1b3672745c40095cb626202f85b75174525da458777823e9826cfef7b852066a18a12d85bd0000000000000004000000000000005a0000000000000020b024bd12fb5b07a167bc8a510f274a06946eac1240e823dd682ec71d18e04b4e00000000000000070000000000000001000000000000000100000000000000201dba87b548f296ea9efc52957e260ea1a785dd708b0458ff7f1ed74a3263a86d0000000000000001000000000000000000000000000000200670200ce8840d42c287eb3020f13a6f38a3edcce46c10cf3525c1dcb96d3f820000000000000001000000000000000100000000000000209dae199a4e50f8ed1b4aac58675d7c022a948d70707593b776f9ea726e1937230000000000000001000000000000000000000000000000208b4cfcd55a35f9bf1484306fbe9ca3c7d8eff4fdb35bf57fdbc04d2881ba460b00000000000000010000000000000000000000000000002089519a6d88a150b09627d8adb69500fcbed330b3fcd7c922d9d68ccafe3d00db000000000000000100000000000000010000000000000020c32a0d03207fdc70dd7f1a4f65654f7f921570d423753644507fb723e9043ef2000000000000000100000000000000000000000000000020a5791a4d1fb68b8c5de94b338a0e0ba2ce64eca86311b65648af6a74b0fb4d91000000000000005a0000000000000020a9481a88dcb5222d52c68d295634ced8129a4b0711c426f5678d89772d477fe2000000000000000700000000000000010000000000000001000000000000002057e970db724219567ba2cdc6e40d3680a038af0093b42a725998a6da508cfcbb000000000000000100000000000000000000000000000020d0b5511ef3caac40ccf24ed247fa21350b215940f877064ee479150c3683b6f9000000000000000100000000000000010000000000000020c8081ea46294607972fc8c86596d930de29118414bb71be4fd9ce2747216b8e70000000000000001000000000000000000000000000000209e872f337db431084da913380af75a1936330ca65781aa90bb01e69488f13b43000000000000000100000000000000000000000000000020ba6adcfeefd05bfff7195b821c0ce0c1077f3e96d104bfd13b71b98862f7f87d00000000000000010000000000000001000000000000002015438a12e36743f20ecc136a4275907220dadfc513469f7edc2a77ef3abc22d500000000000000010000000000000000000000000000002033d6144b36ca45503092f451d8ebc685cad2f8c90c97338dd2073fd2b54451be000000000000005a0000000000000020b512d5e1723b60d350f2c83179c1051dd01f0b1943c891a50969051c0bd88d6f0000000000000007000000000000000100000000000000010000000000000020bf4668138b85d2f7cd61d513e6b836bf0c91f937fb195e9b21ed307f3f0e2f3d000000000000000100000000000000000000000000000020b506484d8c0a32b2902c97440868b6fcf621f97ec3e5bc2db5e819ffed2a63ac0000000000000001000000000000000100000000000000207956fb7563d1d8edc1c31b0507a45ca963842945223b2968f306594124227d620000000000000001000000000000000000000000000000200f0911ff40841595361c7f29d46e3a2e6eef09a5e708506ca877eb6163630bf3000000000000000100000000000000000000000000000020d8e25d820866f2beb13183fff051de8ceae433e7812c5af04a607e1130331ed20000000000000001000000000000000100000000000000200bfd6d89c20023ffb75aca9182c12c60ff50a65edb29afd0302d0490c668264a000000000000000100000000000000000000000000000020bbd90a9748c45aeb7976c50f9539e6baebdee7c29eea9e71d3ad7ebeacb50710000000000000005a000000000000002053c60cb628b515e490aa568f3cc8ca29891d9563b6cff13539314b5a722171190000000000000007000000000000000100000000000000010000000000000020243dbc1ab00a1ab1191f8210672e7b79aac1565b35a6a6c860eb89e641d0e85d000000000000000100000000000000000000000000000020e2b8adf48734bbac00476e92b353eab57c23e6fb0876d7e9f99c9ef2f21ddee9000000000000000100000000000000010000000000000020d55dd3f7ae65c487983905054e9a5294f8f4e02f778e48ec14f4ed1e06a87be30000000000000001000000000000000000000000000000200aa814ddb3b1b15e14ba702f08a240dcc7293359374cbe0e8188bf67f7870f840000000000000001000000000000000000000000000000204eb0f206d6a791451818a1a49e295eece7842a33e540ecc18486e83537c399b0000000000000000100000000000000010000000000000020be12d559953f04b14fb4a5f2e37b32a6949f6e8508b4a7d711e178ff766d5dd10000000000000001000000000000000000000000000000201546a6e10b577d90c02af66694813cf010175cb9045f737037f8a14ddfe068260000000000000003000000000000005a00000000000000207c555c3aa09898bcabb7854d82e0e828bc28d322bfc54e61f9d395928622c4890000000000000007000000000000000100000000000000010000000000000020abc9732304eb58807e4a487dab4276b9ab3dbe3bb7499ee864f92aa08afea68d0000000000000001000000000000000000000000000000201e46badcd57f2392eeda85b567a9192e6e1a9bc66468e60315a2f75ddebea349000000000000000100000000000000010000000000000020a6c9ee8840d773f8b437a5223c886c3b7b55dc3a321ab6f661d6b2fcce55118400000000000000010000000000000000000000000000002075f02074ca216af09dd0367a42fea2bd162b137430e34607c0035f56d6986bb700000000000000010000000000000000000000000000002088dce71d2079b2b0950a4e3c3c0edc9db575729cec32f37684db1da0379727da000000000000000100000000000000010000000000000020e57828f96f3b73b9428a3c63af5a46099e67e84bf35ed87b3d55c2c7da46a61e0000000000000001000000000000000000000000000000203fac52a7d82b9409a1814d1265269607ef9c8d2077877dae9afbb42c5c0be8de000000000000001a000000000000002023b69f8f92ba3ead285acc6a688d8b22c3f3600fde34c782fe9d09b52f3f9bc90000000000000006000000000000000100000000000000010000000000000020a5bb91d42b166ed50abe53ab6b726ecfe9f66983d86acb5b99bcb2c4fa9116e6000000000000000100000000000000000000000000000020a1bf8d3962d804bbf9b6836530b939022e87b97ddacf718e1bffe99b5ba4fcf10000000000000001000000000000000100000000000000207274e676b35699e3fcbf016fc212b73430068ac868b0acd0dad2cb90142dcdf6000000000000000100000000000000000000000000000020cc3d62b02f3ad0810ece4920fbf5ad5452577124ebb6be1c31d3d7ec79b6e3eb00000000000000010000000000000000000000000000002018d9bdcd4619139084ac887d24402cf61913a18ac9c823e282227fc8c27349d6000000000000000100000000000000010000000000000020e075fd2c31e99181114bfb41171f749f0b62f75692b44ebbf7923bdb5f51b314000000000000001a00000000000000208f4176a895e1ccac9040370bc31ff98d07fe56a85183b1067a9198863bbeb9de0000000000000005000000000000000100000000000000010000000000000020d67042edbfbc11c2c791fe0a2ee1823064aeb1e7975853f5cc08513dfd4dc05500000000000000010000000000000000000000000000002031b4dbeed998c874bdee96dbb0edab3b842540b06380a5044c87c735dbac2972000000000000000100000000000000010000000000000020be0c6eac24c8089685c6c05d562e2546d0ec7ef7487cf2893903d4b6b86b0fef000000000000000100000000000000000000000000000020a4a120d887a780dc758f3b10fbc671fc563be5de180f9f7105091f664971150b000000000000000100000000000000000000000000000020097d565685c064f43d07e0e26545a84555d4027ccf4a558520d124c6b9c4327e00000000000000026d5c99b3c48d867bd523b8f8f2188b6b176e57a493a597f1154f7b196bcffd0d3ef3e4413ba5971273cd5d8815d104d647068755b951a1033a734e720c501996 \ No newline at end of file diff --git a/contracts/zkllvm/circuit3/commitment.sol b/contracts/zkllvm/circuit3/commitment.sol new file mode 100644 index 0000000..78b0a5e --- /dev/null +++ b/contracts/zkllvm/circuit3/commitment.sol @@ -0,0 +1,647 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_commitment.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../containers/merkle_verifier.sol"; +import "../../algebra/polynomial.sol"; +import "hardhat/console.sol"; + +library modular_commitment_scheme_circuit3 { + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint64 constant batches_num = 5; + uint256 constant r = 2; + uint256 constant lambda = 40; + uint256 constant D0_size = 128; + uint256 constant max_degree = 7; + uint256 constant D0_omega = 7356716530956153652314774863381845254278968224778478050456563329565810467774; + uint256 constant unique_points = 5; + uint256 constant permutation_point = 2; + uint256 constant quotient_point = 0; + uint256 constant lookup_point = 4; + bytes constant points_ids = hex"010101010101010103030303030103000000"; + uint256 constant omega = 199455130043951077247265858823823987229570523056509026484192158816218200659; + uint256 constant _etha = 23625454313544905426346299048229678104684481021196451178545456502003633541374; + + struct commitment_state{ + bytes leaf_data; + uint256 roots_offset; + uint256 initial_data_offset; + uint256 initial_proof_offset; + uint256 round_proof_offset; + uint256 round_data_offset; + uint256[r] alphas; + uint64[batches_num] batch_sizes; + uint64 poly_num; + uint256 points_num; + uint256 theta; + uint256 x_index; + uint256 x; + uint256 max_batch; + uint256 domain_size; + uint256[] final_polynomial; + uint256 leaf_length; + uint256[][unique_points] denominators; + uint256[unique_points] factors; + uint256[][unique_points] combined_U; + uint256[][unique_points] unique_eval_points; + uint256[2] y; + uint256 j; + uint256 offset; + } + + function calculate_2points_interpolation(uint256[] memory xi, uint256[2] memory z) + internal pure returns(uint256[2] memory U){ +// require( xi.length == 2 ); +unchecked { + U[0] = addmod(mulmod(z[0], xi[1], modulus),modulus - mulmod(z[1], xi[0], modulus), modulus); + U[1] = addmod(z[1], modulus - z[0], modulus); +} + } + +// coeffs for zs on each degree can be precomputed if necessary + function calculate_3points_interpolation(uint256[] memory xi, uint256[3] memory z) + internal pure returns(uint256[3] memory U){ +// require( xi.length == 3 ); +unchecked { + z[0] = mulmod(z[0], addmod(xi[1], modulus - xi[2], modulus), modulus); + z[1] = mulmod(z[1], addmod(xi[2], modulus - xi[0], modulus), modulus); + z[2] = mulmod(z[2], addmod(xi[0], modulus - xi[1], modulus), modulus); + + U[0] = mulmod(z[0], mulmod(xi[1], xi[2], modulus), modulus); + U[0] = addmod(U[0], mulmod(z[1], mulmod(xi[0], xi[2], modulus), modulus), modulus); + U[0] = addmod(U[0], mulmod(z[2], mulmod(xi[0], xi[1], modulus), modulus), modulus); + + U[1] = modulus - mulmod(z[0], addmod(xi[1], xi[2], modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[1], addmod(xi[0], xi[2], modulus), modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[2], addmod(xi[0], xi[1], modulus), modulus), modulus); + + U[2] = addmod(z[0], addmod(z[1], z[2], modulus), modulus); +} + } + + function prepare_eval_points(uint256[][unique_points] memory result, uint256 xi) internal view { + uint256 inversed_omega = field.inverse_static(omega, modulus); + result[0] = new uint256[](1); + result[0][0] = xi; + result[1] = new uint256[](2); + result[1][0] = xi; + result[1][1] = _etha; + result[2] = new uint256[](2); + result[2][0] = xi; + result[2][1] = mulmod(xi, omega, modulus); + result[3] = new uint256[](3); + result[3][0] = xi; + result[3][1] = mulmod(xi, omega, modulus); + result[3][2] = _etha; + result[4] = new uint256[](3); + result[4][0] = xi; + result[4][1] = mulmod(xi, omega, modulus); + result[4][2] = mulmod(xi, field.pow_small(omega, 4, modulus), modulus); + + } + + function prepare_U_V(bytes calldata blob, commitment_state memory state, uint256 xi) internal view returns(bool result){ + +unchecked { + result = true; + uint64 ind = 0; + prepare_eval_points(state.unique_eval_points, xi); + // Prepare denominators + for( ind = 0; ind < state.unique_eval_points.length;){ + state.denominators[ind] = new uint256[](state.unique_eval_points[ind].length + 1); + if( state.unique_eval_points[ind].length == 1 ){ + state.factors[ind] = 1; + state.denominators[ind][0] = modulus - state.unique_eval_points[ind][0]; + state.denominators[ind][1] = 1; + } else + if( state.unique_eval_points[ind].length == 2 ){ + // xi1 - xi0 + state.factors[ind] = + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][0], modulus); + state.denominators[ind][2] = 1; + + state.denominators[ind][1] = + modulus - addmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + + state.denominators[ind][0] = + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + } else + if( state.unique_eval_points[ind].length == 3 ){ + state.factors[ind] = modulus - + mulmod( + mulmod( + addmod(state.unique_eval_points[ind][0], modulus - state.unique_eval_points[ind][1], modulus), + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][2], modulus), + modulus + ), + addmod(state.unique_eval_points[ind][2], modulus - state.unique_eval_points[ind][0], modulus), + modulus + ); + state.denominators[ind][3] = 1; + state.denominators[ind][2] = + modulus - addmod( + state.unique_eval_points[ind][0], + addmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][1] = + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus), + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][2], modulus), + mulmod(state.unique_eval_points[ind][1], state.unique_eval_points[ind][2], modulus), + modulus + ), + modulus + ); + state.denominators[ind][0] = + modulus - mulmod( + state.unique_eval_points[ind][0], + mulmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + state.denominators[ind][3] = mulmod(state.denominators[ind][3], state.factors[ind], modulus); + } else { + console.log("UNPROCESSED number of evaluation points"); + return false; + } + ind++; + } + + // Prepare combined U + for( uint256 ind = 0; ind < unique_points;){ + uint256[] memory point = state.unique_eval_points[ind]; + state.combined_U[ind] = new uint256[](state.unique_eval_points[ind].length); + uint64 cur = 0; + uint256 offset = 0x8; + for( uint256 k = 0; k < batches_num;){ + for( uint256 i = 0; i < state.batch_sizes[k];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(k == 2) cur_point = permutation_point; + else if(k == 3) cur_point = quotient_point; + else if(k == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + polynomial.multiply_poly_on_coeff( + state.combined_U[ind], + state.theta, + modulus + ); + if( cur_point == ind ){ + if( point.length == 1 ){ + state.combined_U[ind][0] = addmod( + state.combined_U[ind][0], + basic_marshalling.get_uint256_be(blob, offset), + modulus + ); + } else + if( point.length == 2 ){ + uint256[2] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp = calculate_2points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + } else + if( point.length == 3){ + uint256[3] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp[2] = basic_marshalling.get_uint256_be(blob, offset + 0x40); + tmp = calculate_3points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + state.combined_U[ind][2] = addmod(state.combined_U[ind][2], tmp[2], modulus); + } else { + return false; + } + } + offset += state.unique_eval_points[cur_point].length * 0x20; + i++;cur++; + } + k++; + } + ind++; + } +} + } + + function compute_combined_Q(bytes calldata blob,commitment_state memory state) internal view returns(uint256[2] memory y){ + +unchecked { + uint256[2][unique_points] memory values; + { + uint256 offset = state.initial_data_offset - state.poly_num * 0x40; // Save initial data offset for future use; + uint256 cur = 0; + for(uint256 b = 0; b < batches_num;){ + for(uint256 j = 0; j < state.batch_sizes[b];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(b == 2) cur_point = permutation_point; + else if(b == 3) cur_point = quotient_point; + else if(b == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + for(uint256 k = 0; k < unique_points; ){ + values[k][0] = mulmod(values[k][0], state.theta, modulus); + values[k][1] = mulmod(values[k][1], state.theta, modulus); + k++; + } + + values[cur_point][0] = addmod(values[cur_point][0], basic_marshalling.get_uint256_be(blob, offset), modulus); + values[cur_point][1] = addmod(values[cur_point][1], basic_marshalling.get_uint256_be(blob, offset + 0x20), modulus); + offset += 0x40;j++; cur++; + } + b++; + } + } + for(uint256 p = 0; p < unique_points; ){ + uint256[2] memory tmp = values[p]; + tmp[0] = mulmod(tmp[0], state.factors[p], modulus); + tmp[1] = mulmod(tmp[1], state.factors[p], modulus); + uint256 s = state.x; + tmp[0] = addmod(tmp[0], modulus - polynomial.evaluate(state.combined_U[p], s , modulus), modulus); + tmp[1] = addmod(tmp[1], modulus - polynomial.evaluate(state.combined_U[p], modulus - s, modulus), modulus); + tmp[0] = mulmod(tmp[0], field.inverse_static(polynomial.evaluate(state.denominators[p], s, modulus), modulus), modulus); + tmp[1] = mulmod(tmp[1], field.inverse_static(polynomial.evaluate(state.denominators[p], modulus - s, modulus), modulus), modulus); + y[0] = addmod(y[0], tmp[0], modulus); + y[1] = addmod(y[1], tmp[1], modulus); + p++; + } +} + } + + function initialize( + bytes32 tr_state_before + ) internal returns(bytes32 tr_state_after){ + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + uint256 etha = transcript.get_field_challenge(tr_state, modulus); + require(etha == _etha, "Wrong etha"); + tr_state_after = tr_state.current_challenge; + } + + function copy_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + c + ) + mstore( + add(leaf, 0x40), + d + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_reverted_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + d + ) + mstore( + add(leaf, 0x40), + c + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool b){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, offset)) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function copy_reverted_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, offset)) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function colinear_check(uint256 x, uint256[2] memory y, uint256 alpha, uint256 colinear_value) internal pure returns(bool){ + +unchecked { + uint256 tmp; + tmp = addmod(y[0], y[1], modulus); + tmp = mulmod(tmp, x, modulus); + tmp = addmod( + tmp, + mulmod( + alpha, + addmod(y[0], modulus-y[1], modulus), + modulus + ), + modulus + ); + uint256 tmp1 = mulmod(colinear_value , 2, modulus); + tmp1 = mulmod(tmp1 , x, modulus); + if( tmp != tmp1 ){ + console.log("Colinear check failed"); + return false; + } + return true; +} + } + + function verify_eval( + bytes calldata blob, + uint256[5] memory commitments, + uint256 challenge, + bytes32 transcript_state + ) internal view returns (bool){ + +unchecked { + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + commitment_state memory state; + + { + uint256 poly_at_eta; + /* 1 - 2*permutation_size */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 40);// 0 + if(poly_at_eta != 0x343b8884869e63daf6dd0953387348368c7a4fe70ddf9f3c44b97c38fff8d0fe) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x68);// 0x1 + if(poly_at_eta != 0x529aa96a117f346d2512ea01a40691035492b93202a37bef2eaa968ffdc14f2) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xa8);// 0x2 + if(poly_at_eta != 0x19d054f12577c0621b95e92083420d510a6dd9dfa0d316babe954f0cff4c68ba) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xe8);// 0x3 + if(poly_at_eta != 0x111a8b5bb56c1ea89ed8da2904a4294ef980f6611857f6e86902966fc7e0ba0) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x128);// 0x4 + if(poly_at_eta != 0x343b8884869e63daf6dd0953387348368c7a4fe70ddf9f3c44b97c38fff8d0fe) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x168);// 0x5 + if(poly_at_eta != 0x529aa96a117f346d2512ea01a40691035492b93202a37bef2eaa968ffdc14f2) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1a8);// 0x6 + if(poly_at_eta != 0x19d054f12577c0621b95e92083420d510a6dd9dfa0d316babe954f0cff4c68ba) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1e8);// 0x7 + if(poly_at_eta != 0x111a8b5bb56c1ea89ed8da2904a4294ef980f6611857f6e86902966fc7e0ba0) return false; + /* 2 - special selectors */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x248);// 0x8 + if(poly_at_eta != 0x17751bf2a581542ee47b5ae7d4e0e02af7a71bc873c7f7385aba2bddea3a5ef6) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2a8);// 0x9 + if(poly_at_eta != 0x3dfbdbf08c58e4f3e916fa1a6f3e75208970c68882f242793123b14ab791cdf2) return false; + /* 3 - constant columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x308);// 0xa + if(poly_at_eta != 0x295b7fbed4e2420808d6b3101d2f0041fbb28c89a4e944619e14aae32632b0f2) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x368);// 0xb + if(poly_at_eta != 0x428994f647f501b7fa5a6746b98e0c986f9913eb8a053bc75ba3024743908f2) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x3c8);// 0xc + if(poly_at_eta != 0x2810d8e2f6270a1cd3890c3c5e5c18991066713e9329e8403c9707e7899494b6) return false; + /* 4 - selector columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x408);// 0xd + if(poly_at_eta != 0x3d0aef0e94c434b9a9f151793318c9a9630fcadac7a319832bdada96c3c81938) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x468);// 0xe + if(poly_at_eta != 0x2d84190e39619223887c598488c7e10b82ac1dc85d89981e13cedb079a6bb9e4) return false; + } + + + { + uint256 offset; + + if (challenge!= transcript.get_field_challenge(tr_state, modulus)) return false; + + for(uint8 i = 0; i < batches_num;){ + transcript.update_transcript_b32(tr_state, bytes32(commitments[i])); + i++; + } + state.theta = transcript.get_field_challenge(tr_state, modulus); + + state.points_num = basic_marshalling.get_length(blob, 0x0); + offset = 0x8 + state.points_num*0x20 + 0x8; + for(uint8 i = 0; i < batches_num;){ + state.batch_sizes[i] = uint64(uint8(blob[offset + 0x1])); + if( state.batch_sizes[i] > state.max_batch ) state.max_batch = state.batch_sizes[i]; + state.poly_num += state.batch_sizes[i]; + i++; offset +=2; + } + + offset += 0x8; + offset += state.poly_num; + state.roots_offset = offset + 0x8; + offset += 0x8; + + for( uint8 i = 0; i < r;){ + transcript.update_transcript_b32(tr_state, bytes32(basic_marshalling.get_uint256_be(blob, offset + 0x8))); + state.alphas[i] = transcript.get_field_challenge(tr_state, modulus); + i++; offset +=40; + } + + + bytes calldata proof_of_work = blob[blob.length - 4:]; + transcript.update_transcript(tr_state, proof_of_work); + uint256 p_o_w = transcript.get_integral_challenge_be(tr_state, 4); + if (p_o_w & 0xffff0000 != 0) return false; + + + offset += 0x8 + r; + state.initial_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + + state.round_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + offset += 0x8; + + state.initial_proof_offset = offset; + for(uint8 i = 0; i < lambda;){ + for(uint j = 0; j < batches_num;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != commitments[j] ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + offset += 0x8; + state.round_proof_offset = offset; + + for(uint256 i = 0; i < lambda;){ + for(uint256 j = 0; j < r;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != basic_marshalling.get_uint256_be(blob, state.roots_offset + j * 40 + 0x8) ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + + state.final_polynomial = new uint256[](basic_marshalling.get_length(blob, offset)); + offset += 0x8; + for (uint256 i = 0; i < state.final_polynomial.length;) { + state.final_polynomial[i] = basic_marshalling.get_uint256_be(blob, offset); + i++; offset+=0x20; + } + } + if( state.final_polynomial.length > (( 1 << (field.log2(max_degree + 1) - r + 1) ) ) ){ + console.log("Wrong final poly degree"); + return false; + } + + if( !prepare_U_V(blob, state, challenge) ) return false; + + state.leaf_data = new bytes(state.max_batch * 0x40 + 0x40); + for(uint256 i = 0; i < lambda;){ + // Initial proofs + state.x_index = uint256(transcript.get_integral_challenge_be(tr_state, 8)) % D0_size; + state.x = field.pow_small(D0_omega, state.x_index, modulus); + state.domain_size = D0_size >> 1; + for(uint256 j = 0; j < batches_num;){ + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } + state.leaf_length = state.batch_sizes[j] * 0x40; + state.initial_data_offset += state.batch_sizes[j] * 0x40; + state.initial_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.initial_proof_offset); + j++; + } + { + state.y = compute_combined_Q(blob, state); + if( state.x_index < state.domain_size ){ + if( !copy_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + }else{ + if( !copy_reverted_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + } + } + if( !colinear_check(state.x, state.y, state.alphas[0], basic_marshalling.get_uint256_be(blob,state.round_data_offset)) ){ + console.log("Colinear check failed"); + return false; + } + + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + for(state.j = 1; state.j < r;){ + state.x_index %= state.domain_size; + state.x = mulmod(state.x, state.x, modulus); + state.domain_size >>= 1; + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } + state.y[0] = basic_marshalling.get_uint256_be(blob, state.round_data_offset); + state.y[1] = basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20); + if( !colinear_check(state.x, state.y, state.alphas[state.j], basic_marshalling.get_uint256_be(blob,state.round_data_offset + 0x40)) ){ + console.log("Round colinear check failed"); + return false; + } + state.j++; state.round_data_offset += 0x40; + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + } + + state.x = mulmod(state.x, state.x, modulus); + if(polynomial.evaluate(state.final_polynomial, state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset)) { + console.log("Wrong final poly check"); + return false; + } + if(polynomial.evaluate(state.final_polynomial, modulus - state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20)){ + console.log("Wrong final poly check"); + return false; + } + state.round_data_offset += 0x40; + + i++; + } + return true; +} + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit3/gate_argument.sol b/contracts/zkllvm/circuit3/gate_argument.sol new file mode 100644 index 0000000..25e357d --- /dev/null +++ b/contracts/zkllvm/circuit3/gate_argument.sol @@ -0,0 +1,40 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_gate_argument.sol"; +import "hardhat/console.sol"; + + +contract modular_gate_argument_circuit3 is IGateArgument{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + // Append commitments + function verify( + bytes calldata blob, + uint256 theta + ) external view returns (uint256 F){ + uint256 theta_acc = 1; + uint256 eval; + uint256 x; + + + } +} \ No newline at end of file diff --git a/contracts/zkllvm/circuit3/lookup_0.sol b/contracts/zkllvm/circuit3/lookup_0.sol new file mode 100644 index 0000000..7abb16b --- /dev/null +++ b/contracts/zkllvm/circuit3/lookup_0.sol @@ -0,0 +1,72 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 -- Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../../contracts/basic_marshalling.sol"; + +library lookup_circuit3_0{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + + function evaluate_lookup_0_be( + bytes calldata blob, + uint256 theta, + uint256 theta_acc, + uint256 beta, + uint256 gamma + ) external pure returns (uint256 g, uint256) { + uint256 l; + uint256 selector_value; + uint256 sum; + uint256 prod; + + g = 1; + + selector_value=basic_marshalling.get_uint256_be(blob, 288); + l = mulmod( 1,selector_value, modulus); + theta_acc=theta; + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 448); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 480); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 512); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + g = mulmod(g, mulmod(addmod(1, beta, modulus), addmod(l, gamma, modulus), modulus), modulus); + + + return( g, theta_acc ); + } + + +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit3/lookup_argument.sol b/contracts/zkllvm/circuit3/lookup_argument.sol new file mode 100644 index 0000000..ae1ae4e --- /dev/null +++ b/contracts/zkllvm/circuit3/lookup_argument.sol @@ -0,0 +1,182 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_lookup_argument.sol"; +import "./lookup_0.sol"; + +import "hardhat/console.sol"; + +contract modular_lookup_argument_circuit3 is ILookupArgument{ +//library modular_lookup_argument_circuit3{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint8 constant tables = 1; + uint8 constant sorted_columns = 2; + uint8 constant lookup_options_num = 1; + uint8 constant lookup_constraints_num = 1; + + + struct lookup_state{ + uint256 theta; + uint256 beta; + uint256 gamma; + uint256 factor; + uint256 V_L_value; + uint256 V_L_shifted_value; + uint256 q_last; + uint256 q_blind; + uint256 mask; + uint256 shifted_mask; + uint256 selector_value; + uint256 shifted_selector_value; + uint256 theta_acc; + uint256 g; + uint256 h; + uint256 l_shifted; + } + + function verify( + bytes calldata zvalues, // Table values and permutations' values + bytes calldata sorted, // Sorted batch values + uint256 lookup_commitment, + uint256 l0, + bytes32 tr_state_before // It's better than transfer all random values + ) external view returns (uint256[4] memory F, bytes32 tr_state_after){ + bytes calldata blob = zvalues[0xc0:]; + lookup_state memory state; + state.V_L_value = basic_marshalling.get_uint256_be(zvalues, 0xc0 + 544 + 0x40); + state.V_L_shifted_value = basic_marshalling.get_uint256_be(zvalues, 0xc0 + 544 + 0x60); + state.q_last = basic_marshalling.get_uint256_be(zvalues, 0x0); + state.q_blind = basic_marshalling.get_uint256_be(zvalues, 0x60); + state.mask = addmod(1, modulus - addmod(state.q_last , state.q_blind, modulus), modulus); + F[2] = state.mask; + + state.shifted_mask = addmod( + 1, + modulus - addmod(basic_marshalling.get_uint256_be(zvalues, 0x20) , basic_marshalling.get_uint256_be(zvalues, 0x80), modulus), + modulus + ); + + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + { + state.theta = transcript.get_field_challenge(tr_state, modulus); //theta + uint256 l; + state.g = 1; + state.h = 1; + + transcript.update_transcript_b32(tr_state, bytes32(lookup_commitment)); + state.beta = transcript.get_field_challenge(tr_state, modulus); //beta + state.gamma = transcript.get_field_challenge(tr_state, modulus); //gamma + state.factor = mulmod(addmod(1, state.beta, modulus), state.gamma, modulus); + (l, state.theta_acc) = lookup_circuit3_0.evaluate_lookup_0_be( blob, state.theta, state.theta_acc, state.beta, state.gamma ); + state.g = mulmod(state.g, l, modulus); + state.selector_value = basic_marshalling.get_uint256_be(blob, 352); + state.shifted_selector_value = basic_marshalling.get_uint256_be(blob, 384); + l = mulmod( 1, state.selector_value, modulus); + state.l_shifted = mulmod( 1, state.shifted_selector_value, modulus); + state.theta_acc=state.theta; + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 0), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 32), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 96), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 128), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 192), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 224), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = mulmod( l, state.mask, modulus); + state.l_shifted = mulmod( state.l_shifted, state.shifted_mask, modulus); + state.g = mulmod(state.g, addmod( state.factor, addmod(l, mulmod(state.beta, state.l_shifted, modulus), modulus), modulus), modulus); + + + } + { + for(uint64 k = 0; k < 2;){ + state.mask = basic_marshalling.get_uint256_be(sorted, k*0x60); + state.shifted_mask = basic_marshalling.get_uint256_be(sorted, k*0x60 + 0x20); + state.h = mulmod( + state.h, + addmod( + addmod( + state.factor, + state.mask, + modulus + ), + mulmod(state.beta, state.shifted_mask , modulus), + modulus + ), + modulus + ); + unchecked{k++;} + } + } + + F[0] = mulmod( + l0, + addmod(1, modulus - state.V_L_value, modulus), + modulus + ); + F[1] = mulmod( + mulmod(state.q_last, state.V_L_value, modulus), + addmod(state.V_L_value, modulus-1, modulus), + modulus + ); + { + F[2] = mulmod( + F[2], + addmod( + mulmod(state.h, state.V_L_shifted_value, modulus), + modulus - mulmod(state.V_L_value, state.g, modulus), + modulus + ), + modulus + ); + } + { + for(uint64 i = 0; i < sorted_columns - 1;){ + state.beta = basic_marshalling.get_uint256_be(sorted, (i+1)*0x60); + state.gamma = modulus - basic_marshalling.get_uint256_be(sorted, (i)*0x60 + 0x40); + F[3] = addmod( + F[3], + mulmod( + mulmod( + transcript.get_field_challenge(tr_state, modulus), //alpha + l0, + modulus + ), + addmod( + state.beta, + state.gamma, + modulus + ), + modulus + ), + modulus + ); + unchecked{i++;} + } + } + tr_state_after = tr_state.current_challenge; + } +} diff --git a/contracts/zkllvm/circuit3/lookup_libs_list.json b/contracts/zkllvm/circuit3/lookup_libs_list.json new file mode 100644 index 0000000..f09760f --- /dev/null +++ b/contracts/zkllvm/circuit3/lookup_libs_list.json @@ -0,0 +1,3 @@ +[ +"lookup_circuit3_0" +] diff --git a/contracts/zkllvm/circuit3/modular_verifier.sol b/contracts/zkllvm/circuit3/modular_verifier.sol new file mode 100644 index 0000000..2682eff --- /dev/null +++ b/contracts/zkllvm/circuit3/modular_verifier.sol @@ -0,0 +1,264 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_verifier.sol"; +import "./commitment.sol"; +import "./gate_argument.sol"; +import "./lookup_argument.sol"; +import "./permutation_argument.sol"; +import "hardhat/console.sol"; +import "../../algebra/field.sol"; + +contract modular_verifier_circuit3 is IModularVerifier{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + bool constant use_lookups = false; + bytes32 constant vk1 = bytes32(0xc45106e20a95531a40e12ee49dc5b9e85fa30183f7c8ec3bce5f6a62694b1933); + bytes32 constant vk2 = bytes32(0xf7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e); + bytes32 transcript_state; + address _gate_argument_address; + address _permutation_argument_address; + address _lookup_argument_address; + address _commitment_contract_address; + uint64 constant sorted_columns = 2; + uint64 constant f_parts = 8; // Individually on parts + uint64 constant z_offset = 0xc9; + uint64 constant table_offset = z_offset + 0x80 * 4 + 0xc0; + uint64 constant table_end_offset = table_offset + 544; + uint64 constant quotient_offset = 672; + uint64 constant rows_amount = 8; + uint256 constant omega = 199455130043951077247265858823823987229570523056509026484192158816218200659; + uint256 constant special_selectors_offset = z_offset + 4 * 0x80; + + function initialize( +// address permutation_argument_address, + address lookup_argument_address, + address gate_argument_address, + address commitment_contract_address + ) public{ + types.transcript_data memory tr_state; + transcript.init_transcript(tr_state, hex""); + transcript.update_transcript_b32(tr_state, vk1); + transcript.update_transcript_b32(tr_state, vk2); + +// _permutation_argument_address = permutation_argument_address; + _lookup_argument_address = lookup_argument_address; + _gate_argument_address = gate_argument_address; + _commitment_contract_address = commitment_contract_address; + +// ICommitmentScheme commitment_scheme = ICommitmentScheme(commitment_contract_address); +// tr_state.current_challenge = commitment_scheme.initialize(tr_state.current_challenge); + tr_state.current_challenge = modular_commitment_scheme_circuit3.initialize(tr_state.current_challenge); + transcript_state = tr_state.current_challenge; + } + + struct verifier_state{ + uint256 xi; + uint256 Z_at_xi; + uint256 l0; + uint256[f_parts] F; + uint256 gas; + bool b; + } + + // Public input columns + function public_input_direct(bytes calldata blob, uint256[] calldata public_input, verifier_state memory state) internal view + returns (bool check){ + check = true; + + uint256 result = 0; + uint256 Omega = 1; + + for(uint256 i = 0; i < public_input.length;){ + if( public_input[i] != 0){ + uint256 L = mulmod( + Omega, + field.inverse_static( + addmod(state.xi, modulus - Omega, modulus), + modulus + ), + modulus + ); + + result = addmod( + result, + mulmod( + public_input[i], L, modulus + ), + modulus + ); + } + Omega = mulmod(Omega, omega, modulus); + unchecked{i++;} + } + result = mulmod( + result, addmod(field.pow_small(state.xi, rows_amount, modulus), modulus - 1, modulus), modulus + ); + result = mulmod(result, field.inverse_static(rows_amount, modulus), modulus); + + // Input is proof_map.eval_proof_combined_value_offset + if( result != basic_marshalling.get_uint256_be( + blob, 448 + )) check = false; + } + + function verify( + bytes calldata blob, + uint256[] calldata public_input + ) public view returns (bool result) { + verifier_state memory state; + state.b = true; + state.gas = gasleft(); + state.xi = basic_marshalling.get_uint256_be(blob, 0xa1); + state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus); + state.l0 = mulmod( + state.Z_at_xi, + field.inverse_static(mulmod(addmod(state.xi, modulus - 1, modulus), rows_amount, modulus), modulus), + modulus + ); + + //0. Direct public input check + if(public_input.length > 0) { + if (!public_input_direct(blob[905:905+672], public_input, state)) { + console.log("Wrong public input!"); + state.b = false; + } + } + + //1. Init transcript + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + + { + //2. Push variable_values commitment to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x9); + + //3. Permutation argument + uint256[3] memory permutation_argument = modular_permutation_argument_circuit3.verify( + blob[0xc9:905+672], + transcript.get_field_challenge(tr_state, modulus), + transcript.get_field_challenge(tr_state, modulus), + state.l0 + ); + state.F[0] = permutation_argument[0]; + state.F[1] = permutation_argument[1]; + state.F[2] = permutation_argument[2]; + } + + //4. Lookup library call + + { + uint256 lookup_offset = table_offset + quotient_offset + uint256(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf])) * 0x20; + uint256[4] memory lookup_argument; + uint256 lookup_commitment = basic_marshalling.get_uint256_be(blob, 0x81); + ILookupArgument lookup_contract = ILookupArgument(_lookup_argument_address); + (lookup_argument, tr_state.current_challenge) = lookup_contract.verify( + blob[special_selectors_offset: table_offset + quotient_offset], + blob[lookup_offset:lookup_offset + sorted_columns * 0x60], + lookup_commitment, + state.l0, + tr_state.current_challenge + ); + state.F[3] = lookup_argument[0]; + state.F[4] = lookup_argument[1]; + state.F[5] = lookup_argument[2]; + state.F[6] = lookup_argument[3]; + } + + + //5. Push permutation batch to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x31); + + { + //6. Gate argument + IGateArgument modular_gate_argument = IGateArgument(_gate_argument_address); + state.F[7] = modular_gate_argument.verify(blob[table_offset:table_end_offset], transcript.get_field_challenge(tr_state, modulus)); + state.F[7] = mulmod( + state.F[7], + addmod( + 1, + modulus - addmod( + basic_marshalling.get_uint256_be(blob, special_selectors_offset), + basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), + modulus + ), + modulus + ), + modulus + ); + } + + // No public input gate + + uint256 F_consolidated; + { + //7. Push quotient to transcript + for( uint8 i = 0; i < f_parts;){ + F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus); + unchecked{i++;} + } + uint256 points_num = basic_marshalling.get_length(blob, 0xa1 + 0x20); + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59); + } + + //8. Commitment scheme verify_eval + { +// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address); + uint256[5] memory commitments; + commitments[0] = uint256(vk2); + for(uint16 i = 1; i < 5;){ + commitments[i] = basic_marshalling.get_uint256_be(blob, 0x9 + (i-1)*(0x28)); + unchecked{i++;} + } + if(!modular_commitment_scheme_circuit3.verify_eval( + blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge + )) { + console.log("Error from commitment scheme!"); + state.b = false; + } + } + + //9. Final check + { + uint256 T_consolidated; + uint256 factor = 1; + for(uint64 i = 0; i < uint64(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf]));){ + T_consolidated = addmod( + T_consolidated, + mulmod(basic_marshalling.get_uint256_be(blob, table_offset + quotient_offset + i *0x20), factor, modulus), + modulus + ); + factor = mulmod(factor, state.Z_at_xi + 1, modulus); + unchecked{i++;} + } + if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) { + console.log("Error. Table does't satisfy constraint system"); + state.b = false; + } + if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!"); + } + + console.log("Gas for verification:", state.gas-gasleft()); + result = state.b; + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit3/params.json b/contracts/zkllvm/circuit3/params.json new file mode 100644 index 0000000..f97c134 --- /dev/null +++ b/contracts/zkllvm/circuit3/params.json @@ -0,0 +1,62 @@ +{ + "test_name": "circuit3", + "modulus": "28948022309329048855892746252171976963363056481941560715954676764349967630337", + "rows_amount": "8", + "usable_rows_amount": "4", + "omega": "199455130043951077247265858823823987229570523056509026484192158816218200659", + "verification_key": "c45106e20a95531a40e12ee49dc5b9e85fa30183f7c8ec3bce5f6a62694b1933 f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e", + "ar_params": [ + "3", + "0", + "3", + "3" + ], + "columns_rotations_node": [ + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0" + ], + [ + "0", + "1" + ] + ], + "commitment_params_node": { + "type": "LPC", + "r": "2", + "m": "2", + "lambda": "40", + "max_degree": "7", + "step_list": [ + "1", + "1" + ], + "D_omegas": [ + "7356716530956153652314774863381845254278968224778478050456563329565810467774", + "17166126583027276163107155648953851600645935739886150467584901586847365754678" + ], + "grinding_params": { + "mask": "4294901760" + } + } +} diff --git a/contracts/zkllvm/circuit3/permutation_argument.sol b/contracts/zkllvm/circuit3/permutation_argument.sol new file mode 100644 index 0000000..d882f4f --- /dev/null +++ b/contracts/zkllvm/circuit3/permutation_argument.sol @@ -0,0 +1,93 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "hardhat/console.sol"; + +library modular_permutation_argument_circuit3{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint256 constant permutation_size = 4; + uint256 constant special_selectors_offset = 4 * 0x80; + uint256 constant table_values_offset = 4 * 0x80 + 0xc0; + bytes constant zero_indices = hex"01c001e002000000006000c001200160"; + + function uint16_from_two_bytes(bytes1 b1, bytes1 b2) internal pure returns( uint256 result){ + unchecked{ + result = uint8(b1); + result = result << 8; + result += uint8(b2); + } + } + + // Append commitments + function verify( + bytes calldata blob, + uint256 beta, + uint256 gamma, + uint256 l0 + ) internal view returns (uint256[3] memory F){ + uint256 V_P_value = basic_marshalling.get_uint256_be(blob, table_values_offset + 544); + uint256 h = 1; + uint256 g = 1; + + for(uint256 i = 0; i < permutation_size;){ + uint256 tmp = addmod( + gamma, + basic_marshalling.get_uint256_be( + blob, table_values_offset + uint16_from_two_bytes(zero_indices[i<<1], zero_indices[(i<<1)+1]) + ), + modulus + ); + + g = mulmod(g, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, (i *0x40 )), modulus), + tmp, + modulus + ), modulus); + h = mulmod(h, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, permutation_size * 0x40 + (i *0x40 )), modulus), + tmp, + modulus + ), + modulus + ); + unchecked{i++;} + } + + F[0] = mulmod(l0, addmod(1, modulus - V_P_value, modulus), modulus); + F[1] = mulmod( + addmod(addmod(1, modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset), modulus), modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), modulus), + addmod( + mulmod(basic_marshalling.get_uint256_be(blob, table_values_offset + 544 + 0x20), h, modulus), + modulus - mulmod(V_P_value, g, modulus), + modulus + ), + modulus + ); + F[2] = mulmod( + mulmod(basic_marshalling.get_uint256_be(blob, permutation_size * 0x80), V_P_value, modulus), + addmod(V_P_value, modulus-1, modulus), + modulus + ); + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit3/proof.bin b/contracts/zkllvm/circuit3/proof.bin new file mode 100644 index 0000000..fb5ac32 --- /dev/null +++ b/contracts/zkllvm/circuit3/proof.bin @@ -0,0 +1 @@ +0x0400000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d6000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f35b0f45589508478252e84f59c75045f361cbcd18e45c042935382e7bef544e7000000000000003735b0f45589508478252e84f59c75045f361cbcd18e45c042935382e7bef544e7343b8884869e63daf6dd0953387348368c7a4fe70ddf9f3c44b97c38fff8d0fe0c74c5abae929658b9e898cc0e4915db85754c27a228dcde7beccad2baca587f0529aa96a117f346d2512ea01a40691035492b93202a37bef2eaa968ffdc14f23e47dc5a68dcefbba18afbfc476d6d499b4a7cc62acc50586b9ff61da5f3ba7b19d054f12577c0621b95e92083420d510a6dd9dfa0d316babe954f0cff4c68ba37674dc40c50aeaa27b6ebed6523226f7f5a0beeb0c9ad4bb56b0ae03dc2a4630111a8b5bb56c1ea89ed8da2904a4294ef980f6611857f6e86902966fc7e0ba035b0f45589508478252e84f59c75045f361cbcd18e45c042935382e7bef544e7343b8884869e63daf6dd0953387348368c7a4fe70ddf9f3c44b97c38fff8d0fe0c74c5abae929658b9e898cc0e4915db85754c27a228dcde7beccad2baca587f0529aa96a117f346d2512ea01a40691035492b93202a37bef2eaa968ffdc14f23e47dc5a68dcefbba18afbfc476d6d499b4a7cc62acc50586b9ff61da5f3ba7b19d054f12577c0621b95e92083420d510a6dd9dfa0d316babe954f0cff4c68ba37674dc40c50aeaa27b6ebed6523226f7f5a0beeb0c9ad4bb56b0ae03dc2a4630111a8b5bb56c1ea89ed8da2904a4294ef980f6611857f6e86902966fc7e0ba000f91c6a9b196f2758554b28cfce9c4fc5b99f516a584a92673c6270b27c63490434da0a1e6aa85e9df5f05ed99e523e0a4d6b69ba2c7cd0c2439b0e8210f8b217751bf2a581542ee47b5ae7d4e0e02af7a71bc873c7f7385aba2bddea3a5ef61a96c1265e6fd1fce7f4d649a325e0535702631d747d9d4740ef4a140fd938773a6ab7648a2a850b7f48df0db54152ff4d48478c88c594101912a58ed6178a6e3dfbdbf08c58e4f3e916fa1a6f3e75208970c68882f242793123b14ab791cdf221068a24b09ebdfb8b9e22464fed6eed05196ac08e937ad22b6658422a585fe40369984a55d800e03417bc473d1e147000712bcc9be3966fc59b2c261352045e295b7fbed4e2420808d6b3101d2f0041fbb28c89a4e944619e14aae32632b0f22982aab9b585927e3f14b985f904622c92c1801f6035272e3e15dd81b6da46541cd1b01a9234159ceda831e7764f1caefacbff56d466fe016922bd33a84767320428994f647f501b7fa5a6746b98e0c986f9913eb8a053bc75ba3024743908f21cd1b01a9234159ceda831e7764f1caefacbff56d466fe016922bd33a847673219e6ed90a0526e61f50302c14419b2438ff644a944fb685d20b27f915c77be0b2810d8e2f6270a1cd3890c3c5e5c18991066713e9329e8403c9707e7899494b619e6ed90a0526e61f50302c14419b2438ff644a944fb685d20b27f915c77be0b3d0aef0e94c434b9a9f151793318c9a9630fcadac7a319832bdada96c3c819380a8934de66245079cab2dbcc48f1d119759451e3e57ba8e4d04f04d6e132a637203b4864e80c167d21bfee2eb36d311efb3d2b23704a94712ebde959bb996b902d84190e39619223887c598488c7e10b82ac1dc85d89981e13cedb079a6bb9e419e6ed90a0526e61f50302c14419b2438ff644a944fb685d20b27f915c77be0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012e51459a658132a7f08e085236423193874800702e5dafe896cad9fbd6312834053981687ce7b96ac8299df817997a9c826e08d4f7f8834e7a9bed4b84e1ad4e2c5472ed9519cfe1a742d477767266b6c3d575e89190f5cf97af1cd52e0dea291a45aa62eaf0df7e96db983c1567f5d9f54949eab9f6f40d614ff1802a4a6574192ea31c79ee8db82785518bbd76c1e54f368a315ed82f4a2c3614b24cbe64e434879689e4d0613ae0d5f52ad43dd90e5ea7336e6414484bcb87f943201fcb960523a99c533aaeaf4065e3d2e62bb34c2f535effd232f1e9efd4973b6b984ea412e7e581436609f02a25faa41959029a50aedd0859bfd0b4fffeb2b5dc3ea3f31137ad4f1a87b75b557b600ff86867219f3ae040e32c96ca709b51366150f8a63bc940ca03b59002d895be5216b49e6906fb87bca82bb7f8f850493411047de736553157fae4c3191b3817e80467b1861ee9eebe695ea5c2787268c42fd12bec37fafdec9f245386daa66970c868ffc01d4e56430c1885cd81c6adf17fafa3950b12291cc2dc097712212be611cbb3e33a8810bfbc21ee37749c5adb9028e02a0bb7c43d455e6bf83fc69db2b49c9dff617f7a77479b149e5ac5bcc213589ce5000000000000000a000f0103020203060402000000000000001c02020202020202020303030303020301010102020101010101010303000000000000000200000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000002010100000000000008c03aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c365c6077ab0490bcaa9f5627c0f5cde99a59a31864ed553d57b8162b46e494bb3e4254bae5217d87eae55fff4904382ad728515da29225c1b52c2a7e458f79903cc40f2563957cd02b5394bc253c4d0448f634cd65e2e2c3d47c95b581077a621e6a494cbf36abaf8b8a6a8de1165276533eb64441a7a8777834e338713e3148017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e17f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f100220b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d3e4254bae5217d87eae55fff4904382ad728515da29225c1b52c2a7e458f7990365c6077ab0490bcaa9f5627c0f5cde99a59a31864ed553d57b8162b46e494bb0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010ca081f647c3a9cb55af2191e325034d8e2940d9b79efc1c18ee9f0c4138fea51de9b43833ee51c21ff92c81d6fd2f50c3802ad659cbc629141a343698505f8c0a8f8e62d2f1306bbf2d43e17c0517dcfd32d7a38db1caf43a9cbd1e94206cc1166f269f8e472b263338c159af33d7948f783bafbea141b1f184d144cada56c21d78b132bf84510b91d7d719fefa47b1b6050174a845e4a21a1948455ed4d670298d8696bb2005af943a452fd8c9a1980f1cb9ffa2b50b8ff004c5318e84da8b0fef6bffe733d3d4802d6157bcb75fb459a3fddd81f14279f85d0608e6259ac139fda498248c0ae6e88e00c5bb72499f01eed91fcf0a8f20b0102dddec385e0e20bad6e5ed7e32b427a948695375f7850ea214c1e2821b459f24701d11107c062c6bbab900f68a00c926bd02b763043eb93a1f8e4f8941ed81f2e4a26061919e3f91b24e70802320f126e25fdd38ddf95f74a462ed0a55f6fdbdf0495e42508223e5118034e43465b244ec6d1c1d68cb8b5e0b900de6a8fdd61cc01673e404d52250416b73f745f22bfe2d5ec50c202791db9ea95f6c3f8045349e515493acc72d1d361d159fe3d131a99fabe76fabef558ab13653ba938fef93e17ff11f6b0631183373aed342870969053de46eb2420ceca27eb0b66695b61c4c1f18aa7522022cffda2481eb068d3e4d4058a2500b01f7053d1590df008987dc090ed3023b1283ca168f30a596b046a343283cb8aba63becd34c87237579e4b78935596d621f39419cfcf4fde686d12bc819adc83e781ba39e40ae430178a878f7a089c00f12cf3b49a33500bcf5951796e4eafd130452457a50ba7038f18dad0c6c119bd12d30c4b65ccaff430a6ae8691b1502ed1df45381b89288e2a79f83e093ee64301e0c2870300903b0cbe975f27896f15ef354c2678a5738011e9730511c580b1421f3d78fcff6fc4f34168a0d87690ea12ef1d6947ef5c11a7a96009be3a7f4ed163cca30f02d1273fb8f4dbc5af2b6da7c1a9a0da11a25ce66998fbb8db8376229c335cf0fd2ed8c0470b243a50d4925a62bfeee6832d34d3293a1317247c89f2f2ff2f4b0e15c43e9cc84adc6bd92444a3e69481c35c3ec67d29dbcc49914e910d00d0b4f1ea3bc16337b5239426dbbd8082fb3ed17352f315a93303b66eb1812cf3b49a33500bcf5951796e4eafd130452457a50ba7038f18dad0c6c119bd12d30c4b65ccaff430a6ae8691b1502ed1df45381b89288e2a79f83e093ee64301e0c2870300903b0cbe975f27896f15ef354c2678a5738011e9730511c580b1421f3d78fcff6fc4f34168a0d87690ea12ef1d6947ef5c11a7a96009be3a7f4ed163cca30f02d1273fb8f4dbc5af2b6da7c1a9a0da11a25ce66998fbb8db8376229c335cf0fd2ed8c0470b243a50d4925a62bfeee6832d34d3293a1317247c89f2f2ff2f4b0e15c43e9cc84adc6bd92444a3e69481c35c3ec67d29dbcc49914e910d00d0b4f1ea3bc16337b5239426dbbd8082fb3ed17352f315a93303b66eb1830724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f62e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd606dddf9bcd0c2033836249932bf3ce970b3c1b1026f23e8e76c0903e838283321a92f6a61fce846b25c83d8fbcb76aa39feca1dc39a5ea305ae3ae246a618d053cab6d197f17180e56399a722450928f6d9116af63172aafb8dac171d79684af20f0072591fd810e96d65b79ca90d674ac9a437419480fec57f01490c6a71f531de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb085725edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e03c5f354a6809f5d8fc0d754f10b0845dec5a231524772141e6eba5461ed414fa0552acfb4136a8687c086867198f336159a70e0de3347500c25c57abf0d8fec12e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd630724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f61a92f6a61fce846b25c83d8fbcb76aa39feca1dc39a5ea305ae3ae246a618d0506dddf9bcd0c2033836249932bf3ce970b3c1b1026f23e8e76c0903e838283322e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd630724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013f04746b17ecc54f77bd72585a684e8fd03d61aafe9a442806af881b3210ae352b848eb10e9fdd59fd8c4de2526a6ca06d4ddc1141e84b695ae562ed60e64335025d6ea885215d0616c1ddbcc9104ddb5829422611d8c6bb4014f377b168c11110913e2f49daffcadbdd9040604f7943e36491ae951f3a1f3590c63cfe1b3bda1f15ab20061476ce9aa338bc3af0bdf901064f55847f47202dd4933248e9dfa506e0128752f4c77886ba5d531aef3d916a8c7f33926e7e7eaade0d218a0a580e289d5c26146efbb8b80b7c60c0616da75959fbd6f33b39a419d96ae3b60da6ad03ead49eeebaed8b0c8887189ed793cdd39cd1bf2f728e7cd0a4de0ac40cc21f18774eef9ada6ce3f881138985888be874da78a7926a3102ce2685f60f8c686a3a3ac4d0b3c443c86f7887a73230bb95f13b18138a2ac748c8a3dfadc3e8bc4704d882b645e0b51c301bbad7ce1792ca0af622b5c54b24d8709232705a9acfec31a581c646f4f1d9f4e275e595790818f819570447b99a4b0047f9064d1aa8fa1084487d01958b22500d5783ca00e6f1c5c7128548acb7043557fcce0e90a23e3ee92f0b88019ea10d9a7586e27ae525219f3d5a6a7a1c0bff7083033722758f3edab8a35df757cbd4bf9ac2f5119c89a1b215c871c13693296827575bded2031bb44fc94108eba44e98be22f7b693dd046de296c1fadb7659969a43894855f519a9ccc9665fb54d4f9fdce0598492b9c9d18b2d0c32a921fcb87014e0cad92b2c0c1664fc7fd450b1a01474530358a687391196c1a91cc37ca89931df0dc17f3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a60340145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd39a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e100065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f01202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b0520e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f07173eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a60340145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd39a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e100065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f01202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b0520e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f07171daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41b0c3367befdd9a23228379436fc2a4d6924fc2c37a8e525e8d89ba3eb52755414c0638803c42c3e8a992286d7a0db3f35b53d1ef9e28dd5cf90d2b16fe7461c3780608b24a9456ccb9f2045db37255b2c52432e9a501fe468cb58daa56815043e67bfa2358232f285f9c6aa48a670ae33bc882dc8695475516879500f531a3b1d4002fcdf1ae6d1befa0240fc69b5e42ba992ec68df670cfff2aac3ca7f31191ca473c5897ba6afac2e70e9ee55b99f57af0cfa788c89cc309d5340dbff5b1a31870947f95bdea9c3c192cb3bbf7effe29d0fb7bf7284c1d7e0d66acf118ab01040c9277dc8c6351fd039b70656118046072e337c872d37814fdf794ba768ca328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f14c0638803c42c3e8a992286d7a0db3f35b53d1ef9e28dd5cf90d2b16fe7461c1b0c3367befdd9a23228379436fc2a4d6924fc2c37a8e525e8d89ba3eb527554328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001297a2925b86ebd281dd0242fd33fd7b431b7f63d6dc0b02deab5f4c74397d87724cefc30e5dd8624c3cbd01a99119d458c940f3e914a786ede765d6ff9a1250507e70f7da3875613b3f6aaf5a67988b08fa00fc8bc850e3fdfec3e38eb7fd44631fdaed1b0e13c8228b7001a4ee6a9b90d0c7d55e3f50cc9493ec43ad37ed874180c2787fda7438b2bbdaace6b7732f5818c7603906efd46347aa11cbf52fafc146c767d91de08ed68aff5bb76e22e34669207b4027748148fd2f460d93dbf253088351bb9cb73760969cae0772a22cb26799509a82193128592b4c48cd746203680d7ccca5b2160b3b1172d776ed871674c100e3fe5a86b8c702e46f30d43ab22dae2687aa531b16d537796f1bad9b85c03901f629972a2b05ec20b9077e2c6029f32f1f51afa93cf6a44ac7ace3c180315e052af956b7a98e470fdda389a7038c6488a4392b4cb74695b3a6e9a45e9709e8a7b9c126d54de2c4f2e935010fe035398fd74ddaba47b9c279635f7c4f088b2b1325b38c9e31bcceee583d685392d42ae22e26d0ac91e311119c8941d5a65d5b893524d753f997b17adf945b3e8222ac965a72a1efa3f76bbf0e3e7aebc8190974c60d95dd09b4d68234c6d63e5347fc70c0b90571f24f8addf4ac015375de58146ce807c5ad06d8b4b44137768152643b7b10d03d52adf0d751ba01e6a04f74f2e472baa328fea08a192c435e7389c4419858b12752ca473a33ca27494b7df76bf6f4f3c18c852f0dca6d06ac611bebeebfd945a733cfb112bfc5adccc71a90f719eaaa2e9e3c3ec251d8b498f1043c1060e0b904d84046899e774702473f9eb889953e9ca842ac3dcb8fba3be2fbc3ef9f1f46fb27bfb9766188b8fdbae4cad736ff90f5115026d1047045c431152c51e4639d18394160b01854630b6219b00aef55697d8fba8a2629cea32b52ead3ae1b9c62e7c6be9f4fe7ab9cf4a00ab984d13f661429d848e8a6315cd4c169dd9975f211791e46e37079a5ef38e85c06a6ec163fe21511dfb001092fd8829622668a0dee86e1b91c8f865a10c719c862e8d47e8fafa480f35ecef6d027931153ff4dba575d97627132603dac1c87a7b7b2dbda6fd8afc68b61352def3a70eeac00b245a8a2689d8ecd9fc253e37a7cb1dce4ba5fb909cc47ad9ad210c5a1043c1060e0b904d84046899e774702473f9eb889953e9ca842ac3dcb8fba3be2fbc3ef9f1f46fb27bfb9766188b8fdbae4cad736ff90f5115026d1047045c431152c51e4639d18394160b01854630b6219b00aef55697d8fba8a2629cea32b52ead3ae1b9c62e7c6be9f4fe7ab9cf4a00ab984d13f661429d848e8a6315cd4c169dd9975f211791e46e37079a5ef38e85c06a6ec163fe21511dfb001092fd8829622668a0dee86e1b91c8f865a10c719c862e8d47e8fafa480f35ecef6d027931153ff4dba575d97627132603dac1c87a7b7b2dbda6fd8afc68b61352def3a70eeac00b245a8a2689d8ecd9fc253e37a7cb1dce4ba5fb909cc47ad9ad210c5a291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa126c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b3bede82a1ef51d40115086dd2213afb9fe7882b2741bc04a7341075fab56bcb4343eb86b56bb3939dafa46ac624a5b45ea704c4b192f810bfa86c6325ba37a541bbae18983592ea009d26ddcd2aae567ef8ab3ffcca434207997ebdc11a661320046ea7e137d4a3bf99df6b3c2c31ea4a10063e1a37556218da07592b2539d091883d6e1d3620a99d127d8cf8f9f75ddfae5984b4c8b4ceb80eeda5649fd19223ba6fdac0b77d30417b290295f5091155d781ed0d0a66a28e5a091ccf9031fab3319a2a83a6dd65b246c9f7d539b67b09c3b0afe9bcc31f641e4746e726732ac352254da5cad22b2bb31a255d43899f5be174c33d783688ffa31918b2d0e604e26c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa1343eb86b56bb3939dafa46ac624a5b45ea704c4b192f810bfa86c6325ba37a543bede82a1ef51d40115086dd2213afb9fe7882b2741bc04a7341075fab56bcb426c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012719559dffa53f78da0155bb28d1507a929316a24968e5eafa4268132d74a74e00a86bc3c3cea52cb0261a49a4ef43aa2d1634150ff783c9a7663d57ee93867f331b231586478b0586a67a461e4a7cefea358599dea3d418e1905b3134f173830c923ae78bdaff4be091fa9fd2dd45c775e3b1ec5d0531ececc3fa00cc1b3ddc170770535b42bb85d96215ae1f6448d54ccca1af0a59d3290eb1808e8b825d7135d96f5346c7fee33b88327de6933f2429e0857b3540bbd83b58d1db88704aa70cdbdd0c8d047325aec00d4172f3b2438d0ddde0f94caa553eda5ebb0b0af623082f7b63b92c90b858799612e668723c2316d9fd8f3783fcf50b4842891c8c5c2f8e1ba339d4c713d31edacc2f76bf1be30e0ac9ab0c6041a9cf700fafa2e34502f11c2b456fe3096c591ef984cd72c016218c456751f66fe836ca4e58b3b2ed38789db12f180832b126bc4920ba7242e25e848e244071f6a569ffb7149d906908763d308a0102ba98d2247b5a346e2788f99f98bb2fdedb41dc481c181edecc2b56c410770ec351114ad3e6aed505473faf7bb8d489226cda74e8fd56690e542416b378128866724c5cf923fda6c6cfa7b6d426de9db0a35a5396d3ef4a0979293bb73b2174b5123d59d7e5c4f378749de4afb88d17a6e110658c04f0d996ee1443d32dfae0e33534892eae94af2e2a0fa2ee914e0a81acc119e1305b9ad3fe26a165ef67211a5cad17c79063f35b92653a348cd64c85e8bd9f3c8af823692b3ab0e69fdedf4f3e21f3bb850642a553f331e2b6512a452a6c2583f0167c4748336fb9bf120e6e999be24d3eee86e847331aceed00092b461c5bec47147aa79a0c904640edf19166641db2c1117917b8ef2bca0f0943cdd57cd144a5eb855867012ea0bb5a4829000b6b823aa8a28963766ba6b0daf9f3f02916d9af666545fe3ed15f44a5b7d6fff4947dc5575d769cabdaf24b2e53052b7016573d999aba0305e923a8c368cd0039198b254b2caef1501a417446e1c3b0cd72406cfffa5df63a16dc573c9732ffc6e674dab4d3510ed22c5787c26b356acbbaf0800005a20b1d8db24bd10c01011d7fb7ba77df6ab6908347456268d274033b4220ffe3d5ce22724db42ef3fefee28048458820954991c351b6a6e426a795f1eecc001c2a33336fb9bf120e6e999be24d3eee86e847331aceed00092b461c5bec47147aa79a0c904640edf19166641db2c1117917b8ef2bca0f0943cdd57cd144a5eb855867012ea0bb5a4829000b6b823aa8a28963766ba6b0daf9f3f02916d9af666545fe3ed15f44a5b7d6fff4947dc5575d769cabdaf24b2e53052b7016573d999aba0305e923a8c368cd0039198b254b2caef1501a417446e1c3b0cd72406cfffa5df63a16dc573c9732ffc6e674dab4d3510ed22c5787c26b356acbbaf0800005a20b1d8db24bd10c01011d7fb7ba77df6ab6908347456268d274033b4220ffe3d5ce22724db42ef3fefee28048458820954991c351b6a6e426a795f1eecc001c2a330a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac629bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c3a1fd91331ac8e97af8356a18902d5d6cb9303a89611fe8d9d6f55ec0f200be1120d8f2f9cabf36cf829e0210d653a2833c4df016bdce7f4bb8826eb6390d7203cc6685db8543c231286b2845afb78b7ce5da7711fdf1afa1599b0f8a5e75f2d3b63fa20c08ef6946b68d1be6e6578e912c24f6d15ed51fa875cf830c4f8444e154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f43ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c7941ec72c0c20573b5141e5d40e17d7293f3bb25cd5f92b26d68aa789660ac49eba06b8d7221f316ccd211c30eca2885f3786348b037a8ee4b5e05159fa94c46c3c29bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c0a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac6120d8f2f9cabf36cf829e0210d653a2833c4df016bdce7f4bb8826eb6390d7203a1fd91331ac8e97af8356a18902d5d6cb9303a89611fe8d9d6f55ec0f200be129bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c0a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012ee7cf40e9a75aa38cb64e66af9642a9169c9731eb57edb6b53369ec0446208c3b1e6a9982481bb6506650697a5dcd7822a320c657d46eb36ad741bbcadfabf11eccdedbc1a2134506b3b008b1992b2ad709e8cf9e180e564811ed9430647cee163f9bec6aa1ed6b98c97ed5c43deb881684b6a033004a73a655246bc4aa1d113206bfab9e791a088273c3ac3afd2e006f31ed3dbf2c54ecee900caa7a1a108020c70aea841759df5538b07c41016d329e965a95a9129f311d455f5e33d4d50b053a2d5104659714a47bfa3d4e0b1433021154efd45427a4590fe4e352ace9e7072e5903b5de133cadeeb465ab50a579fdbeab329bb363e0168f114701cad000277e93090ed9b5553571d0e7c5f3f44409e353f07b2402116c2ce4a9ea002cd400f43caf717d7ee4cedb6d07b1f157c7b54c4ea0e05e1721b14cc7e16548f90e12f4d2f5a47234506fdedc1cd8af6956bcd02fb698ab3ca4933a2d9e47a871fd3267d4e0c246875451ea6a2bc5e7eef5db3b4b37d1abb781485e78f398a6f6cc2d597b28717fcaa113b9e6328eb6b71ef9e0ea45b1890c30abc1e5dda62074002213fc6018175f2249ede6d81dc514f7ed85659a019dc6df890699f39f92a3cd1b538bc9c0abc6c5870fd9c5b7f0d839cce91198243bc8f966a9c8368c64cf7d39763f544375f7303d86992074646c787f09ee431a3a345f8d36cc3e6cecdbe51a0543ef5de1fa625abdd1f5defd3b7683ad368c2a8396501774e12f7420737223d0f543b2f69bd1cffecca6d09827df96554e5202157e090c6b17d32fed73463054c4fcf1c6656efbdf088592c1e3415b6c22c84fb1ee966e65bf8bd5bf46f20fab3b030e399a910420f77a6d3e1cbec6da7633b99b0a852ac771612a40b90f31a7d8f0b8dffb2aeb5b2a9bddc970466248e2f57292bd9d5c752af42cbc62b70e58270f472004d514a4d56422368fb9bffdb60696ba3b7e3cb805f8d3439d4a38473cb39c5fe7d698c7d50b54ef315f8498a3d720f6c8c002c243fddfaded9007b8c34c63a0182967382af4ab10cea09dadf524e856305b966aecef2052127119642f820ddf8730fbe72938a8abf6dd0de0cf437f9e0751a91690415e65a3cc269bd07df22078cf0418d6c7575409231465c9b889aef1c9f016a0aba19a5c353054c4fcf1c6656efbdf088592c1e3415b6c22c84fb1ee966e65bf8bd5bf46f20fab3b030e399a910420f77a6d3e1cbec6da7633b99b0a852ac771612a40b90f31a7d8f0b8dffb2aeb5b2a9bddc970466248e2f57292bd9d5c752af42cbc62b70e58270f472004d514a4d56422368fb9bffdb60696ba3b7e3cb805f8d3439d4a38473cb39c5fe7d698c7d50b54ef315f8498a3d720f6c8c002c243fddfaded9007b8c34c63a0182967382af4ab10cea09dadf524e856305b966aecef2052127119642f820ddf8730fbe72938a8abf6dd0de0cf437f9e0751a91690415e65a3cc269bd07df22078cf0418d6c7575409231465c9b889aef1c9f016a0aba19a5c35376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec2ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b203fc1dd0a13bd5456cb5eb5891a438e996ea04bfb6be14b9d3f424143cb7d10c619fecc3536a8d4db49740272e0dbbf7b6834c562baa120ecdc9ca4f1a53923322cc2720a52f1c8b3e645a5a14ab153afd19f76d4391f99ebffdf81ecf51e775d11f76b80533490007d130518a294847325d3679c416406b0948885d8d5135f3c2d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd62dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a1aebe5602a8f012b625ab7294163b3f936535be6d1710961e568ba8e309576381b3b6514a5e576d3bf2166ce9c7de55051cce16420aa35ea7603aa0f35bf89c42ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec19fecc3536a8d4db49740272e0dbbf7b6834c562baa120ecdc9ca4f1a53923323fc1dd0a13bd5456cb5eb5891a438e996ea04bfb6be14b9d3f424143cb7d10c62ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000114748bc9e9a436ddb42ff39dd58dff74c3a95999948cf964fd8320e22ebd37f11d7c245924565ea63f328ec3cdc8a75fb5b8f40620db247169b30de13a5f67681ff71ff943b01723dbae8eb4270acf8754bedba40910c8f626d8bd567cbddd05043189efc387e02e23c581ef41179054ac9c8f8a1e00d9db2995d81eb60a46491f985c473c95a8599f8e5df94365ba8cff47d8d2fac9fc7d1f342862d6df20dd3d4eb3211b5fcafb155b272cdf111971823cdd68ed4e9b9487d36184d835635324448025650fa99db7ea47d6189c9dfb73fefec3390ce553547afc07a710e32836a5e982fa498942dd8813ae1f6b09318d10c4a993d4a3f860b62753e5623fff0baf3a21e8e7fcb337f89a48566c8f41c56ea46dc1f62d8f1ed07b3ef92da01e0c35773c0156b2e570d3a309c301f975de36543a62e72af4a27774a71d3be8521cad5f64396a57cbf6c140440b585cbadf7fac77a7d9be1b504b1024d305855b2ceb440dd0d4826adde4ce8a3e1f27096b514aed4a3a83e12640f8fa272596573182652ef4d3bc310e6a87fa34cafc35f83ea3b5356312605cf7c5cdbe9f10d91deb125994c36d924f3d451077b0cfe0ef27ac2a7dc3c0afd7d0ba03871406f4153ff2b7f4820a4e7bd3c8729539637ddfbc166805dce7616509a281759b5c3a20a2a06bd6ec70636fded53cb97a656c377f3f993fd5e5cfc27ef55a9d507d3e3893a3f47c8f4bb0393b432aa6425f95c9e02a189b1b4bfdbb8717a56d51345a094d094452ab7793ebb41687ae4ac74d8b09d563e7372d02ec7e074445ef9df0336fb9bf120e6e999be24d3eee86e847331aceed00092b461c5bec47147aa79a0c904640edf19166641db2c1117917b8ef2bca0f0943cdd57cd144a5eb855867012ea0bb5a4829000b6b823aa8a28963766ba6b0daf9f3f02916d9af666545fe3ed15f44a5b7d6fff4947dc5575d769cabdaf24b2e53052b7016573d999aba0305e923a8c368cd0039198b254b2caef1501a417446e1c3b0cd72406cfffa5df63a16dc573c9732ffc6e674dab4d3510ed22c5787c26b356acbbaf0800005a20b1d8db24bd10c01011d7fb7ba77df6ab6908347456268d274033b4220ffe3d5ce22724db42ef3fefee28048458820954991c351b6a6e426a795f1eecc001c2a33336fb9bf120e6e999be24d3eee86e847331aceed00092b461c5bec47147aa79a0c904640edf19166641db2c1117917b8ef2bca0f0943cdd57cd144a5eb855867012ea0bb5a4829000b6b823aa8a28963766ba6b0daf9f3f02916d9af666545fe3ed15f44a5b7d6fff4947dc5575d769cabdaf24b2e53052b7016573d999aba0305e923a8c368cd0039198b254b2caef1501a417446e1c3b0cd72406cfffa5df63a16dc573c9732ffc6e674dab4d3510ed22c5787c26b356acbbaf0800005a20b1d8db24bd10c01011d7fb7ba77df6ab6908347456268d274033b4220ffe3d5ce22724db42ef3fefee28048458820954991c351b6a6e426a795f1eecc001c2a330a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac629bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c3a1fd91331ac8e97af8356a18902d5d6cb9303a89611fe8d9d6f55ec0f200be1120d8f2f9cabf36cf829e0210d653a2833c4df016bdce7f4bb8826eb6390d7203cc6685db8543c231286b2845afb78b7ce5da7711fdf1afa1599b0f8a5e75f2d3b63fa20c08ef6946b68d1be6e6578e912c24f6d15ed51fa875cf830c4f8444e154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f43ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c7941ec72c0c20573b5141e5d40e17d7293f3bb25cd5f92b26d68aa789660ac49eba06b8d7221f316ccd211c30eca2885f3786348b037a8ee4b5e05159fa94c46c3c29bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c0a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac6120d8f2f9cabf36cf829e0210d653a2833c4df016bdce7f4bb8826eb6390d7203a1fd91331ac8e97af8356a18902d5d6cb9303a89611fe8d9d6f55ec0f200be129bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c0a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012ee7cf40e9a75aa38cb64e66af9642a9169c9731eb57edb6b53369ec0446208c3b1e6a9982481bb6506650697a5dcd7822a320c657d46eb36ad741bbcadfabf11eccdedbc1a2134506b3b008b1992b2ad709e8cf9e180e564811ed9430647cee163f9bec6aa1ed6b98c97ed5c43deb881684b6a033004a73a655246bc4aa1d113206bfab9e791a088273c3ac3afd2e006f31ed3dbf2c54ecee900caa7a1a108020c70aea841759df5538b07c41016d329e965a95a9129f311d455f5e33d4d50b053a2d5104659714a47bfa3d4e0b1433021154efd45427a4590fe4e352ace9e7072e5903b5de133cadeeb465ab50a579fdbeab329bb363e0168f114701cad000277e93090ed9b5553571d0e7c5f3f44409e353f07b2402116c2ce4a9ea002cd400f43caf717d7ee4cedb6d07b1f157c7b54c4ea0e05e1721b14cc7e16548f90e12f4d2f5a47234506fdedc1cd8af6956bcd02fb698ab3ca4933a2d9e47a871fd3267d4e0c246875451ea6a2bc5e7eef5db3b4b37d1abb781485e78f398a6f6cc2d597b28717fcaa113b9e6328eb6b71ef9e0ea45b1890c30abc1e5dda62074002213fc6018175f2249ede6d81dc514f7ed85659a019dc6df890699f39f92a3cd1b538bc9c0abc6c5870fd9c5b7f0d839cce91198243bc8f966a9c8368c64cf7d39763f544375f7303d86992074646c787f09ee431a3a345f8d36cc3e6cecdbe51a0543ef5de1fa625abdd1f5defd3b7683ad368c2a8396501774e12f7420737223d0f543b2f69bd1cffecca6d09827df96554e5202157e090c6b17d32fed73460070e339f39258d62d9cfeedc219a1265b0a9daaed5ad56f7c18299e8f753a533f8f1cc60c6da729d26301123de65ed9c73bfb511bf223ac1d15074e708ac5ae02347021c1dbbc2ee410faa4ca8025bfc7351456a2c62b2d6c78d018cd4a239f3dcb8fde3e2443d11bef055b357fda405b1184a56686cdee2cb460d432b5dc620b0630a8c94aacea7454e537f480bcbee40965b12dded7e31e5c107c0272b21b34f9cf5736b553158bab1ac80b7f43413e3d334adb6e21387ad12070fd8d4de6371ef34bee75609445a87a17c683afba742efc75e55a376f97cc526c0c3d7a8708e10cb4118a9f6bba5785e8397c5045ae179c8623f2c1ac0160de80f3c2857a0070e339f39258d62d9cfeedc219a1265b0a9daaed5ad56f7c18299e8f753a533f8f1cc60c6da729d26301123de65ed9c73bfb511bf223ac1d15074e708ac5ae02347021c1dbbc2ee410faa4ca8025bfc7351456a2c62b2d6c78d018cd4a239f3dcb8fde3e2443d11bef055b357fda405b1184a56686cdee2cb460d432b5dc620b0630a8c94aacea7454e537f480bcbee40965b12dded7e31e5c107c0272b21b34f9cf5736b553158bab1ac80b7f43413e3d334adb6e21387ad12070fd8d4de6371ef34bee75609445a87a17c683afba742efc75e55a376f97cc526c0c3d7a8708e10cb4118a9f6bba5785e8397c5045ae179c8623f2c1ac0160de80f3c2857a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000123947f204892e06ab1520ebd3db2c70e7017ba6ef91f100c1a4d1e95983aed42000000000000000000000000000000000000000000000000000000000000000016eb661adc0bd75f8671b6b35469c6b19c01e509e4e8d2544302029a850f29c6250a17192d335c2019d33221571844872016cff5cbda9b820fca59e724d502bb02f6899e9600716cfa1adb1c190c3cad6138421c92ab4f52fda2bf971933c0090e7e2de006f09a30f68c90825ce6b9505e4bf1c5b114eb6c16da00e562a1b8eb19e3cd430a688219def940460d8111bbb2579d12e197eaabd9429f6778cb78c00533707a10866f6a7af9950cbbfcc54c913416c1107bba384d4d74e7c984e77c0ff4dea5b7c29830bf1466358164523b01a575a9cac775f63ac454df1212969c39f6275002d8763aead6f5952d84cad5529aba06196dc2e2f0d1eafece8740983589e18252a676761d1ab5cfc7bf5f6f671f5a81a6558c6e55f7de31bf12ae7e3db2422c6c457433785c245b74ac7b9a3b99c20dbff4688f941d40dd9db2a73606a51e2b010c99c67233702a0c078749652e49dbcccfb7c75ac87e3db2ff155108c8595d888a8ffceb745ce0a07444cd5ff16d07dd0a222d40d2d0a692b4027b16bf8c2515ddfdff1dc6c078c053f9fa1b99f542067455b006438339aa9ba43d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b9e758ae3cf4a360111446f6309d4e0b97c76a054c3cef3055e7cbfbf7586fc04618a751c30b5c9feeebb909cf62b1f68ca225bb4892a2893ceb42d408a79052a184bb6730c730e0556562cef3128631653ed31829f2650b623ac0abd4ba2e815e7b4498cf38cf1faa9a9d310ced79d0bf2abca86add2cae30984e242b45d1912797a903f3e3f461aafaee0abf5c9ef08cfd7037134d440c32ac96eb27a2e852d86856fc0c1c0b9e550511f540a36111976c1f8981824dad602677e4d85d17c1c5f64d13c373c5e856e6a635bccf1ab09c89a152cbb2c2836a8be3c7c62e89823a09b2ec3c8c3a17a91959ca4330e55187dfee6dc91ccf3628472b0839d17693b9e758ae3cf4a360111446f6309d4e0b97c76a054c3cef3055e7cbfbf7586fc04618a751c30b5c9feeebb909cf62b1f68ca225bb4892a2893ceb42d408a79052a184bb6730c730e0556562cef3128631653ed31829f2650b623ac0abd4ba2e815e7b4498cf38cf1faa9a9d310ced79d0bf2abca86add2cae30984e242b45d1912797a903f3e3f461aafaee0abf5c9ef08cfd7037134d440c32ac96eb27a2e852d86856fc0c1c0b9e550511f540a36111976c1f8981824dad602677e4d85d17c1c5f64d13c373c5e856e6a635bccf1ab09c89a152cbb2c2836a8be3c7c62e89823a09b2ec3c8c3a17a91959ca4330e55187dfee6dc91ccf3628472b0839d176928a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e870b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc19dbc672f45c591d4620260144ca4c78e2a9b5b0c29f0483ee09c0cef1690f98325e65080be82714960db7414d9bb120e71d89a040970bc046d3e3bbea1285283f44c25fd17a50b971a117c3fa0049706d29179dae17d2e59e1ca03a77ab527d24b9719897af366a8aee83ab7091b28346d90278f468950f8d056030c45aaf4b3319a2a83a6dd65b246c9f7d539b67b09c3b0afe9bcc31f641e4746e726732ac352254da5cad22b2bb31a255d43899f5be174c33d783688ffa31918b2d0e604e26c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa10b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc28a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e87325e65080be82714960db7414d9bb120e71d89a040970bc046d3e3bbea12852819dbc672f45c591d4620260144ca4c78e2a9b5b0c29f0483ee09c0cef1690f980b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc28a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e870000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e64d7a5f880404cb22a773b945eeae13c8b70aaf8ec5c4b5e65584021baa35413339dbd31dcb0a7a9f0eba7ac759fc74385f811bc41d0c2fdaa0e7736dd045a2ee6a038180908ec2df479ee5719e3b075a492c3fd80a9e68429546f8a605476227b4590f02a32cf52ee4a9a20a266436c771df82ed4c056d01bdd6d6690f7020aa851ff68746b44441c071546895fdb3ee01f0a7c51e7a1bf4ee89ccfb823b3071d0a3bdf38d7510a0406fbf430b88b14a8e7a87a4b84eeb942a643a8f54d1635a879ee2eee37c0a21b3dae8062887d3a8f4572faad99efc39be3599c12d1db079eacea32029f29e03dd87c5c9d180aff5acb150a90cb09fed898912ea661d036c61bf929a9a8675cda5e495a81be4ae6b77f0ecbe4882df100fd0fe9edc4c21efdf22d26ee79c6f694cf5e775d59788f9c685004330cda164fe249ad44338138e83df9d68064f8ffa7ef7331abefe4d3dd388e1d81ff16cd8fa02c805507090c3a4cb96642ca02f552b1b0426c6c9903c402bccec99417fbba0a1757f7f3cf3e10a1c27d1ca603bb8bf9437fc84516ec2e4da307c06c9d5c43673cf1b0fcbb115cd5c60c7a83bfa21bd3c72cb386fffb38023cab666672d885189454021b1238cac76bf1f0e87abc4ce24480eb0865f1a4f7d669b6bcec95e3d0d5ca931c2d0cc5a8d538d1934e0e99ab396e494390f97706fc15a577c836666d0b42d9592f006389aa17a3f9d64671b329480fcf341c1453110e3012d00a040257959115df0ab34cad6c641fd87f5c965d692792cb2a67972dd011fa9122cc47c1e6ae823d09c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b09c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b39ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e2e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae9682c52dbd4b3e6e09e1ee805e79005f0bc5d1ef5ded4e43494b88e3889b14b0e982b262cc5955e65935d7d23c1946687e15b1143b0d92ac231ce3dd27d0547e1a618c9d9804d1af74f9e6525b58fa140978c05cc06abfbd4d3afdd2faa1c9c215527f0fe2bdb474e59eadb6476d794884dafac34e825f9c1ef1ac1b293f21ba637125c534548436e43bf17fe0c04c54749cf0b77aa2d2eed5e1e60a2d2e8abc0510461dda8d89f9244340ca170b871686ead72c0f6aeea72a59dcc85f5bf2f6861063701d30cbb53d7978d008cd3615854317feab4f9fde2db6584c6b4ea9b95e5068b7cb70c4e968fe90a321a45ecb6c221e359af3f511fa60b4bca61ced1e0ae2e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae96839ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e2b262cc5955e65935d7d23c1946687e15b1143b0d92ac231ce3dd27d0547e1a62c52dbd4b3e6e09e1ee805e79005f0bc5d1ef5ded4e43494b88e3889b14b0e982e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae96839ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e8194fcd5a97700e739a2f24cafd61b4491112661802452831399f4fe0c2c8304f1693e7f720fc0c3e18e66c0f74ed58aee9ea6d8ea1a90efa817954a6939683d467807ed19df7dcb1ceee2577eefd4e488a3c3c519bc76d0e4c2cb85206c0e2d6115c69853abf63db380f5e7d691c62c5a27f45b4c89b995ef9862f6785fb821940a88b1c2aabd86e2311d2f0f16003f34554a35b3cae9b830c25258d4bef21c7558cd368b780e43fbc21e63a2c0f9d6c3d00afbdacaf095ad69ad3c69e8a12ca6b7c480511320f61c38b01e256472115e384cb1544b7c6c2c1809fa6756d5305ca7610ebe8c0334c175749c19abf108e4a6592cab85d824bbab119e65411e3aa039b1d5849ce36dac25aedc8381f4062ac089c68ee62dd6428e1f0d566c3316ec15fcf1ac9caa211dd3405d08e01d84341f34d2680d29e84ee4680f0e4bfc050014b77c11e98c6a93b167065919941eb20a49513ac5583bb51cf96d9cee0b2af2f2dcb7cee2ab8e2a8bb6de75f04c1cf0f878528fc1ca448e58f9669fe8ff19973d43497a56cc8039c2fde9cefe0ca1897f3d9d53193ccd03467b4e269ac635d63a45401cd2f6dd6e0a0cc2acce0a45dcd0a215d3b9d367c53955f78c7d073e7305b385fdf1e74396fb4b21010478ea9706bfaa4809440d935417dbbc764d1b5056a52a88e47bb79c7bb73ad4e6877ad11d5462f9149f56ecb0ac0ae8d29e1858d0c3bb0ce172cbb5ba468bd5ab4a8293f62e449ac1f2153c56c6b9406ff1195b8d569bdad6892038a85deab533ace8629f62faa985bfeb64bd1fbf9848cc004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be90189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac4783e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b8907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb8198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d049004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be90189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac4783e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b8907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb8198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d049132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c83614840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d312621c309b8df1d6ee7cbca9bfcd74b2155283f7f40c031072555d9c4921004fa11368a5f1c57c90e2de4bea01fe3d14d78d2c113bea4189c5616e3288490080c960cf4d744869d6bb7ca44679edfd6ace4ee3f7c43864249b03768ed6a74a65a6a17dcd04956966bc87edd991719d6b3a0ba18caa2e4cd1d4bae3ffb819913f9ef299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f100220b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d14840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c836368a5f1c57c90e2de4bea01fe3d14d78d2c113bea4189c5616e3288490080c9621c309b8df1d6ee7cbca9bfcd74b2155283f7f40c031072555d9c4921004fa1114840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c8360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010417ce60b81f5d93402842298d3a4a6f81c1913be3733ea19018c7baa6c7ad10141c2bceea5020ec0faf6fb722728727252d1b6d2a9b5882c5445c2b1c18291e0bdb8570501fe074ca6387e5bd21b8246e6e92a65925eff87061b365aeaf5573327a75568ca78b3dd093ffb70d52df0270e5999bac051ad7dcda13790024b4e60625955caad9277e35f9c24f94a96431973a4b777dd684425b75989b42c338bf185b760648e239a0477c370353807aa28d91386c22a8ae8b3cd5c7929a4605f22497328cda46113060b00d82ee5e798f4e6f4775f3fe35d1fa8d1af0d2e128fc16168a45cff1a50180ce167417c4d22bc8cb5ebcba31de763bba3fbddab6f9fb3ed181d6fffd854adb6bf948933971033cfb55fc8347e8ca7716b0a60027a1022217f868f67cdafb1ba2f0f07050ff04ed3a5295a04fec2718d8cf5e8ecf871d17258ee9660e8359d89793be1db90d1ebf4ff54a29542a528ed627a8f258e76a3db0c518f0257c6ab70441614045cd8629a8a17841bfa296dbd743c1838994702f8e0e0549806a0878a53203698d8b2f442fa42c9e53b49b5561ca5f6fcde31e1fdf69834016bfbae5029b0742ee40e7a336abb314d31e74df66b571d5e534af1e4fb56ce2983fd5ab6d85cbc0e3f944dd84badb100294c496a16b8f1a1e0ea5121d885aac16bce04234bf586a69e1b70d39d763e8780d56544c30c3efbc4f44116cff76456b56c9bcd034ca67b4b8ca64e547cf1807cf810117aeeb2f8c05ca0a0768d40b7432e712f46c67d1cf522273565c1c15b982099958bc415bcf18713ff498a355e3d57461a0513b1e63619c2ea7aef6ee9413fefc07bf897bba23b6000b675caa1c2a8b9e5faec4e19c9e63f39eea051ab8e51c9d2571638445dc4b3fc6fb30ad732b45e821962797f0e80c602c06e283b07f8c8771f9fb6aa2b28a003904cf528cd4ba17de69d8680f17f3c21a9219859c798f11bb36f1955d4d773ee2e7f3633fd85d88a7eec5f7b4883d57c1be7c6d3e995040851e35152d7cae011d180c9cc027a27758113a084b77c2ca84da7f9c0e5fcb58a812b7ead283533a6e87c0f03f39d3ab47a9ddd686a9322dae547dfd051a22dde4d35569e36f620591783f0fc0c62c54b85622297956cdf498447e0c47def8bb485d97961c909f3ff498a355e3d57461a0513b1e63619c2ea7aef6ee9413fefc07bf897bba23b6000b675caa1c2a8b9e5faec4e19c9e63f39eea051ab8e51c9d2571638445dc4b3fc6fb30ad732b45e821962797f0e80c602c06e283b07f8c8771f9fb6aa2b28a003904cf528cd4ba17de69d8680f17f3c21a9219859c798f11bb36f1955d4d773ee2e7f3633fd85d88a7eec5f7b4883d57c1be7c6d3e995040851e35152d7cae011d180c9cc027a27758113a084b77c2ca84da7f9c0e5fcb58a812b7ead283533a6e87c0f03f39d3ab47a9ddd686a9322dae547dfd051a22dde4d35569e36f620591783f0fc0c62c54b85622297956cdf498447e0c47def8bb485d97961c909f2d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd62dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a24814e4fc4db6a41252ae13b604cfd91c0e9402633f45edd20bf70694bb1ebd40077e5fb96e4c541295b118291d98c7c81fb25e82959ce50f0f6e2140dc9b6cf11a7ebcbd7de1a58204c5573477a531c0a59e21ef22ada2803ed9657cfe94bb02d11f1bece483e5c430c5546a5cb8506ed18fc518858c674907a716dfa488ae92ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec36bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d57911d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec48901252dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a2d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd60077e5fb96e4c541295b118291d98c7c81fb25e82959ce50f0f6e2140dc9b6cf24814e4fc4db6a41252ae13b604cfd91c0e9402633f45edd20bf70694bb1ebd42dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a2d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b3f7b2c59e296eb5771ffa8a0513670c6690ac15ce4874cb1abf8c59282e5931d178c1ffbd7b43f8baf55bb7e41601e1ba014390e719b1df7312f7020cff8242e76e28009775d9b6d5ba313168a7b8935322ab49e52559512a1d7970ba8dced0cedaf38d8e0aeeb91a810769f3d42999302e60ef8f74e093050ce4bc858c82c1fa84db60eb2fb58575c1a45e3bd90e14639cf4c5864d53629d1549af3fdc65a2229e52468b31a7d99e0083b3edbef91ef31731092ce6514102a8b5bd68a7bbe25a05d5faea5a36f679188b861652bf9610d2bc752bf34e6ae07bebe0ee5c73030e3b610b2f58efd8da09fb9278f817a483b8b974bd69150f2af938190ab93dd03d4ee64f52c84157a248d5128068a107e5f3913becc7fe3a84be0f20f85841430e993885c5e0aa66e6b0d9f2655fde2a0c478ccb1a38e63f44fe3b1adb816fa380893e29d53313ee150dcdcbd0b1f96215ecfe3d40f7216761a101ce268ddec194ae4c07ab0980760c1c97043d51df673480d3ec7f8b78b7afacdbd8f644bbc2a21d19bdeef8f408fa9033c6c8d3ede480455db80c251a531f654687e2e2b87254ba5ecaaa79a82cdfec9ce3fee8d389f61fa043264816b02d22b68c784ec463d8445151fc71c17374e3032a9232f12580e18f7adc6dfd93259f40111d572c2020190433d08b119e4710ce74050e6edf815392ae9062821d0d64f594aa456f107c8d2897952587d1eae593de311cc758fef1a9c935794268488d79503c807f90ac5867daa8910807c0c130b6de81a34953e7168725a9e1ae3fd82ddb4611a523054c4fcf1c6656efbdf088592c1e3415b6c22c84fb1ee966e65bf8bd5bf46f20fab3b030e399a910420f77a6d3e1cbec6da7633b99b0a852ac771612a40b90f31a7d8f0b8dffb2aeb5b2a9bddc970466248e2f57292bd9d5c752af42cbc62b70e58270f472004d514a4d56422368fb9bffdb60696ba3b7e3cb805f8d3439d4a38473cb39c5fe7d698c7d50b54ef315f8498a3d720f6c8c002c243fddfaded9007b8c34c63a0182967382af4ab10cea09dadf524e856305b966aecef2052127119642f820ddf8730fbe72938a8abf6dd0de0cf437f9e0751a91690415e65a3cc269bd07df22078cf0418d6c7575409231465c9b889aef1c9f016a0aba19a5c353054c4fcf1c6656efbdf088592c1e3415b6c22c84fb1ee966e65bf8bd5bf46f20fab3b030e399a910420f77a6d3e1cbec6da7633b99b0a852ac771612a40b90f31a7d8f0b8dffb2aeb5b2a9bddc970466248e2f57292bd9d5c752af42cbc62b70e58270f472004d514a4d56422368fb9bffdb60696ba3b7e3cb805f8d3439d4a38473cb39c5fe7d698c7d50b54ef315f8498a3d720f6c8c002c243fddfaded9007b8c34c63a0182967382af4ab10cea09dadf524e856305b966aecef2052127119642f820ddf8730fbe72938a8abf6dd0de0cf437f9e0751a91690415e65a3cc269bd07df22078cf0418d6c7575409231465c9b889aef1c9f016a0aba19a5c35376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec2ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b203fc1dd0a13bd5456cb5eb5891a438e996ea04bfb6be14b9d3f424143cb7d10c619fecc3536a8d4db49740272e0dbbf7b6834c562baa120ecdc9ca4f1a53923322cc2720a52f1c8b3e645a5a14ab153afd19f76d4391f99ebffdf81ecf51e775d11f76b80533490007d130518a294847325d3679c416406b0948885d8d5135f3c2d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd62dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a1aebe5602a8f012b625ab7294163b3f936535be6d1710961e568ba8e309576381b3b6514a5e576d3bf2166ce9c7de55051cce16420aa35ea7603aa0f35bf89c42ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec19fecc3536a8d4db49740272e0dbbf7b6834c562baa120ecdc9ca4f1a53923323fc1dd0a13bd5456cb5eb5891a438e996ea04bfb6be14b9d3f424143cb7d10c62ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000114748bc9e9a436ddb42ff39dd58dff74c3a95999948cf964fd8320e22ebd37f11d7c245924565ea63f328ec3cdc8a75fb5b8f40620db247169b30de13a5f67681ff71ff943b01723dbae8eb4270acf8754bedba40910c8f626d8bd567cbddd05043189efc387e02e23c581ef41179054ac9c8f8a1e00d9db2995d81eb60a46491f985c473c95a8599f8e5df94365ba8cff47d8d2fac9fc7d1f342862d6df20dd3d4eb3211b5fcafb155b272cdf111971823cdd68ed4e9b9487d36184d835635324448025650fa99db7ea47d6189c9dfb73fefec3390ce553547afc07a710e32836a5e982fa498942dd8813ae1f6b09318d10c4a993d4a3f860b62753e5623fff0baf3a21e8e7fcb337f89a48566c8f41c56ea46dc1f62d8f1ed07b3ef92da01e0c35773c0156b2e570d3a309c301f975de36543a62e72af4a27774a71d3be8521cad5f64396a57cbf6c140440b585cbadf7fac77a7d9be1b504b1024d305855b2ceb440dd0d4826adde4ce8a3e1f27096b514aed4a3a83e12640f8fa272596573182652ef4d3bc310e6a87fa34cafc35f83ea3b5356312605cf7c5cdbe9f10d91deb125994c36d924f3d451077b0cfe0ef27ac2a7dc3c0afd7d0ba03871406f4153ff2b7f4820a4e7bd3c8729539637ddfbc166805dce7616509a281759b5c3a20a2a06bd6ec70636fded53cb97a656c377f3f993fd5e5cfc27ef55a9d507d3e3893a3f47c8f4bb0393b432aa6425f95c9e02a189b1b4bfdbb8717a56d51345a094d094452ab7793ebb41687ae4ac74d8b09d563e7372d02ec7e074445ef9df006d01f3ade4f2cfec3516f5ea8b8f750522715f3e10732041a048727b8b6a4db392fe0c521b0d3013cae90a1574708afd01f83082845c7177f28a9c547495b2622109c26578be0f9d0972cd94b9cd4919ac36dc36523fa148216a3c69b9138471def63d9a8741f062f68d326b4632b6e87832b38a428ff0717168d26646ec7ba2a530cbfb5bb64e112f3e03e7a1026d7c143f2d8e719f02f5816d10709d6196115acf3404a449b1eed0c1fc185efd9286102a623223308ec41165fe5f629e6a0139f3fbe8ca8f8655ec361386250c2365f7ff348679ac599ecea825c312e7ee22c60c0417357079aa13c9ec79daf3dc9c2c6a5b3a1b23381ac42ae90ced1811f06d01f3ade4f2cfec3516f5ea8b8f750522715f3e10732041a048727b8b6a4db392fe0c521b0d3013cae90a1574708afd01f83082845c7177f28a9c547495b2622109c26578be0f9d0972cd94b9cd4919ac36dc36523fa148216a3c69b9138471def63d9a8741f062f68d326b4632b6e87832b38a428ff0717168d26646ec7ba2a530cbfb5bb64e112f3e03e7a1026d7c143f2d8e719f02f5816d10709d6196115acf3404a449b1eed0c1fc185efd9286102a623223308ec41165fe5f629e6a0139f3fbe8ca8f8655ec361386250c2365f7ff348679ac599ecea825c312e7ee22c60c0417357079aa13c9ec79daf3dc9c2c6a5b3a1b23381ac42ae90ced1811f3d2ad1c5a84311902048eec5362fc54d0d1d9ccb0b08409046fae480f0b3a5db0c8e75409cfea4dee8d5ef0552162e0956ef2a6901d74c5dc30d8531f7fd750d18feb59e5cebd38751961ac5f4cefed536989e6b2d170dc6623897a3e613e6f61d48035b5dd27609a54b076f82eb0dd4a9e7cc58d8a35782c6196083313afe252b6cafcd3bc4e5b8c69471cd7bca04a4f717a6e20530fc461fa526b0175e2f412086b2eafdf76640fc5f5320e2730039d2f047b90cdd543c39fe58c2e01f06f731db538e220d9050deb695a20721092fd516be72dcbf54583fa16ac019dccee5387802b35ef46d465536c7a5125bfe9b85eeefae2986b2a5c1676fce05f4e000059566e6dec5172aa9a3d8a9347fd6550f6f1691a37f82eac53d94a6e7613a4813923ea18517c0e7c6fac4d117b9917c9f0728c9ec39dbb77de85b5c17f2c7f40c8e75409cfea4dee8d5ef0552162e0956ef2a6901d74c5dc30d8531f7fd750d3d2ad1c5a84311902048eec5362fc54d0d1d9ccb0b08409046fae480f0b3a5db1d48035b5dd27609a54b076f82eb0dd4a9e7cc58d8a35782c6196083313afe2518feb59e5cebd38751961ac5f4cefed536989e6b2d170dc6623897a3e613e6f60c8e75409cfea4dee8d5ef0552162e0956ef2a6901d74c5dc30d8531f7fd750d3d2ad1c5a84311902048eec5362fc54d0d1d9ccb0b08409046fae480f0b3a5db0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011ed202334f90f666ed0a8d4737350de57c42a5176e33ab573a104ad86be318a5071a30fa794ba702078665d0da48c1e018accf516f9736df63a2117c2aec1c2a29cb1588820fbd616563f974b0c2493f7f84b5386ff3f321002072cf03a3d6ba3630fb936564993605d834dcdc3612e2f35591ab1ad6941357061b3377fc334d3d2acaf23af01ef3f35590a84815d635abbb1f0fda56346179c0e512063255590cd81e6b35e9710078eabab682c25187713bd1d1ad2aba9a0fb742b26b79316b0c088c8bbf5e9b9d3cef640aa0a5f8510a57664a07bec449e55352fdc86bb36412af9d9b66aee4052ee899583cd80d662f8c59a398cf214bbe4d2f31a5a6d8123e341aa50eca492f9cc5be6fb34bc944d50997d185949ea7f72e8bee3209e557399580320f6738dfe790d5e9d29708f848eff029006a8726ed67e25ec177c8ea2901f969aa7b89cac166b30719ec0dc1fc0855ae70d9b977b4c67f75f05019413fb9852c38a87c712aeae60682e1ab7a4721008cfbad9dd1ceaf4c75d60377461d6bb872fe2aa95f1b6bcedebf520814ac4d2da58246bb31fca5486b809e60b73201bf158b6c8064423bfe2bed29c4023b19223a30e017de38233765c514b7162441da64fe05dd50898df5abd1b141918774580b03b3013a0b363617bffae4601e007165b8b4b16cfc1f995f42096304a5570b69043ca814795cfc54bd0585dc08053979b1b5ecd9656e37f2527be13ae4d242c328548cf10cca4a4d63c860112aac3a074cb3a9f9d9fbf8cdc30cca539ffaf89eb4ce7d4315e4051f2fe419ba09c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b09c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b39ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e2e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae9682c52dbd4b3e6e09e1ee805e79005f0bc5d1ef5ded4e43494b88e3889b14b0e982b262cc5955e65935d7d23c1946687e15b1143b0d92ac231ce3dd27d0547e1a618c9d9804d1af74f9e6525b58fa140978c05cc06abfbd4d3afdd2faa1c9c215527f0fe2bdb474e59eadb6476d794884dafac34e825f9c1ef1ac1b293f21ba637125c534548436e43bf17fe0c04c54749cf0b77aa2d2eed5e1e60a2d2e8abc0510461dda8d89f9244340ca170b871686ead72c0f6aeea72a59dcc85f5bf2f6861063701d30cbb53d7978d008cd3615854317feab4f9fde2db6584c6b4ea9b95e5068b7cb70c4e968fe90a321a45ecb6c221e359af3f511fa60b4bca61ced1e0ae2e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae96839ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e2b262cc5955e65935d7d23c1946687e15b1143b0d92ac231ce3dd27d0547e1a62c52dbd4b3e6e09e1ee805e79005f0bc5d1ef5ded4e43494b88e3889b14b0e982e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae96839ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e8194fcd5a97700e739a2f24cafd61b4491112661802452831399f4fe0c2c8304f1693e7f720fc0c3e18e66c0f74ed58aee9ea6d8ea1a90efa817954a6939683d467807ed19df7dcb1ceee2577eefd4e488a3c3c519bc76d0e4c2cb85206c0e2d6115c69853abf63db380f5e7d691c62c5a27f45b4c89b995ef9862f6785fb821940a88b1c2aabd86e2311d2f0f16003f34554a35b3cae9b830c25258d4bef21c7558cd368b780e43fbc21e63a2c0f9d6c3d00afbdacaf095ad69ad3c69e8a12ca6b7c480511320f61c38b01e256472115e384cb1544b7c6c2c1809fa6756d5305ca7610ebe8c0334c175749c19abf108e4a6592cab85d824bbab119e65411e3aa039b1d5849ce36dac25aedc8381f4062ac089c68ee62dd6428e1f0d566c3316ec15fcf1ac9caa211dd3405d08e01d84341f34d2680d29e84ee4680f0e4bfc050014b77c11e98c6a93b167065919941eb20a49513ac5583bb51cf96d9cee0b2af2f2dcb7cee2ab8e2a8bb6de75f04c1cf0f878528fc1ca448e58f9669fe8ff19973d43497a56cc8039c2fde9cefe0ca1897f3d9d53193ccd03467b4e269ac635d63a45401cd2f6dd6e0a0cc2acce0a45dcd0a215d3b9d367c53955f78c7d073e7305b385fdf1e74396fb4b21010478ea9706bfaa4809440d935417dbbc764d1b5056a52a88e47bb79c7bb73ad4e6877ad11d5462f9149f56ecb0ac0ae8d29e1858d0c3bb0ce172cbb5ba468bd5ab4a8293f62e449ac1f2153c56c6b9406ff1195b8d569bdad6892038a85deab533ace8629f62faa985bfeb64bd1fbf9848cc05583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee83aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a06130191191ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a882546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d579059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a63a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b1c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e23ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c305583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee83aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a06130191191ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a882546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d579059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a63a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b1c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e23ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c30b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d3e4254bae5217d87eae55fff4904382ad728515da29225c1b52c2a7e458f7990365c6077ab0490bcaa9f5627c0f5cde99a59a31864ed553d57b8162b46e494bb1e6a494cbf36abaf8b8a6a8de1165276533eb64441a7a8777834e338713e31483cc40f2563957cd02b5394bc253c4d0448f634cd65e2e2c3d47c95b581077a6217f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c365c6077ab0490bcaa9f5627c0f5cde99a59a31864ed553d57b8162b46e494bb3e4254bae5217d87eae55fff4904382ad728515da29225c1b52c2a7e458f79903feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011de9b43833ee51c21ff92c81d6fd2f50c3802ad659cbc629141a343698505f8c0ca081f647c3a9cb55af2191e325034d8e2940d9b79efc1c18ee9f0c4138fea5166f269f8e472b263338c159af33d7948f783bafbea141b1f184d144cada56c20a8f8e62d2f1306bbf2d43e17c0517dcfd32d7a38db1caf43a9cbd1e94206cc1298d8696bb2005af943a452fd8c9a1980f1cb9ffa2b50b8ff004c5318e84da8b1d78b132bf84510b91d7d719fefa47b1b6050174a845e4a21a1948455ed4d67039fda498248c0ae6e88e00c5bb72499f01eed91fcf0a8f20b0102dddec385e0e0fef6bffe733d3d4802d6157bcb75fb459a3fddd81f14279f85d0608e6259ac12c6bbab900f68a00c926bd02b763043eb93a1f8e4f8941ed81f2e4a26061919e20bad6e5ed7e32b427a948695375f7850ea214c1e2821b459f24701d11107c0623e5118034e43465b244ec6d1c1d68cb8b5e0b900de6a8fdd61cc01673e404d53f91b24e70802320f126e25fdd38ddf95f74a462ed0a55f6fdbdf0495e4250822d1d361d159fe3d131a99fabe76fabef558ab13653ba938fef93e17ff11f6b062250416b73f745f22bfe2d5ec50c202791db9ea95f6c3f8045349e515493acc7022cffda2481eb068d3e4d4058a2500b01f7053d1590df008987dc090ed3023b31183373aed342870969053de46eb2420ceca27eb0b66695b61c4c1f18aa75221f39419cfcf4fde686d12bc819adc83e781ba39e40ae430178a878f7a089c00f1283ca168f30a596b046a343283cb8aba63becd34c87237579e4b78935596d6208ccf4d3a5e93ecf17c6dce5a8ee2a604a4de7693506ce6caa2463287a5d817937330b2c5a16c130e839231a5711d59fd7f8b192d4462aaeef08cdc485a27e882c00c8223d8e3a0b76e2507c4ca6d3e17385850e0922081f52b5efca63d3875d13ff37ddc271c5f4891daf83b3592c1eaec113ee002af0fc467741229c2c78a41c03e8ab33c72239526b926d7f422366dac7ce5211c33d49d2061c2cf321a4ce23fc1754cc38ddc6ad946d9280bddc99477ecaa9f789bbd1c72714c00cde5b330c138b5802e3ab1e9c19dc237c4ab1020159d5a246364039e7c42b06bfa8380433ec74a7fd1c54e163e623dc83b54efe20ecc359c316b8e1b16905e64057c7fd08ccf4d3a5e93ecf17c6dce5a8ee2a604a4de7693506ce6caa2463287a5d817937330b2c5a16c130e839231a5711d59fd7f8b192d4462aaeef08cdc485a27e882c00c8223d8e3a0b76e2507c4ca6d3e17385850e0922081f52b5efca63d3875d13ff37ddc271c5f4891daf83b3592c1eaec113ee002af0fc467741229c2c78a41c03e8ab33c72239526b926d7f422366dac7ce5211c33d49d2061c2cf321a4ce23fc1754cc38ddc6ad946d9280bddc99477ecaa9f789bbd1c72714c00cde5b330c138b5802e3ab1e9c19dc237c4ab1020159d5a246364039e7c42b06bfa8380433ec74a7fd1c54e163e623dc83b54efe20ecc359c316b8e1b16905e64057c7fd2c9c5447ae1258463f3aab447a9f9906b7afbc722f2eeaa83dc7e2d2b05d15550da9914a1efea3e5e652d1bebf32fb2c4a8339fdf7e114fbb9026c3948d1e57b2f88cd896630976eca8ac22f2adf184cc2b4645146ab150c6247ed9a6d5f932316314ce4ccbe6c650fe7c0cd9b4e53807fa5d736a4dedd86d9482533997172103e2fec4c22bc0606f517e84bdbc4fc4683af0d0cc8e9a0d899c86c7a92f2e02201ca60058835e4b33bb84051b36cb487a4c816ecb306e5b4b0d20bc0aaea31ba18016098aa02665e1acfd881bf89573a1e3d6325e54235c9d8ace9a6067e91ef2dbe6d83ddfab2bb8ed281dd777263c51dec4d6493a42f57b175e1d9c27561691b32ecdb06154ad4de0590c2867c0b6df9c5abeae1a5be2bd2c68bbf2f7682962ac0ac6f9b58736d8b9902a0567227960edc30fc3065398d32cc71a5620401190da9914a1efea3e5e652d1bebf32fb2c4a8339fdf7e114fbb9026c3948d1e57b2c9c5447ae1258463f3aab447a9f9906b7afbc722f2eeaa83dc7e2d2b05d155516314ce4ccbe6c650fe7c0cd9b4e53807fa5d736a4dedd86d9482533997172102f88cd896630976eca8ac22f2adf184cc2b4645146ab150c6247ed9a6d5f93230da9914a1efea3e5e652d1bebf32fb2c4a8339fdf7e114fbb9026c3948d1e57b2c9c5447ae1258463f3aab447a9f9906b7afbc722f2eeaa83dc7e2d2b05d15550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011430f4f801a8271eb3d73408f7da99fcefa922515e93a7b46eec28b8df0c6a8f14dcf979cbf287a5de45d2b8e5ae0226f308f7a4da8aed189e8e2c79f7c37a05047dbe3bbcd6b2f21f4d6858282144a53ea60f0c85d4d55137824e314e9a270b0d233107c4a669441e6c174d705eb6c57ca8daecadf48d72a3a356cf946f902d270bc520cf996d53f9c3b60f67ab76ad6f23376f0e971314c45c66ddcee2c3f703d73eec17d2cb25f31a9c58c7a30308877062344d73b617a9bca49a636f0e6a3c1a60aaa0583eadd829fc0c66189f6e7f579c282b5c4b52ca1064ec00b83ef1345b1db4a644a273d41fec5d3bda9a19a694982be329673355e56f577c2cb6cb045b087472d374ec5a29ca57394a9a6c3f49031ae34198eeeaa99de73989a99931963d1023a63ec5126e0105d659627ef77fb4ff80c450ef6577983a641fa57d136210c5afdc091226029252f09bbcb510e3f8206904003fab3c50a2464e304e2b563fc2fea288ccb1072e9d514e038b3742e1f6a2495713a7611fc7e941f1842337e99dc08c781ae730af600fdc2f42821f6149f4c2ffa2da45a2b2c4b5325e2c358deac90ab1a876771daa9c9f9cd46546ee95be63d36d5a82dd1e80fde56f38caad08441e7ba811a0c1e900aa42b23325d1b7ac30be6b952c013565d8938c3bcc808adcadeb7d1a2fe347c991bdd472816784d42fbf0c4dc50083ac31dd5b0c6dc22b433589dad88e97a81294de52a0963ab2171bd51d106a89cf43f2417a13d270024c8df8ddaf303cedaf5905f902fa0d0b2544a00c725e4109a436276e35eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5600a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa10da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c8525044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b61584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff772a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a35eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5600a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa10da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c8525044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b61584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff772a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a3ba6fdac0b77d30417b290295f5091155d781ed0d0a66a28e5a091ccf9031fab1883d6e1d3620a99d127d8cf8f9f75ddfae5984b4c8b4ceb80eeda5649fd192224ff23c9ef564404035232cfac86bff1f167a1fec94aa581f2811e5a255aa8c206d607a831cfde5e13d364376489391afac7d8dd2c1d95a0d949d75c97a51e741dc393bba5987af7a09770b5534817ad1166f535085b6aba31e508f8cc4d8ed43e3e384bf13dfde462d8f3db4225ec5fa16abba8710b18a36e808962f7ac6f68291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa126c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b28a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e870b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc1883d6e1d3620a99d127d8cf8f9f75ddfae5984b4c8b4ceb80eeda5649fd19223ba6fdac0b77d30417b290295f5091155d781ed0d0a66a28e5a091ccf9031fab06d607a831cfde5e13d364376489391afac7d8dd2c1d95a0d949d75c97a51e7424ff23c9ef564404035232cfac86bff1f167a1fec94aa581f2811e5a255aa8c21883d6e1d3620a99d127d8cf8f9f75ddfae5984b4c8b4ceb80eeda5649fd19223ba6fdac0b77d30417b290295f5091155d781ed0d0a66a28e5a091ccf9031fab0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013e0291ccacd9446592a86d83ad35a2e584dd80b93c7c13047545729b90000ac91fcfd3b8ce8ac4fb3a1c7982e94afdd34ff1d8b7d3954cb49a63baffd5a1313715422e46242c9621968b743a47e6491cf92718ca2afaf622f313493bfb9bf733202ade52e2e33316acd09801357525c995676e24fe74b19301b80c7f668582121d27b9c80cb76ab8ad3f758b265e529a94afb3f7f4ad3d954cc3ff0ec70fd5b7261c75df981710ba8623a2aa6de23de24cffb50b98ebf450d8586d2e423834d42c737958ff6172e4ee458359e80e8af09a93fe2c8270c137d2a2ec6e6059bf4e27ee37a8613e9c277b0a89c65b539265a8889c46918f6b1cbcf0a6a981256cbe1c49d015215fa8951c0073a984f7169b9ec28c2f53259684cade813083b582cf28d8c929ed5151a128b9e20a01f3842ce71d28d9e976feb1eab61f3435e39b0204e4e0d9324d66322a34b1c104ca66eb943deffea994720bc1adfa26ccc9e49f3ba6dc38207406cdeb6c552906aa3b4f9b1b932e677684422993b3ceb91889782a150e43f7d34b24aecbe4fb1dafb928d94e8cdc79891331c01d23df74e0e74c2558694491c3de9eaedbe80f8ecc12ee0e17c303399dbfde74ab5bf1d0d230812e46bacd58414ad8b2a3e30de22b19f21eea42561fe35319defdd02ab95b03f6316f53ea46798045a68ae26c8114e454dba54eff64ca5150927a6dc171864f701feca56e6a4535a4738165df67126e35bab5c0267454e90241a3eae046339f042db534d10342d77a68a80227dea0e1e3815a4c8e4b041be5a7b21be964f3296b09a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22309a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a223022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c167cfef734a5fd046d46933e9ef83d8ee4eb029f5a344e2d13fa045055f26b2e2295afaabac21f4e0a11ffb4e8de9e5bbb1afbdd358923103fc7ddd9e92eb6ee0b45f4fb3203a579f75898884ba773de8b74c16da0c98fb3b4a53a4a4f9c399a34819967d4332e1af1d8e800d34bbb8e694c88b8f1d5feb0267be1d368a9293e174fbaaf88be79d412b9672c9d372a7d2fa63a6f94bf935c8b22a38f99927d5421fb658f6072cee97b6dab3dcbac82009de512e271ab489886ab5369ed4941f1093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a2295afaabac21f4e0a11ffb4e8de9e5bbb1afbdd358923103fc7ddd9e92eb6ee167cfef734a5fd046d46933e9ef83d8ee4eb029f5a344e2d13fa045055f26b2e04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011768fc0352b6294a4028a8e8933a6818697a8e06b90608a8a9b97070b47e316c2eca2cee5c74c37dc5b2da2fdf4bcf613cf7eb1e53ac41ae072a5e3c720998003f6bdfc13942191f3ce7e6b989957c75c1dcd57a976945ce83059a39000965e5157697ba7f39e3dbff32124e746e41e0c23d8815e96c68fdcba5d8043abae52f18c60c94f266e95422b4706c6a2a19d26f4861557e3f98dce538905a7bf07d241765a35c4e1e696934bed075d98a901392b56aaa0d8d68c5ffc7262e4843009607fa65e8a39eab8d053af531f12f38263a44451f163897f9baf9dfb382a9dc3403d2aab9a5709245ab684689b1c51ea0b27da49e3c9eb487dc7b7a3059e1b9b435121a2f265584dfb25c583274650a297ed121461d5d233420ff9c6a7223fb251bff12826a8b9f1da550d7c380894ef69d8f027f19e1a2dd1016bc51f7be3f9f207d58af6067abb1563e52a04842a326de160139eb61c328f00641833d13666c088535a94101b098a570dcf169ccc23fdadcc528451f2b4c1673eb4207c671662bab8b85ea0398583c52a433039575f609c2d199225296a36d4258a12c96a24123c1ec029f93916b215528d7a8e65620dda37e4690d43c6cc7862730191c758c3599890be1cebec06bd47ed8181ea45d739ce5b53c6df1e7cff3e4edcb15790820a09b0c6eca9cb55beb302c017661522c4a30a15457e54a4019f2034c5a7bc81536057523636f287193253eeb2e8ba8e329cc0a2950fed13f25f33ca144312f249261294175ba9709894ea4f33944b6538a025f7bc0bc20ecc601fd27aaad12115d66ca497f22362f624a448983cf73313d94e49457c6f8cbfac6bb70a4b1292ea29935b680ddc9d09db5bb767c308cf109041774f53222cd326a318f5b4ed816d301f36f7bab0eeceb7356af930d3fd3ed4f7adc69e9c062b8b0bc333775cc292cfe0c908454f113148ca9506cf2c04e5949812ce30f5b36748030ccc88a35321f09c12d6a574aa09940b16ddf423f015bf46a44c497a6546e42c000154cfb0de0f63ed295a8b55f66bf4e9220bdc120eaa491c488617544beee2cffeab3063a9b30c5e313b47522fe4377255c4b3a9ff7fb1f3bf00aecda9fbaf9006a80e40564cf3a1cec4b8add01bc88daa3b4c5824e9ddccd5cee2ebe8d75f3ff957f1d115d66ca497f22362f624a448983cf73313d94e49457c6f8cbfac6bb70a4b1292ea29935b680ddc9d09db5bb767c308cf109041774f53222cd326a318f5b4ed816d301f36f7bab0eeceb7356af930d3fd3ed4f7adc69e9c062b8b0bc333775cc292cfe0c908454f113148ca9506cf2c04e5949812ce30f5b36748030ccc88a35321f09c12d6a574aa09940b16ddf423f015bf46a44c497a6546e42c000154cfb0de0f63ed295a8b55f66bf4e9220bdc120eaa491c488617544beee2cffeab3063a9b30c5e313b47522fe4377255c4b3a9ff7fb1f3bf00aecda9fbaf9006a80e40564cf3a1cec4b8add01bc88daa3b4c5824e9ddccd5cee2ebe8d75f3ff957f1d1de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb085725edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e0361129f14f4b1aefd01185a3fe0c49f013dd96fc53d5e0c426559301a04dc26c0619740bd4eed98e73d3e9250829e5d95b25063ac7f1311918d1049e100bd16017fc8f74b8d0ce7f16db6861c1b227711d06bf7f513dc311e352313df4a2358b059ee4ca5843ca9dd6348d8a2d2f4192dade01a821d47e6e944b73d7a99b6e762e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd630724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f61b9d5a2a50c6d8a61acdf312b101a31352f3356636139aeb9593bce4d5ce2092004c37cf170d22355a2c252313a00e318136f39a3ea0096dd1ef1c2bb8c26fb525edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e01de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb08570619740bd4eed98e73d3e9250829e5d95b25063ac7f1311918d1049e100bd160361129f14f4b1aefd01185a3fe0c49f013dd96fc53d5e0c426559301a04dc26c25edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e01de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb08570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012ff579f0bb88cfaf75b0f802d2077a76780fcb1499e5f3af9af524bc942b7436328dcb4e8a26de0e6a391fb41c8dc557bddea5659535af451a2f99aadd88dfad0be6ced5d5672a8919440af5a6e94bed533ee7154589f7e2681a495d8850a2d71873b10c54a22568a9ac8d715f662e638f91cbbb52dd8bace82f052f9a26919406274fdc79e8ca62631790d0d79ef67699c81f38b597ce5c56def747fd40a1782d16613becc47df0ad0e7e6275cf77adb35e8e078f4acc774b764cbcfd540f5827a1e6442a4558166dd01b02b9c31272a13313ef48f6adf04a17d57449fd5df504dec39cacc5b95c2b7a3fa2842f87d4185abad520b3493c9736571f4f145c0b12c9454f0f57ece7b62dd7d28bf9beb7fd66e38f073b7a1b8535cdda683c1e4d30874a7b797469d90a42c0f55f2e639d797f56ffd5c8acf8c4f235f9fb4ed2e224669a476f804f35f7aed0ef0072fc512eb40ba0b7b3e7b209216ca070e9adab06845db3766c41f13f6a7c606e642a2e4b8685649543da3434a8d998883ac3f5347f540fd5af4d3a500fdd5a83f88c0f9ac93b47b07e95a02571e858ec24ea021aee2378b3e7dc890d97efb0288340074c9d149802a83d700f569778598e2dcb1ef6c85ffa37bb9088068156cfa4fb6ee2c9df6437dda4fb235d27142e8e804d3b61ad13c4c6dd944c955d818b6a5dcb501752a537a356f7d0792f4606f80f7d33d73fe3935457f45159a611c6e9f8ae2b74149f6c91ccd715fb2c2d8289793125d4f826119d083c98be6b2fc177e0a358ee5e85fa42425622f027d0e1caddc21961932c86c70d27431b51514f0a4e8ee6d185fb5db2d86e2d066bab217aefa8269e6cd37938f2d8bce4aeaeb0f5b1713b751300ab9a20ad6c26c541de8510593ee7dfdea1e341c44f8896968b3388ca5fd104eccb31410b47f2e96aa766ae47011820215e1cbe3bb077696974cc7735c275940f3e1bb810513a4782589951ba3a875f59297048d58daaf0f0b801abf355fab4afd2c260ca0309cb614501675f0578a0a6d68fb72a72550f0f47fe540ccc4be44c368a98519623658bbafe98a224a4dcbdcf316c2bc456b4b398085bc024cb237ef897ff83aa7c3532590704d71b5b234230ce93d43ba94b4c67f7a43ffd7b757d10b4f997eeb0fbbaa6f8fb2a1961932c86c70d27431b51514f0a4e8ee6d185fb5db2d86e2d066bab217aefa8269e6cd37938f2d8bce4aeaeb0f5b1713b751300ab9a20ad6c26c541de8510593ee7dfdea1e341c44f8896968b3388ca5fd104eccb31410b47f2e96aa766ae47011820215e1cbe3bb077696974cc7735c275940f3e1bb810513a4782589951ba3a875f59297048d58daaf0f0b801abf355fab4afd2c260ca0309cb614501675f0578a0a6d68fb72a72550f0f47fe540ccc4be44c368a98519623658bbafe98a224a4dcbdcf316c2bc456b4b398085bc024cb237ef897ff83aa7c3532590704d71b5b234230ce93d43ba94b4c67f7a43ffd7b757d10b4f997eeb0fbbaa6f8fb2a1ec72c0c20573b5141e5d40e17d7293f3bb25cd5f92b26d68aa789660ac49eba06b8d7221f316ccd211c30eca2885f3786348b037a8ee4b5e05159fa94c46c3c3d59014f69be98d543ecc610bbc474da4a8b39c44545a65c5ee2e50b2743e32d1d26fb8256b8bf0c591134f489dc02af381b105a599a404e687e996e393311e0287bd883b55b35450ec49422bdfee8fdcdd3e4ecc788cc255aa02c2508ff39cf1f59c4fdd1c19803734be79a78a02561b7dfef291e91b238d3f0bd788c2122ba34ab22fea15d89c74a4ca0d1cbdd19b18c8dc4699b5e6d44a70b9e363033d8121dff3c5197fd00d1d0a0de7643244f7892ab4a9b26b3f4238af227929b22c0733ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c794154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f406b8d7221f316ccd211c30eca2885f3786348b037a8ee4b5e05159fa94c46c3c1ec72c0c20573b5141e5d40e17d7293f3bb25cd5f92b26d68aa789660ac49eba1d26fb8256b8bf0c591134f489dc02af381b105a599a404e687e996e393311e03d59014f69be98d543ecc610bbc474da4a8b39c44545a65c5ee2e50b2743e32d06b8d7221f316ccd211c30eca2885f3786348b037a8ee4b5e05159fa94c46c3c1ec72c0c20573b5141e5d40e17d7293f3bb25cd5f92b26d68aa789660ac49eba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000105b2b8cac3cb8cfbc14ff449881d981bb4b3fcfcbaea1fa63c75a212dd0b2388273cc86d024a00b9e3071db011fdfc788f98aea3da2022a9f6e9f41aca533aea08be0b715878d1726ea9013f66c498be9ab21316806ec537a6e58d451e1d64071952c9effbfd3114b461f7a06631b5c2a4dfe22355024ab76b489917b661f5093290bafbe8769e576919bafbf26e4c5a2216c342c615d04fecf3cfeeab0e90df2980953d958ab8caa309971169538b7826e921ed5e842cd9e39bae8a749f81e2294e0417c4edfb199149746a0485bb8d74ca9ab58cfcdee910bebab5523946181f20a35155c57048ad58fc698f6426343bcceed063be47ffe3384e221fa350bc3e36731d652282dfa0ceba9f7f935a1da1e93d6b7c8394ac65dc93d4225ae4103c0ee34d4e9ab49c206d22d3410d91eb3a2ee92c7b44bb62947a942f50839436373cef41aa80a5158c81d4e71e0c722fc7c88e2b3d7efc046ea9fb99fff04ed62e1090a8bc13dc1a1acd3fd53c23399284d384eb8021383fd29e8d08b620de313021b59b996ef2bfa601d9cf05d1bf710296a6bf495257b7b3a3f8d26f9086671f4bc1ecf0283703b7a5f33ba6aa0ca5e4cfa92069d47b58812486fed6229166382ed65cfddcfae8c856654c969163fe2db96d13a9c3ef71f77333a228f279540e4f0b016669607bb3b212e029f61a1d15f241ce45e712c66d47a95b30e65fed0e41aa4f5dae64783560862a74598e92a386434e8ba66d2b740f1fbf2a56ea432db6bdc8462d89954464c199addebdaecfbf583129840f03ab6fb95302ba6b9c10af26a590440962b4cea4ae015489f620f21bbd6dcaa8855c78e49560062fcd2f50d95a6fbbf69d4b315b51feab760a01547d3e9b8250963cb44c579ff9d034136bc13bd1542eed8809376606a6b1ce8273f1b71ba8517f352f45fde01eef002c943ec42eabd11277f6c899f9594e319fd2a744eda4a79c63fdeaef1fe11101211ac62b16a4eaa3a82e14fe2141790869fd1f9780fc9e6070bf2d08609aaaff1ee539d4e95b155c57d1eb01debe86f7b849796488505abb286e03e49f6555022585ded77138953248e668f6a6475d29cd646bfd725525ab01617f4fe30556f91a7a21288ec76acdb719970959b8a2d654e22cfe96f7d37097cbb19d1cfaa90810af26a590440962b4cea4ae015489f620f21bbd6dcaa8855c78e49560062fcd2f50d95a6fbbf69d4b315b51feab760a01547d3e9b8250963cb44c579ff9d034136bc13bd1542eed8809376606a6b1ce8273f1b71ba8517f352f45fde01eef002c943ec42eabd11277f6c899f9594e319fd2a744eda4a79c63fdeaef1fe11101211ac62b16a4eaa3a82e14fe2141790869fd1f9780fc9e6070bf2d08609aaaff1ee539d4e95b155c57d1eb01debe86f7b849796488505abb286e03e49f6555022585ded77138953248e668f6a6475d29cd646bfd725525ab01617f4fe30556f91a7a21288ec76acdb719970959b8a2d654e22cfe96f7d37097cbb19d1cfaa9081dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb0b0b59e3d76049a3cbcc543bafb2590ac18882a0454dfa958b5471d33d0dec0c0c2b75fbbe433ef24de4054a1dd9f66a53f2af49bd4023946d9757847ed174641c2e4ebab1756f0f23f502c605b001645fb9918dbd52634ba85793651b5f2f2c0a334d4c31960a61c9844aa2a55418924f410c8ce6bb75206c10b6ccadee8d3b2ffd27410ccdcfe329ef02841829f506167fb6b8093ab9645e6cf50c6372453900d80c97a5ca3f42024809990a5e4078724776135e9285751f43bb068f1f5ed12e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba0af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb1dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970c2b75fbbe433ef24de4054a1dd9f66a53f2af49bd4023946d9757847ed174640b0b59e3d76049a3cbcc543bafb2590ac18882a0454dfa958b5471d33d0dec0c0af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb1dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee19700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000103faa7143dfc81ea6c0725fbd6cc165760bcb5f95d58ab194f259f4c8ea0c6e12e7497a9a6b8da38b53da1e6b0e170f840f28fee3a3ba2fdb023793353b3b3592d98812b6b5c7d202fcaccec7b8efffe4fd6d2260ca4dacb8c14a992ec4e99a93523fff8f12408db029c43d72f02f48be49667ea942ca4d71348f4ff25ac5a5e3e244f7265f4f5a20b85d3ea3057a1396e973d7b526b008c89ac664a0deeb82914c67838700d39f2cbbce3e75aae415a2b04b8afcf0e882710684bc05f6f2579163d38107ac89366ef9376f7db904855d91ed7fe63834c5c36ab59ec99fd3d6225e315305c203defd506d80bd61c5734ef12318482a8f0d4276526d7efa118e51f2584d8f3888269774fbc5950bb158a246ecfb87855e87f9ce732532ece40283f63329cbdd5ec86fee116a15725aca1c85a34208a2539e419fd46198ad176b63dbe495a5f1befdf04a1b1c3d1d5a489b850a41981e61ba7ab4d8bdd4fb63aef14b7cee9a3976e0e32eb602445670d1287201a70f87e981671519120d5e9b789373858ca46f01f4394e5158a070d9c12ef2f9a77e73a8f611e7f2f318b149a1d18351ebe42a70a7fc8c2b780a56e3003f836b567cbec43af1649509fba9e7db0064cbf4b3016d0c25c7e2e6615c05c3eb192491b7357eb3474e117d946f69ef528964428b973dba2257c76cc921713e8e23d152b63b549bf21ed56300a3d8d2b376092171e922d60bc89ced9c627be04a1b82ee83f17a7a2b86e0ec9bd56ae161ea73aaa503384a817580357370eab6b7d3b6efbdb01a5b28d467541776a1856307d80c9ac50813ae0d14a35e3f0eeb11ce22834eb28d15731630b30ac86fc960f827f3653af7ec51f2eb5ca1c0f114f056470c71e2427c467ca25bc5379036b327383f05d9286266416730d73b4a9752996fe147be52b612b67a52c5ea2eeeb0d8c7c0fa26d79d99be98cf28c4b568af8af9ae78d67cdba6dc58bc0a15d11163c4193b1d3dc9ebff4703f4342874f49691f2b724f92ed930d7ea716d92eaa9403be6c4e2c2361400b8fc0bcbd78b0b6b9276d89b9ba0b888bae89d626d1556d2d47e279234f19bfc6313c504ca48c6e8481754b68aabf70dec47fbe3de954e012b81d86dcb0e64039cec3afb35b73919dc523b0a0a239aaba68b12ec216ab21307d80c9ac50813ae0d14a35e3f0eeb11ce22834eb28d15731630b30ac86fc960f827f3653af7ec51f2eb5ca1c0f114f056470c71e2427c467ca25bc5379036b327383f05d9286266416730d73b4a9752996fe147be52b612b67a52c5ea2eeeb0d8c7c0fa26d79d99be98cf28c4b568af8af9ae78d67cdba6dc58bc0a15d11163c4193b1d3dc9ebff4703f4342874f49691f2b724f92ed930d7ea716d92eaa9403be6c4e2c2361400b8fc0bcbd78b0b6b9276d89b9ba0b888bae89d626d1556d2d47e279234f19bfc6313c504ca48c6e8481754b68aabf70dec47fbe3de954e012b81d86dcb0e64039cec3afb35b73919dc523b0a0a239aaba68b12ec216ab211d4002fcdf1ae6d1befa0240fc69b5e42ba992ec68df670cfff2aac3ca7f31191ca473c5897ba6afac2e70e9ee55b99f57af0cfa788c89cc309d5340dbff5b1a33e487bd6867df07d9ec1655272d545d836af65b6e200b39c8a448d47b53f7bd123701802f019376baeb767fee133c1f3dc99bb5c30df62439261b00de2d7c131fadffc2b1154b6729eb1fbe7e0fde2dae0bd0b60207b2e40ecc3f5492bd3c20163a206aa9162cf827adc731a5cdb7db8fbc61aa5764c85a123a61e921fdf31e328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f2e26f67ab7b96cbd66298cf342505f2dedb559fa4be2273dd01899d6c3abb17105f957432b4d66c307dd8d7a9f77a65b49b53376dadd9b2290ea826fd6568a541ca473c5897ba6afac2e70e9ee55b99f57af0cfa788c89cc309d5340dbff5b1a1d4002fcdf1ae6d1befa0240fc69b5e42ba992ec68df670cfff2aac3ca7f3119123701802f019376baeb767fee133c1f3dc99bb5c30df62439261b00de2d7c1333e487bd6867df07d9ec1655272d545d836af65b6e200b39c8a448d47b53f7bd1ca473c5897ba6afac2e70e9ee55b99f57af0cfa788c89cc309d5340dbff5b1a1d4002fcdf1ae6d1befa0240fc69b5e42ba992ec68df670cfff2aac3ca7f3119000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001129ad4057bde586d4b233c58ecfd98bc4cf60f80e032b1d8e3f160aadb80afa7322ba21b19df597346bab1b232449876bb877544fbd6f57eb66e0be2a1ddd6fc324e8bb5dde8126175b7fe32eb5f3a5736e311ed109f1292acb290d2b4c7451a3add579a45b98bcfee30a2b51a9b31719f22c19ecf86a7a93f59662fafe0884927843023c7959ddb9d9fa62fb78d13c0e4ccc18033bca5356f2a45574f618728068a412297b3e04c0fd5db5fc35b349eb80b47829f69150d4eb11ffe16e2cca523a54087288325c870fd71523d0540e5acc6ec843ec35cafb82abe9a08d418520ccfa34ba028202d654fa57d4b54f358b2d94da43329bdcdc2894affb0b715fb373cc4bf79036e40b10c3d05b43b8c0fafea7942426b5f56ffdf42d48447883b3019a6d3141507ba8209e62cd76a753cb43da13bbd815e5e0ff73d4677e3ad7329a6c580ebfc4ba615d758b53835690f42b7e31331e9e546365454722b038c100abd62f2a760a7af316240ac9599dd603fa6aa364199c26e0e61cb8590bcd5392b4d94fdb632873510ae475b6cb4b5cec5c33b52bd8d2cb475fb16712a05964f241fe28ad364a28e4cf985af3fc7164821a3148cf599a65bbecd69601bad817e3ee49991f5ca60bbc106de59c9b47af3e5699e14b851e33d272cf0b3d30aeb820d0b1cb26a947654ca74c13b63e1cbad3d9bc939d41ec1dd5ba448b51f0569b03269f17c53abec81b015ec02c5de398817db92db89b356e80ffaa379d672d24303eed6599963ce4ab7955bdc3c3a091cafacb2bb84595bc9d4e4ab7366a2467424fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a6021551b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a707121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a1ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec20f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f0463930c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c824fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a6021551b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a707121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a1ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec20f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f0463930c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c809e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c37ecb8b7278ef89d6864ef9dbf9021f38c404e2dd31c721606d7a5bc8011efd5149786017ebe61cd3033d4fb7f00cfc465a497b1464343a1a46eb7f2ed9b5de00168feb3ec5487731f5a78c05dbf2354012ffa5efe36b383af6c5d5787f595aa2368a8d9f0df500d29c787f59bee3d31a7284c876cd8b378363c8b9485c4beaf132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c83614840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e17f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022149786017ebe61cd3033d4fb7f00cfc465a497b1464343a1a46eb7f2ed9b5de037ecb8b7278ef89d6864ef9dbf9021f38c404e2dd31c721606d7a5bc8011efd5299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f1002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000127d9a11a1346b0c8207d8123e198121c7449ea9681d843e6f151d0dc93d2ff900f9a88c30f1b87df9ac76e59de024fe9ab35728181948abf2a96dd729623d06604fb6f4b9d1c6139dbaa8cb0683ae711f1613224da9c7c589efbb85ed84bdcdb045708edd29a5a59c410ae9d02ade76927c1218e07689725221d9a8edcde6e6c22b9055b4171a7c84688b08b47e7a480cb1cb24ba676788b4f0aa5d5f477a1690fd85d5b0459d2d8364dc03d9164d30fa26ceae5868285d65f012a8b7de34df92a329c0dd0152b92baf13e28276b29d1db4501433e788ddec920e166ec9ffee431787fd0aef86e99bc082cf8082a63f676d63f7ce65c473eea3aeac4a753ad332c66a37920ccb3e03e553d61f2dae9e9ae0d84fcf57f2ac35763bb340a064010170e682cadc511fd3763d6eacbba3e92451589ce14b2f4c824d13fe538f54e031e498a3bf3b4a5c65aca015a4f18ac9dd3bf8a126c13c2827acc82c1214d240d1c60709e89b8ec0d280a52ef346063d1226225d1daf9e9af56513f094d40286f387aa014d50f83870ac2d98843a1e74fae290a110fede75636b7abd7b78c1b2d16f2d773b487a63c52e4f38268d9e4c7393d45cea338ebb9fe10d3f98e26fca02d42a4b61cb41c0382fcfee97dffb49fc4565854b50a17deb5a9f9151f40ab1626f27d0ec5157f7ef8c87d8c2796d3cdf84cd7f45ff9a8b26164f57f8390c3f62a08f7ae479289bb3daddc32ba543552ea3720348a33f3af3c3764b32ba296a1202b428771f5a59cfa079644dffeb7d9b92dc35b61056335420d1b6fd3ca53072536d7ae9327c01d3159ed3ae3849187e4fded6c3b9bbd494a7b15ae78e51dfe1ac928516cd83fe2cea612c51c7b6e783d48ab8fcdb13bd24eb21b3e871ae2033a123668dfc6c091f6c1a2267196d7a7346871251770c037420d0a8e5c7995f405edc99720393f6e093e5dd98e692858edde27d6f1dc38e45720265ea3866a0d225b100c5ee1c2d9d1c82ac037f236437cefd1c94fffdca5e58c7113ce5fedc01da4eff3a11e3d262e37d53fc80dc9bca556c732b94d1c75b3a0bfd931a012412bc7503dda68ce4118e8d5c117bb0f512c21e6f67d655d064963d38907dfa4be1438afc2259731bee7172a3ee844f0aef624b2058be79c154fc95d63f8205b432536d7ae9327c01d3159ed3ae3849187e4fded6c3b9bbd494a7b15ae78e51dfe1ac928516cd83fe2cea612c51c7b6e783d48ab8fcdb13bd24eb21b3e871ae2033a123668dfc6c091f6c1a2267196d7a7346871251770c037420d0a8e5c7995f405edc99720393f6e093e5dd98e692858edde27d6f1dc38e45720265ea3866a0d225b100c5ee1c2d9d1c82ac037f236437cefd1c94fffdca5e58c7113ce5fedc01da4eff3a11e3d262e37d53fc80dc9bca556c732b94d1c75b3a0bfd931a012412bc7503dda68ce4118e8d5c117bb0f512c21e6f67d655d064963d38907dfa4be1438afc2259731bee7172a3ee844f0aef624b2058be79c154fc95d63f8205b43235b5f0d6a17565734c6c297adb20db96542cc678885f50ad8c48986405d7d6b047780b393c9324d25d3cf2c8399bf9cb8b67dbfc80f7d2ddb11c11af25663f7075b39653009afe58d1a961603a54b8d15568374b04917877bfd58681d935c2010d1e6d9d215c776184ad825cb0ee71ceef6cb60086e6f5b69598de3afb8c2800be4ad38b63252cf522e79cf1172ea5b6203471877c931e56d82a593fcfacd0d32513673718a90eea7455c1ff3810b1de027cadb97bf44267bda36f5bdeeb14704ed39a11be374a6c61c5e56b99bfcc18cf3844790a53d75fbd6e84fb2bdf573150a02f1be7f1ef6e5d539f61024406f5775519521d6cc7c9950525f5fa4aada0c42ba95e57d85e81e62e43ece358248321ec92aa5f4b75b78640b9689961a6a1d8394ba2e4adcaeaef721748559b459a82e03b51fc3c9ede424d047bd7ed5f2047780b393c9324d25d3cf2c8399bf9cb8b67dbfc80f7d2ddb11c11af25663f7235b5f0d6a17565734c6c297adb20db96542cc678885f50ad8c48986405d7d6b10d1e6d9d215c776184ad825cb0ee71ceef6cb60086e6f5b69598de3afb8c280075b39653009afe58d1a961603a54b8d15568374b04917877bfd58681d935c20047780b393c9324d25d3cf2c8399bf9cb8b67dbfc80f7d2ddb11c11af25663f7235b5f0d6a17565734c6c297adb20db96542cc678885f50ad8c48986405d7d6b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001201fa32b70a5354ac9ec742d499009f3300ae07180bf3fe7823a2ff1d3ed11cc1d73f6431154cc34ef67ccd2aebe8057d0a07d89c811a4f466f2e58bf5cca9280b9deb39e867659a048902f746a3d92f3e57fa372153b6541a013ebedd7ddf4a07bea451d610de24d841a81523abe9da9c3d1eec59cb21c472059ae0320d66c92664546f89a48810da601561987dbbc1ca3d75b6d6d2066cfa33f15e31ca1edd2da3bc938f5da0fc79b698efea8a3412a4f015065f32b6f74217dccb2f7d766d3a013818ed9db718b7138bdbb1d95cb602e761b035553e619b414e4b808e262922e0b56edced8b072b8f4d16396c0f3a62544d0ce094786cffc4d9bb63ee494510571165cce3c00e4ab15fde1ecaba27103c18aeeadee569ba3e8bf7042a0df2322ca10e6f564afd4d47d85bd7adb4ce5b97d122e6be3ff254e78582da043856355732d2afebf79b7cef9fe3fd85d82aef90ab3284acac1b0747f74973937e5d06f26679a38ea31b1d24d86f0936f55d39ea8972ebfbc1f591c29850ad1ae6b936c00d0e24a829b04a4a54e138a23a62a2feb06c0ff1c6b9ff6858f6c16220fb18ad6a7a64ef0013135d782973d991b444679f73a3350c56356026da8450f6d20d330e2a612e898bad579c42074294b6a6992ccdb3f335f326fbb4858feada252a4eae85a9de5e9a80884e1cf813ee0f5162831c9247e903a51f701ee5e316ef397ae214745c156d482a4e6c218a5d3a1f053534e766cd0843509df325862dc416db28a3eaa95adaff71688ed2182631416daa0fb4f2e3302d082e6283a1674d2f50d95a6fbbf69d4b315b51feab760a01547d3e9b8250963cb44c579ff9d03410af26a590440962b4cea4ae015489f620f21bbd6dcaa8855c78e49560062fcd2c943ec42eabd11277f6c899f9594e319fd2a744eda4a79c63fdeaef1fe11101136bc13bd1542eed8809376606a6b1ce8273f1b71ba8517f352f45fde01eef001ee539d4e95b155c57d1eb01debe86f7b849796488505abb286e03e49f655502211ac62b16a4eaa3a82e14fe2141790869fd1f9780fc9e6070bf2d08609aaaff1a7a21288ec76acdb719970959b8a2d654e22cfe96f7d37097cbb19d1cfaa9082585ded77138953248e668f6a6475d29cd646bfd725525ab01617f4fe30556f92f50d95a6fbbf69d4b315b51feab760a01547d3e9b8250963cb44c579ff9d03410af26a590440962b4cea4ae015489f620f21bbd6dcaa8855c78e49560062fcd2c943ec42eabd11277f6c899f9594e319fd2a744eda4a79c63fdeaef1fe11101136bc13bd1542eed8809376606a6b1ce8273f1b71ba8517f352f45fde01eef001ee539d4e95b155c57d1eb01debe86f7b849796488505abb286e03e49f655502211ac62b16a4eaa3a82e14fe2141790869fd1f9780fc9e6070bf2d08609aaaff1a7a21288ec76acdb719970959b8a2d654e22cfe96f7d37097cbb19d1cfaa9082585ded77138953248e668f6a6475d29cd646bfd725525ab01617f4fe30556f90af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb1dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970c2b75fbbe433ef24de4054a1dd9f66a53f2af49bd4023946d9757847ed174640b0b59e3d76049a3cbcc543bafb2590ac18882a0454dfa958b5471d33d0dec0c0a334d4c31960a61c9844aa2a55418924f410c8ce6bb75206c10b6ccadee8d3b1c2e4ebab1756f0f23f502c605b001645fb9918dbd52634ba85793651b5f2f2c00d80c97a5ca3f42024809990a5e4078724776135e9285751f43bb068f1f5ed12ffd27410ccdcfe329ef02841829f506167fb6b8093ab9645e6cf50c637245393ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b31dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb0b0b59e3d76049a3cbcc543bafb2590ac18882a0454dfa958b5471d33d0dec0c0c2b75fbbe433ef24de4054a1dd9f66a53f2af49bd4023946d9757847ed174641dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012e7497a9a6b8da38b53da1e6b0e170f840f28fee3a3ba2fdb023793353b3b35903faa7143dfc81ea6c0725fbd6cc165760bcb5f95d58ab194f259f4c8ea0c6e13523fff8f12408db029c43d72f02f48be49667ea942ca4d71348f4ff25ac5a5e2d98812b6b5c7d202fcaccec7b8efffe4fd6d2260ca4dacb8c14a992ec4e99a914c67838700d39f2cbbce3e75aae415a2b04b8afcf0e882710684bc05f6f25793e244f7265f4f5a20b85d3ea3057a1396e973d7b526b008c89ac664a0deeb82925e315305c203defd506d80bd61c5734ef12318482a8f0d4276526d7efa118e5163d38107ac89366ef9376f7db904855d91ed7fe63834c5c36ab59ec99fd3d623f63329cbdd5ec86fee116a15725aca1c85a34208a2539e419fd46198ad176b61f2584d8f3888269774fbc5950bb158a246ecfb87855e87f9ce732532ece402814b7cee9a3976e0e32eb602445670d1287201a70f87e981671519120d5e9b7893dbe495a5f1befdf04a1b1c3d1d5a489b850a41981e61ba7ab4d8bdd4fb63aef18351ebe42a70a7fc8c2b780a56e3003f836b567cbec43af1649509fba9e7db0373858ca46f01f4394e5158a070d9c12ef2f9a77e73a8f611e7f2f318b149a1d28964428b973dba2257c76cc921713e8e23d152b63b549bf21ed56300a3d8d2b064cbf4b3016d0c25c7e2e6615c05c3eb192491b7357eb3474e117d946f69ef51ea73aaa503384a817580357370eab6b7d3b6efbdb01a5b28d467541776a1856376092171e922d60bc89ced9c627be04a1b82ee83f17a7a2b86e0ec9bd56ae161a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c619259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e803e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b3c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc472186137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58672c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba021e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff1a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c619259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e803e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b3c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc472186137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58672c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba021e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff2d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4821da14ca1a199664fe96c00dfdadc6f774cb0099050339947762320acbda4f921298a8342161460a0a63944925900c28283b9c6ae2cb874a22758361d7811b5e63af4d6266fcb4016eda88f0b8382f0829b30347c5384622320af607712e403341ea98dd2ad29467824de238bd178f586fa625f611b07b7a7fd42b73123ce40682e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba0af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb1dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a298a8342161460a0a63944925900c28283b9c6ae2cb874a22758361d7811b5e61da14ca1a199664fe96c00dfdadc6f774cb0099050339947762320acbda4f9210b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011fa50446e895affd0c882ffff31e6a129f7497fa47c50d567465bb5befd0d9311a7f80a864a1db5e1e1817d3a45978ed1594c742ff1b0e87ba569baced13d53334053265fa7428b94f366826202e389c7d81035a35044d91b62acc62728eff210bcac40c467248b59e9d337db61e5db8b06a5e50a4bfb8d33f271f31bd332e22289139b492aea1152c45e2db3c3351edc39b126ca2fcda0968b9ed647987dd87174165f9a4ad6683cdbdf9ead43c1106981bb64c0703586797e455485d91b4283efda4a93da79866e0375520d44df8fe385b98e9f88964fe96c63b0c2e6555e20a548a884c6a1c01a6948d07121ca6ff38daf0c134ee162d4e1169a331d0edf90eaafc81c888770de760347d3b2523e747f1366dc7ec2342fb2a55dc52fa602724dde2bc5dab69ca1a4195896926ef3279e5b00eab69a3cdd973e6538c1a2fef002847ff9ea73b089e1e214cb762f65451013e9c7a29d6121e67466780287939345e18629a81357b28d58efe1f05f349baa04f9fd280f9843c365550cdf1c0542f8004e8de1bab07ad4741ab68273f2a3f82cd0b6ffbb85f3a7b33c67c2725711fed729fab7b7ebbb0608b5f44548ceca7e382d4432b1ab0fa4d4c0ac98bf25c1670fa54cb87976aee4ff43710d5e274cba69ff154acad34afa4b80faca8887c2eeb30abe3f935fe2871a65bfb56be6c63d6fc9b20a138a408d01f39c4f332e11fc34e82227bbee0824d3e890145c1852bde95ebfc50b1ca27225ae73e3026bf0f4f9323cea9f65187610adb5c151c24ae99cfe3e0b4f2e1ebd36f43bba6d8c107fc67f0d2530e47f91f36ded523f7e7013069392919e4978abc6e0f780c038c3803980f2dacf1b806e0c9212adc081921162fc2e03314840e70c2dd87f3fc7527ee07b41b9f4767dd9c125a29b3d78305f20e1dcd8176f5b5ae264d583c11bc1811f84be460b8982263eda5d64c287d1c548ade3bcb8225e37f0a9fa7c3ee4507a626848a1c6507540c5bc2d083358eb6e67ba0e7a06779c0df2cbbb92c58a93859d97b75e39af8abf3a43d2f7cca716b601d5b21ac91a1d84e043146d3a758263ec096b28df924a43dcace12900bc992806a2486220560c45bdfaa9dddbb4d19c13f694d7206db5bc23531ed6ff4368fc62ed7832af3bad4d15142622244b407fc67f0d2530e47f91f36ded523f7e7013069392919e4978abc6e0f780c038c3803980f2dacf1b806e0c9212adc081921162fc2e03314840e70c2dd87f3fc7527ee07b41b9f4767dd9c125a29b3d78305f20e1dcd8176f5b5ae264d583c11bc1811f84be460b8982263eda5d64c287d1c548ade3bcb8225e37f0a9fa7c3ee4507a626848a1c6507540c5bc2d083358eb6e67ba0e7a06779c0df2cbbb92c58a93859d97b75e39af8abf3a43d2f7cca716b601d5b21ac91a1d84e043146d3a758263ec096b28df924a43dcace12900bc992806a2486220560c45bdfaa9dddbb4d19c13f694d7206db5bc23531ed6ff4368fc62ed7832af3bad4d15142622244b4174fbaaf88be79d412b9672c9d372a7d2fa63a6f94bf935c8b22a38f99927d5421fb658f6072cee97b6dab3dcbac82009de512e271ab489886ab5369ed4941f1349a6923199a3b527343dd168fc0c3443c3898792a4ab48ef884d6895f3b63a4121a769dfd347beffe95107f075b903e3ac94c2ce1e461b32807945719e8dd1a0d59dd55308f221e8b7b9adc30ff608a8d3a58f05c6accbda67dc57cd7b9e0ae326db10dd5a7b1765db5e5acedf3cee26786f1363634c1a634a356a0e08b822a04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a0427665ed95b17a0576af512ebc575a225cca770747fc11a85e3405b33ad6bb002137e04dacf9afbc347f2bf066d88f624070fedb8de8410940ab528ab8fc49c21fb658f6072cee97b6dab3dcbac82009de512e271ab489886ab5369ed4941f1174fbaaf88be79d412b9672c9d372a7d2fa63a6f94bf935c8b22a38f99927d54121a769dfd347beffe95107f075b903e3ac94c2ce1e461b32807945719e8dd1a349a6923199a3b527343dd168fc0c3443c3898792a4ab48ef884d6895f3b63a421fb658f6072cee97b6dab3dcbac82009de512e271ab489886ab5369ed4941f1174fbaaf88be79d412b9672c9d372a7d2fa63a6f94bf935c8b22a38f99927d540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011bbf3756a9f9137394503221961b99e063883a1b8d8cf15eb126df0ab4b99b703b6b3db1313d01a06cbfcf2c961bb7725a04d6885e354779aea97b5820dd58a11bdabd6bf3eb9926845fd71b5a35af2bdc6c5000721b1a2344500a9a0dbc57c90c94349c8fb28e09647e7391f2d2535ced0e796b3988a2d336cfd0379fc604de3f13e25998af91a499210fb3af909b80bbbe28f97a8c2820b0bc1a3d2fe5de261a3e7522d105b19c6e63a3749a22130d9feab9d7f21636c0d853b06bddf5742f175c40f7543e9ee9a0bbcccd1ad15953fee4e303bfb7a55eeb45c5b114b63bbd3544718131ce48bc9ef81edf124a682dc92f7d080b15ac017c3850e090802fd63704349ab2f7238b51fac6fd5ce3aaab5fb4100ec041b475c1fb1005761bc8a330f3ee57361cc25a628a806cce8918ac6075cef08a0cc0d47a23fcf8e0ff6466060fb666f280ed2b28526b82efb680a5d8b72fce5833e351bf281e921e54da582d7156d67488d686560f4d8fffc51227b9beb7d98f82193cc40415be69d6a7f50c4980c4acb1fb2ee0028e1685cd66f2cf5171b1de3498929e89a0d62b0cda820323f6c3dce52e947da53ef426ae6523f5ce4531cba54161fd11ae0e1aa63d4a277fc0e234ad623a406a778cc3ba987d28d14dbb279d8aded15317d8f5b40e591270c6caa7c1c0d62149cb576c34a31592af30cd7405919bce022b14b3c424a1008d7e75d5aeda56ee67429e32f0bae244bdcc9573fcfe766039316f579203b80455d0cfb8fe2d22d6a4d1b48a76e9807ac65a1e245a103ad1a3e25399733bfb00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf3cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da71320fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf236305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf3cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da71320fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf236305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb3ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b3170b49fa45ed99ffcaf8036f11a7da96f3eb56355a6bc1b4d4b673c252a8f14e3b674a1b1f59259eb7e969b60f76d978f3840665a081434844ed7e08ae52a3490dcea87c142cd7194c851c76df44aa147c540709bc62f27ba33ec049f82126cf0bcfbb7d08c7af75c601962075b73bf4f6f7f3d7a8dc2e33e18626713e911ccc2d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822ffd27410ccdcfe329ef02841829f506167fb6b8093ab9645e6cf50c6372453900d80c97a5ca3f42024809990a5e4078724776135e9285751f43bb068f1f5ed12e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba3b674a1b1f59259eb7e969b60f76d978f3840665a081434844ed7e08ae52a349170b49fa45ed99ffcaf8036f11a7da96f3eb56355a6bc1b4d4b673c252a8f14e2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013de055bf769969a0d87c3732e7fc15d1476bb72f2d745244a1708a43a12c4bd50d3cad54271aec049264abf74889272d7b788d9f14eb8b09c44d1797a5e238a40019e45972881cdc6e800be6e6880fef95827e3d3d827fb1920179c642db899a119eed0cfdd4fb6fceed08e05e02fff939da308463a1a37b8c9c06686a7560511584be5a4fceec1d27f3e16e127815a558dfd6fa21bb13ef11315d1aa840772437b3714110b268d7517dd82fcc4648b1684ecdc7ccdf0bda0df74c936e81201022416c2a4523bd0ae53d3e56b25dc9e04384f22f76a661a5f4d6f6c283bcddf01ea6970ce8a65d0e376df7f6963cc9c27bf99992ccfa7f8cce50f82669f488983f7ccf2034516165fb7c25c10fdc51d13201f615afdeed22218b19e171fe2945337e319a24af782e7134704cf00b6a588479bd183aa88ebde651c0d64830b8df12407cdfa540b790da4c69ecc3034bde4ae9ce95d11049290a9fa5b5dbcaf8de33bdf4da489f0af5ccff1a4a3333f128f4aa09554dd8351e2c82592dc2d171762b0e6e2eb0cee4c50c1aed1a2ef72ce050d83dcb43145ec67755ccb69a75d70b245f0959d8c844fe518cdff07d849f36968e121470127449bd72b31aab3d40c2159fb3998dabc633be095bc345029beb8f3afe61f0fecc404c57ecff4c37f87d18042836cfe6d7098376209694fd930a5b0a7088b9a99140ba8fc84cf29f2b000a9617799cf1ab708a0697a20039ecfdc32da3939ea64e16a0fe27cf4c48e0012d5cb2fc345a38db8e47dc9a763fdc1c510a8c09a047d27d81450b2096e016162d30c4b65ccaff430a6ae8691b1502ed1df45381b89288e2a79f83e093ee643012cf3b49a33500bcf5951796e4eafd130452457a50ba7038f18dad0c6c119bd121f3d78fcff6fc4f34168a0d87690ea12ef1d6947ef5c11a7a96009be3a7f4ed1e0c2870300903b0cbe975f27896f15ef354c2678a5738011e9730511c580b1429c335cf0fd2ed8c0470b243a50d4925a62bfeee6832d34d3293a1317247c89f163cca30f02d1273fb8f4dbc5af2b6da7c1a9a0da11a25ce66998fbb8db8376210d00d0b4f1ea3bc16337b5239426dbbd8082fb3ed17352f315a93303b66eb182f2ff2f4b0e15c43e9cc84adc6bd92444a3e69481c35c3ec67d29dbcc49914e92d30c4b65ccaff430a6ae8691b1502ed1df45381b89288e2a79f83e093ee643012cf3b49a33500bcf5951796e4eafd130452457a50ba7038f18dad0c6c119bd121f3d78fcff6fc4f34168a0d87690ea12ef1d6947ef5c11a7a96009be3a7f4ed1e0c2870300903b0cbe975f27896f15ef354c2678a5738011e9730511c580b1429c335cf0fd2ed8c0470b243a50d4925a62bfeee6832d34d3293a1317247c89f163cca30f02d1273fb8f4dbc5af2b6da7c1a9a0da11a25ce66998fbb8db8376210d00d0b4f1ea3bc16337b5239426dbbd8082fb3ed17352f315a93303b66eb182f2ff2f4b0e15c43e9cc84adc6bd92444a3e69481c35c3ec67d29dbcc49914e92e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd630724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f61a92f6a61fce846b25c83d8fbcb76aa39feca1dc39a5ea305ae3ae246a618d0506dddf9bcd0c2033836249932bf3ce970b3c1b1026f23e8e76c0903e8382833220f0072591fd810e96d65b79ca90d674ac9a437419480fec57f01490c6a71f533cab6d197f17180e56399a722450928f6d9116af63172aafb8dac171d79684af25edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e01de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb08570552acfb4136a8687c086867198f336159a70e0de3347500c25c57abf0d8fec13c5f354a6809f5d8fc0d754f10b0845dec5a231524772141e6eba5461ed414fa30724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f62e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd606dddf9bcd0c2033836249932bf3ce970b3c1b1026f23e8e76c0903e838283321a92f6a61fce846b25c83d8fbcb76aa39feca1dc39a5ea305ae3ae246a618d0530724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f62e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012b848eb10e9fdd59fd8c4de2526a6ca06d4ddc1141e84b695ae562ed60e643353f04746b17ecc54f77bd72585a684e8fd03d61aafe9a442806af881b3210ae3510913e2f49daffcadbdd9040604f7943e36491ae951f3a1f3590c63cfe1b3bda025d6ea885215d0616c1ddbcc9104ddb5829422611d8c6bb4014f377b168c11106e0128752f4c77886ba5d531aef3d916a8c7f33926e7e7eaade0d218a0a580e1f15ab20061476ce9aa338bc3af0bdf901064f55847f47202dd4933248e9dfa503ead49eeebaed8b0c8887189ed793cdd39cd1bf2f728e7cd0a4de0ac40cc21f289d5c26146efbb8b80b7c60c0616da75959fbd6f33b39a419d96ae3b60da6ad3a3ac4d0b3c443c86f7887a73230bb95f13b18138a2ac748c8a3dfadc3e8bc4718774eef9ada6ce3f881138985888be874da78a7926a3102ce2685f60f8c686a31a581c646f4f1d9f4e275e595790818f819570447b99a4b0047f9064d1aa8fa04d882b645e0b51c301bbad7ce1792ca0af622b5c54b24d8709232705a9acfec3ee92f0b88019ea10d9a7586e27ae525219f3d5a6a7a1c0bff7083033722758f1084487d01958b22500d5783ca00e6f1c5c7128548acb7043557fcce0e90a23e1bb44fc94108eba44e98be22f7b693dd046de296c1fadb7659969a43894855f53edab8a35df757cbd4bf9ac2f5119c89a1b215c871c13693296827575bded2032c0c1664fc7fd450b1a01474530358a687391196c1a91cc37ca89931df0dc17f19a9ccc9665fb54d4f9fdce0598492b9c9d18b2d0c32a921fcb87014e0cad92b3188e3736946f3bf517c077eb5300c2b271757a63931e99ac339705544006eeb0e771c8c96b90c40ae83f8814acff3d4fb2f4155d01b0f80d5f3c097bbff911637ac71410e62c2bc976c257989f03cd75ca0eb4b0212a4b304979ee354022a9408538ebef19d3d436893da86760fc328c5a5adb1073a546894959209abfdd56d165e364547edcdaef51cbb5fb1b13034460a3486e5295310b24156bca40ad4e029a1c9bab81232510ae344a04e4ecfcbdc3c64752423a60ae6ebda305bf52b212fd70f5a67a5046ac98fa8de7875f1053bec6da67081a637e21980c23436285f1028f0a5985afb9536705721878a0efae65a2b5598cb52e3b713b02acbc9d7a23188e3736946f3bf517c077eb5300c2b271757a63931e99ac339705544006eeb0e771c8c96b90c40ae83f8814acff3d4fb2f4155d01b0f80d5f3c097bbff911637ac71410e62c2bc976c257989f03cd75ca0eb4b0212a4b304979ee354022a9408538ebef19d3d436893da86760fc328c5a5adb1073a546894959209abfdd56d165e364547edcdaef51cbb5fb1b13034460a3486e5295310b24156bca40ad4e029a1c9bab81232510ae344a04e4ecfcbdc3c64752423a60ae6ebda305bf52b212fd70f5a67a5046ac98fa8de7875f1053bec6da67081a637e21980c23436285f1028f0a5985afb9536705721878a0efae65a2b5598cb52e3b713b02acbc9d7a2305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe2ae365370673405b45f215f38dce27567140ad8f6ba49ea88e18629f6325aa0d1b8ff0c9a7809eabeb8f51554571a7d5285ef1a041b40a55e30ed8a0c3d2236a197c72c4ccb103b028475e963f041edf0457e1b288d586454f04237818425ece26bbfed82d1828baee8720e0a208b1b44b74061ef724dd8e083522442f783e5d02137e04dacf9afbc347f2bf066d88f624070fedb8de8410940ab528ab8fc49c0427665ed95b17a0576af512ebc575a225cca770747fc11a85e3405b33ad6bb0174fbaaf88be79d412b9672c9d372a7d2fa63a6f94bf935c8b22a38f99927d5421fb658f6072cee97b6dab3dcbac82009de512e271ab489886ab5369ed4941f1093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e1b8ff0c9a7809eabeb8f51554571a7d5285ef1a041b40a55e30ed8a0c3d2236a2ae365370673405b45f215f38dce27567140ad8f6ba49ea88e18629f6325aa0d093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011dedcc54ff9f8351efcdaa6ec489fe96c3dfd774d79f53cb0cf4019f0a8aa2530532b24d144d3df8ba1b3af03d4544bd45781153ac42a63204ab27fe6b75a00f32f77ac8b25c5a40abe9015f4e298beaa5500c04ac5b94af13987f6f05c3e35a314112e60cfb9df3a1ad299faaf948b7b2f9b39ff94ecd90163180da74d3865012e8c149dd24425feebf10ae7968aac15f0b348ab8ddf709bd8cb8dfb5c6ca182b22c84b4f41cae2815a813ad1c73f058a8274b49453da18ba2f4d8c75e18d922eaa03e6ae752741fafd4b581f181c03b6d05f38ee6391a5420da11814542b1c1918f11340d76730a9abb40005d27c1b889b09dd70649e45ac4f2ecc301177ee380d11ff0fe1d542bf123d5cc6f81f59de67cff0125269a7ba1433c1184f8b2e250c8b52b1c867d674f992ae911430cb08730f4335bce338ff7184fa67ffb6e30f9d0dd6783ae08ca32eb09ae4b96cc929f35599a5443c89a6b1271d7096131228156a16eda045b4dc01c9ad93531d98eea8d6662f160abb10cd8a0790615163077a1a83de64a9cfa4041f94361de7b0fc8c9918d1e0059625274bc295e9355507f35d04ab327ff3b9a3ad76765de465c8931dcad7f9d45e76740321afc9e27733db4b3d90175611854ebe74518b437db8d9cfb5a17ce43676660c428005a4aa192ddde24ed13432c5427808c111ee6c91c29a45bb1a3171208d54df47fa99150eaa585b7adf0384f3f8be68382eea44f70e5f56aa36a7b1d1c3ecaa3e016d1d0d23e79fe87766c9f5e1592caa2041034a7b26b37dbafa16b37da0297edc4fa017e6c570737897f385e789dcbc7a09bd4f82ab3e1182aecd80ec9d0beefa6c6d28193a8f8c87680c7a1876234385f642d2c3edbdf7ca4a4e184093e1110593943781db32415af7c19d85b14fae6230b26b46bf3a4e4070e7eb71e04eaae41e20087e24cdbea5083e627a4eb0519dcf4db6ffd9c1bb0c8833adbb509e551be1e1158947fb46c6d6c8139c768e67eaf37b8f475833620e501934849dd55674969c2a76b804b9392937ec63897198150c8492ff40c8a73ea90264a89317a98b69652bae67e861e231e8620e50c80796c169aa1e2004e0fa97626d69e43db046f10b145198179e1dce179df1af37f8693e96782878f7285261b92bc34caf4fb90ef617e6c570737897f385e789dcbc7a09bd4f82ab3e1182aecd80ec9d0beefa6c6d28193a8f8c87680c7a1876234385f642d2c3edbdf7ca4a4e184093e1110593943781db32415af7c19d85b14fae6230b26b46bf3a4e4070e7eb71e04eaae41e20087e24cdbea5083e627a4eb0519dcf4db6ffd9c1bb0c8833adbb509e551be1e1158947fb46c6d6c8139c768e67eaf37b8f475833620e501934849dd55674969c2a76b804b9392937ec63897198150c8492ff40c8a73ea90264a89317a98b69652bae67e861e231e8620e50c80796c169aa1e2004e0fa97626d69e43db046f10b145198179e1dce179df1af37f8693e96782878f7285261b92bc34caf4fb90ef6288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc73502405abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b31a541dc9aede8050ad6648812a33cfcce3efbd5a696c6d22401470b7af361c4e377596ab5d4f14c7435038a9742be3e6d0ecea3606fad6a74a40d15db38cafde3aaa9a47453df473718afecd5a9f3c813f8ab265d7735b30cf3d9aa31345b8bf29f67f7b332db09cf5bad95713cd823005366f75182a210df2f8ccf2a0536bd63ccafc6418112053d1c539dc198ca765b3a8d0cc38d47492143067a7a046f720305d9e4e7bb0cfb3b7ab6f2a16664d9d00ffe6e15a8f452fe648d4b20ee2b079077596ab5d4f14c7435038a9742be3e6b737f77900011bd2975eecabf38cafdd2a541dc9aede8050ad6648812a33cfccec8163996bbfab69265fbcf2ef361c4e05abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b3288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc735024377596ab5d4f14c7435038a9742be3e6d0ecea3606fad6a74a40d15db38cafde1a541dc9aede8050ad6648812a33cfcce3efbd5a696c6d22401470b7af361c4e05abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b3288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc7350240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b8c83f59739f174245a9d39c1564be6f697eaae027a246d6f62ef7eb25e2bed15a71fa3e4bd6b4d0784a8b7d6c10312d2bb140fd7bbef1c3569abecd12e7b7e128635c1e3f36fb3c558df18a08816d3cde40f45fad4a9a962b169100bcef4d80f93110bc1bf6acff6178d72f3fba2e90f0d836c58bdbe230f5c4e26963aa5e31d2bb2c46f7219e420184aedd9cad68c9eb7615fc4844a02cf82c2cdf6dee9940bf88c893574e850f325ba7b57b730492ea6f6e098adeb9a82817b4837f57683300f118bffede9bf6a1b089a082be5009bc462acb38cb10135c42d08344d26882ddb46107020150d7159dc61447f7450fefc207fbfed47993668257b816e89d024f6907b762d9cae49e30d91b048cc20309c649008ad73d20bbf2cef1b26f8421e75e1c64dcd3e7e8ccc77bf484aafc32a446b41c4b8fd22e43c01a948241b892466513b3aa77d71d02fa23fbf39de781c137bfdd3bee472236abb977470fde601a1f934f293de88492dbb217da681682a0af1135f254abc58a330d8e6511e0f29ad293d3d824fcb09f3b2bd2b2d751ab474a3d5e0e96a7b95d2a003562019a225c04e4b4c14d9f853b41a4d814e56fc32f1ac09d23d68949ef5dfcdef92fe2b14fcb1c7dca15f1080984165b3757c1b52e1e93b84ccc1a4827697eb0553f9a61518a235be48fe4064b068a1b9f2a8e2be3c2f949cebec7cb2dc82a523243b582a2367af9f6914f7c8f97657697fc994152320e65bdeb611e3ffdbabf6c21d1b0cb6110136e488aa295b43fb2c0debbf072d6f65b83bfde7c42bbd8ab8fe910f3f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da7132032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb0fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf2363f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da7132032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb0fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf2362e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba3b674a1b1f59259eb7e969b60f76d978f3840665a081434844ed7e08ae52a349170b49fa45ed99ffcaf8036f11a7da96f3eb56355a6bc1b4d4b673c252a8f14e0bcfbb7d08c7af75c601962075b73bf4f6f7f3d7a8dc2e33e18626713e911ccc0dcea87c142cd7194c851c76df44aa147c540709bc62f27ba33ec049f82126cf0b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a00d80c97a5ca3f42024809990a5e4078724776135e9285751f43bb068f1f5ed12ffd27410ccdcfe329ef02841829f506167fb6b8093ab9645e6cf50c637245393ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b3170b49fa45ed99ffcaf8036f11a7da96f3eb56355a6bc1b4d4b673c252a8f14e3b674a1b1f59259eb7e969b60f76d978f3840665a081434844ed7e08ae52a3493ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010d3cad54271aec049264abf74889272d7b788d9f14eb8b09c44d1797a5e238a43de055bf769969a0d87c3732e7fc15d1476bb72f2d745244a1708a43a12c4bd5119eed0cfdd4fb6fceed08e05e02fff939da308463a1a37b8c9c06686a7560510019e45972881cdc6e800be6e6880fef95827e3d3d827fb1920179c642db899a37b3714110b268d7517dd82fcc4648b1684ecdc7ccdf0bda0df74c936e8120101584be5a4fceec1d27f3e16e127815a558dfd6fa21bb13ef11315d1aa84077241ea6970ce8a65d0e376df7f6963cc9c27bf99992ccfa7f8cce50f82669f4889822416c2a4523bd0ae53d3e56b25dc9e04384f22f76a661a5f4d6f6c283bcddf0337e319a24af782e7134704cf00b6a588479bd183aa88ebde651c0d64830b8df3f7ccf2034516165fb7c25c10fdc51d13201f615afdeed22218b19e171fe294533bdf4da489f0af5ccff1a4a3333f128f4aa09554dd8351e2c82592dc2d1717612407cdfa540b790da4c69ecc3034bde4ae9ce95d11049290a9fa5b5dbcaf8de245f0959d8c844fe518cdff07d849f36968e121470127449bd72b31aab3d40c22b0e6e2eb0cee4c50c1aed1a2ef72ce050d83dcb43145ec67755ccb69a75d70b18042836cfe6d7098376209694fd930a5b0a7088b9a99140ba8fc84cf29f2b00159fb3998dabc633be095bc345029beb8f3afe61f0fecc404c57ecff4c37f87d2d5cb2fc345a38db8e47dc9a763fdc1c510a8c09a047d27d81450b2096e016160a9617799cf1ab708a0697a20039ecfdc32da3939ea64e16a0fe27cf4c48e001200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af2150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f3981eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c69269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f6196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af2150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f3981eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c69269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f6196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b305d9e4e7bb0cfb3b7ab6f2a16664d9d00ffe6e15a8f452fe648d4b20ee2b0793ccafc6418112053d1c539dc198ca765b3a8d0cc38d47492143067a7a046f7200cc3da9332bfc4c2de3e80fe3391c67cfd20927847a5a0e2f07a246a7573e31806138aba397e4b359850d5fb9c7b448092c3e7d23790979247670115db6275521d89216596cd5ffcdba10ea510a72867528d858a39e4f1abc51139fd0eef252f0717f85ce19e45138ba4c97f5dc59649cfed0354ac6b917763f7fcaba4a9ff65288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc73502405abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b33335039be7eedfac2e3ac623e673589a8852baecd7723f5e37deadf71fb908e23fa261b1844f304c485490d5e999b2633afba4d7b5b76ec065c640ecb11d4f893ccafc6418112053d1c539dc198ca765b3a8d0cc38d47492143067a7a046f720305d9e4e7bb0cfb3b7ab6f2a16664d9d00ffe6e15a8f452fe648d4b20ee2b07906138aba397e4b359850d5fb9c7b448092c3e7d23790979247670115db6275520cc3da9332bfc4c2de3e80fe3391c67cfd20927847a5a0e2f07a246a7573e3183ccafc6418112053d1c539dc198ca765b3a8d0cc38d47492143067a7a046f720305d9e4e7bb0cfb3b7ab6f2a16664d9d00ffe6e15a8f452fe648d4b20ee2b07900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000109fa99daa58230b33c76e5c73f7ee82fa9ebccf7e8600b7c0865b2b480b8a2951a4ef048fd214d3b1fd00ccb356cb23305b4b5f8c03f51e003da89e0e28345421cf8fa1b5a8723ebd96f7c2d70f0e28074d9f6154464c2e35fdc9d5599422fe608572a85af70524a81f485ac0ad877b0d9ef201aa803ef9c00b4dedf69b38acb33d72a2445768b2e1a74044287294267c504417ddd7953bba823fb953b8c75931e8e556ddaa53ed132e59ba876a18e7e2f4d5467e72ad3dd846e05e5aa96c301213163b020e9245fb704b71c11746e66206a26e9958d1c13b010bec4da282cb332a12444cb1cf554552cd4781050d5980f211f7bdcdf4d407d34a007fc3a245220ed2e93d0ffbf32e4388cba197268096a8b6714cd3d90f59df599196a426a3b3a5b3f1c279bc2572b87d9a22f93a64a9e63e05c73fdd3bd87f3ea0a071f2cde2a160a8d27d93908347270ea94deadd02188176c223f430e635343a3dc49850c1a98720428d8f9b5c4a9bb55adedd079f6f22273ae86a169e7f2efb235ee7b650f6336919514b003944e5494da84066ff9dd3222f6294ef56661206a308f7466000a40f6f48279bfc9597875d1f7c5a6cb4284c0b3b08aff353a2e7a1523a36607d8a8819df16d305cee6f12f5f1625e8f770da87ad09f04d1ec303d00cf12a30161402a5a3b0a7b8cd68bd0d65844ac88a17b23da42706bd49b64d3f6621d4f3998ef0d0bc1b06fc97b11854f0fe9513e8529fe496964346f634a2233e5bf68277d3947cafbf229a9586b083cc633367c3268e5896267421f330fa1ca6518221a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c619259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e803e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b3c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc472186137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58672c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba021e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff1a6142eabad9ac1231abb2237fe06e217b0cce090905d80c1b5ce78973f1c619259ebd15452653edce544ddc801f91dea739caf30047210f7dd049638c0e39e803e64e95a6405c5af85a7ab17f6226a722b2d4351a834605567623d543b8de7b3c19b16a59bfa3a507a5854e809dd958ff93c4c6eec9b31642b70d17bc472186137f88ec3f41cdc6d9c465777ceac143ad7e250984905e1ab04eb32a529c58672c807713c0be3239263b9a8883153ebc74c873f284bc9b00e8de7dc2ad63a79a217dac9d3c4904e240d5fb557095c652413020338d84dd69d85c4ee69d0dba021e825362c3b6fb1dbf2a04aa8f6a39ade11678c87bc81bb1c0d0e20662f245ff2d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4821da14ca1a199664fe96c00dfdadc6f774cb0099050339947762320acbda4f921298a8342161460a0a63944925900c28283b9c6ae2cb874a22758361d7811b5e63af4d6266fcb4016eda88f0b8382f0829b30347c5384622320af607712e403341ea98dd2ad29467824de238bd178f586fa625f611b07b7a7fd42b73123ce40682e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba0af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb1dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a298a8342161460a0a63944925900c28283b9c6ae2cb874a22758361d7811b5e61da14ca1a199664fe96c00dfdadc6f774cb0099050339947762320acbda4f9210b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011fa50446e895affd0c882ffff31e6a129f7497fa47c50d567465bb5befd0d9311a7f80a864a1db5e1e1817d3a45978ed1594c742ff1b0e87ba569baced13d53334053265fa7428b94f366826202e389c7d81035a35044d91b62acc62728eff210bcac40c467248b59e9d337db61e5db8b06a5e50a4bfb8d33f271f31bd332e22289139b492aea1152c45e2db3c3351edc39b126ca2fcda0968b9ed647987dd87174165f9a4ad6683cdbdf9ead43c1106981bb64c0703586797e455485d91b4283efda4a93da79866e0375520d44df8fe385b98e9f88964fe96c63b0c2e6555e20a548a884c6a1c01a6948d07121ca6ff38daf0c134ee162d4e1169a331d0edf90eaafc81c888770de760347d3b2523e747f1366dc7ec2342fb2a55dc52fa602724dde2bc5dab69ca1a4195896926ef3279e5b00eab69a3cdd973e6538c1a2fef002847ff9ea73b089e1e214cb762f65451013e9c7a29d6121e67466780287939345e18629a81357b28d58efe1f05f349baa04f9fd280f9843c365550cdf1c0542f8004e8de1bab07ad4741ab68273f2a3f82cd0b6ffbb85f3a7b33c67c2725711fed729fab7b7ebbb0608b5f44548ceca7e382d4432b1ab0fa4d4c0ac98bf25c1670fa54cb87976aee4ff43710d5e274cba69ff154acad34afa4b80faca8887c2eeb30abe3f935fe2871a65bfb56be6c63d6fc9b20a138a408d01f39c4f332e11fc34e82227bbee0824d3e890145c1852bde95ebfc50b1ca27225ae73e3026bf0f4f9323cea9f65187610adb5c151c24ae99cfe3e0b4f2e1ebd36f43bba6d8c109c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b09c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b39ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e2e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae9682c52dbd4b3e6e09e1ee805e79005f0bc5d1ef5ded4e43494b88e3889b14b0e982b262cc5955e65935d7d23c1946687e15b1143b0d92ac231ce3dd27d0547e1a618c9d9804d1af74f9e6525b58fa140978c05cc06abfbd4d3afdd2faa1c9c215527f0fe2bdb474e59eadb6476d794884dafac34e825f9c1ef1ac1b293f21ba637125c534548436e43bf17fe0c04c54749cf0b77aa2d2eed5e1e60a2d2e8abc0510461dda8d89f9244340ca170b871686ead72c0f6aeea72a59dcc85f5bf2f6861063701d30cbb53d7978d008cd3615854317feab4f9fde2db6584c6b4ea9b95e5068b7cb70c4e968fe90a321a45ecb6c221e359af3f511fa60b4bca61ced1e0ae2e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae96839ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e2b262cc5955e65935d7d23c1946687e15b1143b0d92ac231ce3dd27d0547e1a62c52dbd4b3e6e09e1ee805e79005f0bc5d1ef5ded4e43494b88e3889b14b0e982e871c3c42aa04a61ab6490eb7ffc1a8227ee1e893720b35255b20970aaae96839ffdb297410b52868e48d482393c5ba8c24af7bda65e9571f6067293ec2265e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e8194fcd5a97700e739a2f24cafd61b4491112661802452831399f4fe0c2c8304f1693e7f720fc0c3e18e66c0f74ed58aee9ea6d8ea1a90efa817954a6939683d467807ed19df7dcb1ceee2577eefd4e488a3c3c519bc76d0e4c2cb85206c0e2d6115c69853abf63db380f5e7d691c62c5a27f45b4c89b995ef9862f6785fb821940a88b1c2aabd86e2311d2f0f16003f34554a35b3cae9b830c25258d4bef21c7558cd368b780e43fbc21e63a2c0f9d6c3d00afbdacaf095ad69ad3c69e8a12ca6b7c480511320f61c38b01e256472115e384cb1544b7c6c2c1809fa6756d5305ca7610ebe8c0334c175749c19abf108e4a6592cab85d824bbab119e65411e3aa039b1d5849ce36dac25aedc8381f4062ac089c68ee62dd6428e1f0d566c3316ec15fcf1ac9caa211dd3405d08e01d84341f34d2680d29e84ee4680f0e4bfc050014b77c11e98c6a93b167065919941eb20a49513ac5583bb51cf96d9cee0b2af2f2dcb7cee2ab8e2a8bb6de75f04c1cf0f878528fc1ca448e58f9669fe8ff19973d43497a56cc8039c2fde9cefe0ca1897f3d9d53193ccd03467b4e269ac635d63a45401cd2f6dd6e0a0cc2acce0a45dcd0a215d3b9d367c53955f78c7d073e7305b385fdf1e74396fb4b21010478ea9706bfaa4809440d935417dbbc764d1b5056a52a88e47bb79c7bb73ad4e6877ad11d5462f9149f56ecb0ac0ae8d29e1858d0c3bb0ce172cbb5ba468bd5ab4a8293f62e449ac1f2153c56c6b9406ff1195b8d569bdad6892038a85deab533ace8629f62faa985bfeb64bd1fbf9848cc18a62107e04b5f9b19f1ae1f7823a61b01ced64411dfefbd3a1d74748adefb682759def81fb4a064e60e51e087dc59e52077c2b7f76d095e5f0fbc78752104993b3ea5276178de0781b8669d58b23e86e6c396585012b59689661559b65ae90704c15ad89e8721f87e479962a74dc1793b8302a3b93a43850fc71b9349a516fa283939c4e75c5625889a0112bb7b38a1f8b78bc96b29a7824a49a70c8fc68d1f17c6c63b18a3a9da7765feed4484c75e298f0d329e2351994ee389e0703972e2091e20d884cdaebbab02055da9681b2974c1effafbe95a38a7e8b077cee0c19836e1df277b32514454fdfaa25697e4d6ad84a9010d639ee2f1448075311f3e6918a62107e04b5f9b19f1ae1f7823a61b01ced64411dfefbd3a1d74748adefb682759def81fb4a064e60e51e087dc59e52077c2b7f76d095e5f0fbc78752104993b3ea5276178de0781b8669d58b23e86e6c396585012b59689661559b65ae90704c15ad89e8721f87e479962a74dc1793b8302a3b93a43850fc71b9349a516fa283939c4e75c5625889a0112bb7b38a1f8b78bc96b29a7824a49a70c8fc68d1f17c6c63b18a3a9da7765feed4484c75e298f0d329e2351994ee389e0703972e2091e20d884cdaebbab02055da9681b2974c1effafbe95a38a7e8b077cee0c19836e1df277b32514454fdfaa25697e4d6ad84a9010d639ee2f1448075311f3e69154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f43ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c7942ecab19fa4984e587f65c960abe312a14911f43b6a89c4fc00189825fe5ed7753d32489c05f2625a56dc841f8715cf00bafcb8f4d2a0ba91dd13c518f9cfe90713724f0ac1b4c5188c3274dfe3b442f0a5f988438b3c9aff9885f6af3af876cb24b81373b72e6d9ef1bd0f62e5acaeb018dfd59ea142d8d96b43818d2fe72caf29bff991443d9d41caaa0f3fa3618c10150330b147641f92448dce69bed7723c0a129e2bed69e0b98da8b9fdc63663f130321e9cc946ec2294d51698ce77aac634ab22fea15d89c74a4ca0d1cbdd19b18c8dc4699b5e6d44a70b9e363033d8121dff3c5197fd00d1d0a0de7643244f7892ab4a9b26b3f4238af227929b22c0733ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c794154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f43d32489c05f2625a56dc841f8715cf00bafcb8f4d2a0ba91dd13c518f9cfe9072ecab19fa4984e587f65c960abe312a14911f43b6a89c4fc00189825fe5ed7753ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c794154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001150346e04ef75c825ea58de669c4722fec4507fd927b6a9cc11c1d752c01a2082e289a36beec474521fbafe255a478d7708a2f26d4069a396be5f267e79fdc84271cc5dc2338990c25b0cf6bfd13fe9517aab83a9e9ca1298259bf10ad3f648321199c6076c599e6dd7524a7b93b6c38fe4194c45bf908e9ce0020fa4cf23d5b17f689467b40bf3f1e26b061288dec8a83eca77307e625bd3e5f424a2902bbad38db0ebf41f00b1e2430dac732b1f9538b660c4f5471df192133fa98d75ebe7d01171cc27b8cd4cfeaa00e4925b08b97455da8624287e3d6f045174f86e425f6277b0d7b0e129860ed31b803d00a5558a79e29ca6509c027a3b0212ca93f0fff32b5528a791c41a0138cac54d49496ae8deb725078083e61df30a59f7e5e827d0c56f4eed2aba9d8e66f938ba1cd90c25da6322dd1fd95df541b148ba1fb645e31e486ecd0c41f8576c64088be2d8a374bc1ce807827fd7f0f80701520796fc10a1b63b53e1df4daa23be2eb336b2549e999462f5d90cd788cfd453062de28073ddf2583b44797b135dbe028fe4ad956f72f9b0b52d0974c828b6e9f7656f735118e5204d54f921227cbece1ae30f2bff036b4d460563bc3b23d1131cf5c20983be7b3cc6d9fe66753b064a06b878aab2b657f34acb54deb8cb6acd44625bd2c23cbdebd866eb86c0fcee40911ca8a9603891ea4be3d47fca90ecefae60e63c131ee9f3e305cd0801e0804c8944789927dc060ebd54b5ddf2b9d44e6d8d7cd9c0b001cc4b9d7ca0f7c576c80e04bd258c29fdd5a8944d08704a475b9b389a0f80175af5850c48b5312811458ce6b91ca32d6cfe591513b4e62e362a21d6f8f153e8a50a7af3b74aced7eeba731946e35ef6fc91677fbbdcd3649ce4ae29070ec074c6cb993d6b89f5c8565bc0819d8f2fe320f7bd6962887ee70ed2a932dcb6938b393466c294760a37a9a43f7e6270d2414898032b6d093aabc43c26cd23498247e1f9fe3319b1cce9afcac28813cbef6fa4d6b30eecaa7a834a1d4dfe4f90d1b81e0601cce64e331650353d77ec3412b4c4b90d85e2e73f0f88f18201b06f436769e1f6ff807900906ef5cca862fba8e56511fe210030f16acc74e5f78dd3f098961e09007f86ff6f910a33579d04593f047dc273cf60c8280699ea08722c20175af5850c48b5312811458ce6b91ca32d6cfe591513b4e62e362a21d6f8f153e8a50a7af3b74aced7eeba731946e35ef6fc91677fbbdcd3649ce4ae29070ec074c6cb993d6b89f5c8565bc0819d8f2fe320f7bd6962887ee70ed2a932dcb6938b393466c294760a37a9a43f7e6270d2414898032b6d093aabc43c26cd23498247e1f9fe3319b1cce9afcac28813cbef6fa4d6b30eecaa7a834a1d4dfe4f90d1b81e0601cce64e331650353d77ec3412b4c4b90d85e2e73f0f88f18201b06f436769e1f6ff807900906ef5cca862fba8e56511fe210030f16acc74e5f78dd3f098961e09007f86ff6f910a33579d04593f047dc273cf60c8280699ea08722c23fa261b1844f304c485490d5e999b2633afba4d7b5b76ec065c640ecb11d4f893335039be7eedfac2e3ac623e673589a8852baecd7723f5e37deadf71fb908e209ec7545c681b4ca67af2a046384bb7f75cdbe6ccac2a6b49ee44b25649d8aaf033c256ccd403b3d21c17f01cc6e39830b7113c6baad9d63f5d127d0ca8c1ce918e807a31e61baec745b3680a23a69b641364929583aeb16689e9bcadb56009c0276de9a6932a003245ef15aef58d798be95c6f3cac18ae207855e797110dad22a541dc9aede8050ad6648812a33cfccec8163996bbfab69265fbcf2ef361c4e077596ab5d4f14c7435038a9742be3e6b737f77900011bd2975eecabf38cafdd288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc73502405abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b33335039be7eedfac2e3ac623e673589a8852baecd7723f5e37deadf71fb908e23fa261b1844f304c485490d5e999b2633afba4d7b5b76ec065c640ecb11d4f89033c256ccd403b3d21c17f01cc6e39830b7113c6baad9d63f5d127d0ca8c1ce909ec7545c681b4ca67af2a046384bb7f75cdbe6ccac2a6b49ee44b25649d8aaf3335039be7eedfac2e3ac623e673589a8852baecd7723f5e37deadf71fb908e23fa261b1844f304c485490d5e999b2633afba4d7b5b76ec065c640ecb11d4f8900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100606f0f394cdb14e52d7e42b8d96317ce5d15da7a97fa290fdf4d0f4fa8ecb010b4c57d90ebf79cc886a546aec72d1b2a25fedb5277408d0b54243bb1738f5d0f4c8401c7c910b2c903a54aa6696bf81c711454aa2412d751fb7e16b3d62cbe3344a123f27092e2d7f8b16c4f71b37c752d8a45c2d74905db8bbf4d332fdd4f1ebc29f59913939e26bcce6f4868bc687517ae32232098cca9420a7b6a45b98d18a3a053ac2467cc92e0baae90658c88f256b0fa5b75d7ad156df5d27f56ceca19b1662db41eb4a528ec1ce6e2f07605d386a1a4048778f3c10576f104620c6739d62957e6dc24551eaa9c8ad69da4dd875b47dce68745b99daee1a75059b8401eafef175bf83a01dcf5958f2ef414d820497704be3d015540d86135169516b615d5d7d7202bf182a4f50d9af66aefd17a65d13e61f63aeaab0fa365d258f0ff26b80ce967fee341e3391bd64a45ace7c77ac4c8798ab4b52049c799cc26cf4e1979eb0536388502a941649b177a1110a426583fd01dd7f708ccc105f6be339e1a9815ccb79a44f0e2a5d81401f901ac7b42f107cc4ef6eef6f6ba7f032b638334d561bbd1fce4d27b01f4f6aa82ca6a6c235ed7e6d7dc213dd1c5524287b44a1cb7b824a9db42173a460cba12f8fcb678332e85fd484a5154bb1c553851fdb03e954d0648466e5013db0256ae3219fd425d1ff3b2e9255d1b24f54c042217301b009713025f921af2801e957db4be3a60f481b8223f549057bb8176060986c22d1c4cd84325506112a2c5128ffe7455234742d0e2465182a7ebbbf66f8a2e082994104ae8e0b8c6b498ef4a340e1f5dca7130cbfc365dfcbac8513f99314e91166befb5171f47394b6710b5cbf1e0a257d568300d169b1ede64dfad66ceb1700fe451768c639be186fcac7304469cd48d622907d128ea9cda620376fdf688d2301bae89739c641e7903538cfbb9632b94e46ff438240e7ebecb2d760209772f0f759750bdf20b67a2ef5e3f15611026a0a4342b0c7f9bf4aabce065f5d0ac19308a68af420df4985d10a1c0ea9eefd981a264d0fccd5d26ee7050870a2f53e80d4bf493b5ba39062eacd73b6ae550c100ee6bdb353112abbc833110cd135c7c32b40b6c4a45c6f9d15328c4951aaf3f21582d20d41be66fdca9ffdc32eca3852994104ae8e0b8c6b498ef4a340e1f5dca7130cbfc365dfcbac8513f99314e91166befb5171f47394b6710b5cbf1e0a257d568300d169b1ede64dfad66ceb1700fe451768c639be186fcac7304469cd48d622907d128ea9cda620376fdf688d2301bae89739c641e7903538cfbb9632b94e46ff438240e7ebecb2d760209772f0f759750bdf20b67a2ef5e3f15611026a0a4342b0c7f9bf4aabce065f5d0ac19308a68af420df4985d10a1c0ea9eefd981a264d0fccd5d26ee7050870a2f53e80d4bf493b5ba39062eacd73b6ae550c100ee6bdb353112abbc833110cd135c7c32b40b6c4a45c6f9d15328c4951aaf3f21582d20d41be66fdca9ffdc32eca38522e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d570ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b03dae1cefa8b3e8651b5641fb8f11cb8a8245710ca4daeeb318975e771a9c6270944c8b525cef9aeb6196bfeccb204f8c0abd5e804a7bd874b22c345a0839749374a86518aad0cff9744827bab36a25272529f9a68b28b9c99ecea69bdbe3fe42179eb6829f66ce011798143af6163c3437fa534bd33624c60dcfeade441f79311fa42639b21ecaf1ed4e983217b62a6709fcf49a5422b064a6309c8e2c557662260f666d094d1a6403be2dc098fb8f586eb4ad8166745ba69d9a8268d67ce951663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f21620ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b22e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d570944c8b525cef9aeb6196bfeccb204f8c0abd5e804a7bd874b22c345a083974903dae1cefa8b3e8651b5641fb8f11cb8a8245710ca4daeeb318975e771a9c6270ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b22e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d57000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001220957af418cb9b6e475a0ffdf66127f6f7911b18ee0dbb53e69156b418700df3f0c640b60bcce9d9dacf3d347d8344c654e319fa4a5e454d031381ee7b55c67321fcde986b442860587e2eeca80a37cc409a3d4a7eef0ebae5b22c27156f97d08ebe50569cc1afc61cb59db2e80de17f5c38e61e266aa49d9a67c2c8393fa1d20aa93b49f4fbf793afd3a30019152584d4d9cce426dcd7c711cc712b3a2cf1d3485262a49bcd62b92a2cfca12984b17cb223b4cc92d409e4c585a91c8ec3f6421b5ca57e91b682d9b704ded7cb7fe9d2abf7b5144a389cd6d7f693aa8dfa4aa21109883bc7238c50da8f04cce374ac532a8091abd7fc08fbb493c9cfd6fbdf13bc17e7ade4f52988d3b2955268cc07449e47cbb0a9fc206fb74c38c22a5ed3b04d08ec323b93a949624451f0e5f9aadc3d62fb0e1f95686a45d57d01b4c84d9208255d86aa1c5664c3eae47414f0c280a23ad4757763c9dff03f72f42a0301d2b6ce68a650afebc294a04a72c5544596a8df40283efdd91d56f16d60aaa866108bb90ba84973052a3060b5705820b465eb85dfb4b7a4a690283fbd0cb2cc63106b1e6ce04fff970baa1c1b3a6f9c0d0666758e85e5f8f8b991753137a86519b38750511b3989a96394e9e0235e7cbdc616433ac9f6a3c57089c1fcc35ec0c010aa26faf70b587195d607880d11954be91bb16a057b29651b480558cb1aa40d32fce2bec747aae841a7824c4e3eb21758a4dfcdaad60acf70a3023e552f0bf1f3e196273ae7fee472292b95d36e0aff3b57be60f455e1ed5169f02b797646db81b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac24fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a60215507121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a7235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec21ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f30c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c80f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f046391b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac24fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a60215507121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a7235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec21ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f30c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c80f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f04639299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022149786017ebe61cd3033d4fb7f00cfc465a497b1464343a1a46eb7f2ed9b5de037ecb8b7278ef89d6864ef9dbf9021f38c404e2dd31c721606d7a5bc8011efd52368a8d9f0df500d29c787f59bee3d31a7284c876cd8b378363c8b9485c4beaf0168feb3ec5487731f5a78c05dbf2354012ffa5efe36b383af6c5d5787f595aa14840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c83617f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c37ecb8b7278ef89d6864ef9dbf9021f38c404e2dd31c721606d7a5bc8011efd5149786017ebe61cd3033d4fb7f00cfc465a497b1464343a1a46eb7f2ed9b5de009e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010f9a88c30f1b87df9ac76e59de024fe9ab35728181948abf2a96dd729623d06627d9a11a1346b0c8207d8123e198121c7449ea9681d843e6f151d0dc93d2ff90045708edd29a5a59c410ae9d02ade76927c1218e07689725221d9a8edcde6e6c04fb6f4b9d1c6139dbaa8cb0683ae711f1613224da9c7c589efbb85ed84bdcdb0fd85d5b0459d2d8364dc03d9164d30fa26ceae5868285d65f012a8b7de34df922b9055b4171a7c84688b08b47e7a480cb1cb24ba676788b4f0aa5d5f477a16931787fd0aef86e99bc082cf8082a63f676d63f7ce65c473eea3aeac4a753ad332a329c0dd0152b92baf13e28276b29d1db4501433e788ddec920e166ec9ffee4170e682cadc511fd3763d6eacbba3e92451589ce14b2f4c824d13fe538f54e032c66a37920ccb3e03e553d61f2dae9e9ae0d84fcf57f2ac35763bb340a0640101c60709e89b8ec0d280a52ef346063d1226225d1daf9e9af56513f094d40286f1e498a3bf3b4a5c65aca015a4f18ac9dd3bf8a126c13c2827acc82c1214d240d16f2d773b487a63c52e4f38268d9e4c7393d45cea338ebb9fe10d3f98e26fca0387aa014d50f83870ac2d98843a1e74fae290a110fede75636b7abd7b78c1b2d26f27d0ec5157f7ef8c87d8c2796d3cdf84cd7f45ff9a8b26164f57f8390c3f62d42a4b61cb41c0382fcfee97dffb49fc4565854b50a17deb5a9f9151f40ab16202b428771f5a59cfa079644dffeb7d9b92dc35b61056335420d1b6fd3ca53072a08f7ae479289bb3daddc32ba543552ea3720348a33f3af3c3764b32ba296a100000000000000a03bc351b1c4c3feb76cf38577f895a78cf981d374ef830e76a2aeacd8fe2e5df0325d2bff4c93e2e124c37a1cfcab013567656e570cff2674553e6ef4e0b5d6c61f9147954d57a6aed72b58b2cdba48c20432722dd0c7cc87f080f23dbefd72b1098b6a2d7ead0c312771f4b457fa2ec159bcf80b1d6cbb2b95f19d0621be60af3868f1fc4154ada4d89d01031f989ca739845260c59a5d76fa0a76fd12a885f613dddc3bc414dca0d05c78f14722bcf01b1794b46a71a8244d426d21300fe75a2905530de72e0fcf19466e4164a45f14cf5e3fd54aa79e63273aec686f437f1800175eb4e4d6a310e556df25c110186e8e912a63a38ce9505f37a2db717854481a8635031bf9ee44576390ac071f7672c1372b0801ea3399ec23f1c239d849a9154e659d10cb67735d98081af522b78d9193f816089a45029aa55f3c5070dec02ac29b3a2caec32c74dbad1a058829f8569919081c9336e9cdc471d37697a3d03e5a16889f55efb389c1a04d202c4d8b299cea2cdaee49e551db4e5d6a242f912ae80ca176cc7259f41b1d4a89cf3ca853f4a285f298b1b0b08fecb4efe5d24b1480bfb4177d46f36473f582664bbf3ded3bcdefbd5f096425d09f0ebe3943372bbd640075b27bddfe2306e543517bbf58e7b88df6319d7c030f0c3d8d49851e3d5f4dc256523702007a4681e262fbc4274e4aa7014fe3531c90b3f353724e43227a46d7526d8822a0c80982e3c39c2eacfa22f2063459c0c64a2431e9b39a4f28d8c0eef6e44ce7147cd48993a9db894e097469267715e47a641c92706499d91ddbdde635dd1d29298e4fecd5d5ec057b71b6435eb0e5073accddeee9fa79890b40d3dc962795b6d50efd7a4fde8b7de27db3f58f83a2ac4ba5b154f6c159d7361ebc55c9018a70848bbf7696b464b46ba0e4bffc5ed2f9aec0a09cdaaa66523ffc2552798ae1768f0d46ee8e010c9a74300e50a260a810d98fb73a7d8162f008956c6d6a2135cac6b4db4d3843dfca4b9a151efff7be3f516e5280cacec7982087455561e37d1537e87219ed7097b912555519ee3cc97435043cc315ed0bc8227a46d7526d8822a0c80982e3c39c2eacfa22f2063459c0c64a2431e9b39a4f28d8c0eef6e44ce7147cd48993a9db894e097469267715e47a641c92706499d91ddbdde635dd1d29298e4fecd5d5ec057b71b6435eb0e5073accddeee9fa79890b40d3dc962795b6d50efd7a4fde8b7de27db3f58f83a2ac4ba5b154f6c159d724cd3d73bcec04a086d943b11a50b9e5bf4c4ea3fd1411ae37b301cbf711d17b36a44512406db600148f1eb001ed71379753d51a901da1b816ac90e7d853b8f538fefc2de7e30a7e68bc498de164b442d2fafce6b4f37068349383204aba4a3f301db594e421a86195e103d9444fc340ad3b064e428e1066eb0c3d10960189220c894be0097594896891e5bfdba9363e21758f49fb9073f00b9f3c1d2dc734ab2a0e1a294738127745d3e2333cd3c31edd98b3eab8eb8e12b09c64869385ade13d5f4dc256523702007a4681e262fbc4274e4aa7014fe3531c90b3f353724e432bbd640075b27bddfe2306e543517bbf58e7b88df6319d7c030f0c3d8d49851e0837e1a9b0b428e63400481beaee9e5612ba535afb2ddee2612f0dbd343c23fe3372ebdfbea8ce399b737a865eacee23a5001068cdbdb38d21720e3ebe8cbbaf290df54e88e32cef331ddbd06752ed212279984ccd4574beffd4161812cddafd000ebc74432185f0cb7f7196be618a623b75d1ec20ef12f4869e792bcdedf8631dd6ba8a32a474f2cbb5161a007d059303a22ab12905e063b00298e0eda34a312a08fa239afb09c2a988c51112da46edfdfbe0294838a0e483d9a8a5a2e47928098b6a2d7ead0c312771f4b457fa2ec159bcf80b1d6cbb2b95f19d0621be60af1f9147954d57a6aed72b58b2cdba48c20432722dd0c7cc87f080f23dbefd72b13ffc2552798ae1768f0d46ee8e010c9a74300e50a260a810d98fb73a7d8162f0361ebc55c9018a70848bbf7696b464b46ba0e4bffc5ed2f9aec0a09cdaaa665208956c6d6a2135cac6b4db4d3843dfca4b9a151efff7be3f516e5280cacec7982087455561e37d1537e87219ed7097b912555519ee3cc97435043cc315ed0bc8361ebc55c9018a70848bbf7696b464b46ba0e4bffc5ed2f9aec0a09cdaaa66523ffc2552798ae1768f0d46ee8e010c9a74300e50a260a810d98fb73a7d8162f008956c6d6a2135cac6b4db4d3843dfca4b9a151efff7be3f516e5280cacec7982087455561e37d1537e87219ed7097b912555519ee3cc97435043cc315ed0bc82c473fd576be448a6add5680c72779f6ff12d6c95f585f21c0621343d3749ba03520541c90fcdf95d823782eb41b1dda87da802d96d0150c116bde29f26a8e9e2aad12c86d92187812490ac1ef04f4b4d3988f6ef5f60b3e58140d9f036f4b9d3e6f9efa5e729a67ec5442a536af82ceac9d73c6018b7590c78bb291dd4c87c40837e1a9b0b428e63400481beaee9e5612ba535afb2ddee2612f0dbd343c23fe3372ebdfbea8ce399b737a865eacee23a5001068cdbdb38d21720e3ebe8cbbaf290df54e88e32cef331ddbd06752ed212279984ccd4574beffd4161812cddafd000ebc74432185f0cb7f7196be618a623b75d1ec20ef12f4869e792bcdedf8633bc351b1c4c3feb76cf38577f895a78cf981d374ef830e76a2aeacd8fe2e5df0325d2bff4c93e2e124c37a1cfcab013567656e570cff2674553e6ef4e0b5d6c61f9147954d57a6aed72b58b2cdba48c20432722dd0c7cc87f080f23dbefd72b1098b6a2d7ead0c312771f4b457fa2ec159bcf80b1d6cbb2b95f19d0621be60af183622740a517b6d712ccc4180b56fccb474e54f2117b6501ddac1c9ee26e4c925ec30431abaf7e692098d5d7df2f3df203516b857d28f908ecdc54fcda0726b02cb2bc0a45fbdad7a39c64e537809c3b416fae89a0d8a1c582b2a8ab41438562651860227a4f53284638718d23c6dbfa9d86f505426fd972e4764b92ca79b0a1480bfb4177d46f36473f582664bbf3ded3bcdefbd5f096425d09f0ebe3943372ae80ca176cc7259f41b1d4a89cf3ca853f4a285f298b1b0b08fecb4efe5d24b2bbd640075b27bddfe2306e543517bbf58e7b88df6319d7c030f0c3d8d49851e3d5f4dc256523702007a4681e262fbc4274e4aa7014fe3531c90b3f353724e431540891272c824fb1e2c56ee54b95bf183eb29672173cfd84c803e1d7d20b17d038e1b5339850e19e2fc7911af89d082259638b3aae10185dcd6bb52e07137e7112929cb51eb80593e6c023a95db602854a404133b0f58e87eaf657b0856be6d17f387f77a193286c0314b2c8fd9175b094b6625b3252ecb07c329c8d86514f313dddc3bc414dca0d05c78f14722bcf01b1794b46a71a8244d426d21300fe75a3868f1fc4154ada4d89d01031f989ca739845260c59a5d76fa0a76fd12a885f62905530de72e0fcf19466e4164a45f14cf5e3fd54aa79e63273aec686f437f1800175eb4e4d6a310e556df25c110186e8e912a63a38ce9505f37a2db717854481d647b97770c00c07d845646c2c84adc20b603a4b421dc328d587bbabad02ddc0d48af011e998a83d42ba66cce6232af248518aa83a6713fc4956fe85a83960a0b40d3dc962795b6d50efd7a4fde8b7de27db3f58f83a2ac4ba5b154f6c159d71ddbdde635dd1d29298e4fecd5d5ec057b71b6435eb0e5073accddeee9fa798915988938a63e304c86c4701d0de48f1f626cc25520a23a339a2f011f44fb11442af302f56af9429b0a0c4a4489b0dfa9728f61ef279f74796adf511fea96138815305178ca22644fb423c8b6fd96feb152839780e9a8f4460e06449c11f3afd013ec604a01e24e904a7984b0281d78d20b6bd2b8048b936d786c4aa7cec82390154e659d10cb67735d98081af522b78d9193f816089a45029aa55f3c5070dec01a8635031bf9ee44576390ac071f7672c1372b0801ea3399ec23f1c239d849a92ac29b3a2caec32c74dbad1a058829f8569919081c9336e9cdc471d37697a3d03e5a16889f55efb389c1a04d202c4d8b299cea2cdaee49e551db4e5d6a242f912a08fa239afb09c2a988c51112da46edfdfbe0294838a0e483d9a8a5a2e479281dd6ba8a32a474f2cbb5161a007d059303a22ab12905e063b00298e0eda34a31098b6a2d7ead0c312771f4b457fa2ec159bcf80b1d6cbb2b95f19d0621be60af1f9147954d57a6aed72b58b2cdba48c20432722dd0c7cc87f080f23dbefd72b10adb5dec1e545be6efa40ec41f15f6315fc9b97c723490e6062511ed5810a971284cd649ef540f6801ed1879ea71e0ebb2eb820e40ad67524e74949d03be085329e92d96ecea737ff89a586d7b598d4906907c0c49287dd516821ec374443ced3f33842bdf1a3f600602f4f9aa5aea3a79a58728ae5902fa091da16d6c77967415988938a63e304c86c4701d0de48f1f626cc25520a23a339a2f011f44fb11442af302f56af9429b0a0c4a4489b0dfa9728f61ef279f74796adf511fea96138815305178ca22644fb423c8b6fd96feb152839780e9a8f4460e06449c11f3afd013ec604a01e24e904a7984b0281d78d20b6bd2b8048b936d786c4aa7cec82390223cb81ffbad18dacc73b19520996231a0b3d97c82370f62acc2aae30d0f10ea1337ee10d212d48ba9b06ec950692448ca8eb5e999faff07e0cb2f4532cbc25813ec604a01e24e904a7984b0281d78d20b6bd2b8048b936d786c4aa7cec8239015305178ca22644fb423c8b6fd96feb152839780e9a8f4460e06449c11f3afd0038e1b5339850e19e2fc7911af89d082259638b3aae10185dcd6bb52e07137e71540891272c824fb1e2c56ee54b95bf183eb29672173cfd84c803e1d7d20b17d112929cb51eb80593e6c023a95db602854a404133b0f58e87eaf657b0856be6d17f387f77a193286c0314b2c8fd9175b094b6625b3252ecb07c329c8d86514f31337ee10d212d48ba9b06ec950692448ca8eb5e999faff07e0cb2f4532cbc258223cb81ffbad18dacc73b19520996231a0b3d97c82370f62acc2aae30d0f10ea13ec604a01e24e904a7984b0281d78d20b6bd2b8048b936d786c4aa7cec8239015305178ca22644fb423c8b6fd96feb152839780e9a8f4460e06449c11f3afd03868f1fc4154ada4d89d01031f989ca739845260c59a5d76fa0a76fd12a885f613dddc3bc414dca0d05c78f14722bcf01b1794b46a71a8244d426d21300fe75a2905530de72e0fcf19466e4164a45f14cf5e3fd54aa79e63273aec686f437f1800175eb4e4d6a310e556df25c110186e8e912a63a38ce9505f37a2db71785448384ec62a428d3b92c23f95ed860ecd81f89b88c6f437ef76055ace077faf2c3824e2c7cef01cf1a6438c74d27e45fb4d9e21c8c8a3e6fc4363ea64ef922ae27217f387f77a193286c0314b2c8fd9175b094b6625b3252ecb07c329c8d86514f3112929cb51eb80593e6c023a95db602854a404133b0f58e87eaf657b0856be6d12f040c501ba43b57ea6f6eb3d2e877608e34cd16194c358aa96a6f6f3e297130f67e159915255f945b2e7ee050b70f915abcb465ab4202542c64ab1f528f09507d0e40e121f1f4e8986f7a480f5a0b08021963f96fe62fbe20ae41eda1286ec214bcdb4b9e59391751655c2a4bed6d2ddcdd3f9573624b7a467ab2506a94c741337ee10d212d48ba9b06ec950692448ca8eb5e999faff07e0cb2f4532cbc258223cb81ffbad18dacc73b19520996231a0b3d97c82370f62acc2aae30d0f10ea13ec604a01e24e904a7984b0281d78d20b6bd2b8048b936d786c4aa7cec8239015305178ca22644fb423c8b6fd96feb152839780e9a8f4460e06449c11f3afd00f67e159915255f945b2e7ee050b70f915abcb465ab4202542c64ab1f528f09512f040c501ba43b57ea6f6eb3d2e877608e34cd16194c358aa96a6f6f3e2971307d0e40e121f1f4e8986f7a480f5a0b08021963f96fe62fbe20ae41eda1286ec214bcdb4b9e59391751655c2a4bed6d2ddcdd3f9573624b7a467ab2506a94c74223cb81ffbad18dacc73b19520996231a0b3d97c82370f62acc2aae30d0f10ea1337ee10d212d48ba9b06ec950692448ca8eb5e999faff07e0cb2f4532cbc25813ec604a01e24e904a7984b0281d78d20b6bd2b8048b936d786c4aa7cec8239015305178ca22644fb423c8b6fd96feb152839780e9a8f4460e06449c11f3afd00837e1a9b0b428e63400481beaee9e5612ba535afb2ddee2612f0dbd343c23fe3372ebdfbea8ce399b737a865eacee23a5001068cdbdb38d21720e3ebe8cbbaf290df54e88e32cef331ddbd06752ed212279984ccd4574beffd4161812cddafd000ebc74432185f0cb7f7196be618a623b75d1ec20ef12f4869e792bcdedf86328d8c0eef6e44ce7147cd48993a9db894e097469267715e47a641c92706499d9227a46d7526d8822a0c80982e3c39c2eacfa22f2063459c0c64a2431e9b39a4f1ddbdde635dd1d29298e4fecd5d5ec057b71b6435eb0e5073accddeee9fa79890b40d3dc962795b6d50efd7a4fde8b7de27db3f58f83a2ac4ba5b154f6c159d73421652f80dfa1c471acc003a4e13536ab5fd0ea76b20c092e8986c28ff83b721f86ab10cb0b24dad0ee3be3217cc79d764fcaa83178cd9076b5b3fbf66834f4214bcdb4b9e59391751655c2a4bed6d2ddcdd3f9573624b7a467ab2506a94c7407d0e40e121f1f4e8986f7a480f5a0b08021963f96fe62fbe20ae41eda1286ec319abe9b685d329b315c1c7e71a7b703cf7f2b1517c6ca4a2a7460d30423cc56260fc33950306a005105c0d9bc887de9f26676d2a9f45f06b26f6356e74ef0621dbeb5b85635924604eced52f3004f0ebf7f13424a460dc509ac44ae5efde0c70b5dfc0a75cf2099f9b0601432b428749e7056f6a3ee79ee7cc64a9581bdf2992a08fa239afb09c2a988c51112da46edfdfbe0294838a0e483d9a8a5a2e479281dd6ba8a32a474f2cbb5161a007d059303a22ab12905e063b00298e0eda34a31098b6a2d7ead0c312771f4b457fa2ec159bcf80b1d6cbb2b95f19d0621be60af1f9147954d57a6aed72b58b2cdba48c20432722dd0c7cc87f080f23dbefd72b100000000000000c800000000000000390000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000000000000000000205a8a6d6822d757b39053f2d696b440911b98fb855bd584870549e7ded4c8f784000000000000000100000000000000010000000000000020ea132e6ad465bc3d576d24943e8eb110cbbe9e0822e43ab2b485cff78cfe7bbf0000000000000001000000000000000100000000000000206402373ddcb71c9fa2bfe1d2d9097bfb1e67c3a16c2603e6850eedece20f804700000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003900000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020b9754dbc7d8d3eefeff2097a536bf8392001674a00a2100b0f5362195773d33800000000000000010000000000000001000000000000002087acc052c4befcbc863390a53bc9fe76ddf39509151f111da33e34eefa9c20bb000000000000000100000000000000010000000000000020ec80243d3ec903cb562c8eacb603f6c834430b23f15d562812829d19ab4c355c0000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000039000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000201434b750fa4c79a6abbb555e49c6de275c5917f1a7745ce0f094cc6f45451d50000000000000000100000000000000010000000000000020e25b16e92ce565166fe90f1c3edb66f7f7a147fe1eb50d049a44d69786c76df90000000000000001000000000000000100000000000000208e2274770ab1400a8d4a14228b5b83fbbc2f8b567f0d93bae220f05170b20030000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000039000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020deed836067856071ea7a63330beedf7de96c65e2598acaca714fc1e308998f90000000000000000100000000000000010000000000000020f33d0621a9be5d0bc10fb9ba479d2c92b9442af4ac19c6bc422738323447ccbf0000000000000001000000000000000100000000000000204b85a596b27c62a80e804a5f440e38fd1798e192f2e4faf6c9d937e152644b4f000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003900000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000202c3deceeaa53a4fd7cb0576d0c27372976b9f6f95317d05b21ccc995dfa7f60500000000000000010000000000000001000000000000002004eac4235e209d96bd17c310b61b8b64f2de73bff9eedc68f3d5329676b3529100000000000000010000000000000001000000000000002090d7b0bcec2a4257083160dd8ffbec8f4d56bdf900f2859e017373f837e3c55e0000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000260000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000001000000000000002002264f66321999533318a66b630c922ed2c8afd79f75ad3ad7e2546988d2c229000000000000000100000000000000000000000000000020ce6cbec44c6750b87c769f2196e739261249641951d381617e8405bbf0202556000000000000000100000000000000000000000000000020e8b9aa258428d11be94220c2dd6dc9be6f7dfbf6c563495f34ac19fe54c7a02b000000000000000100000000000000010000000000000020acd5d62b97e6c33a02d4331e361fc284fac3d4751616f3f316c28ea08f63c5d000000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002600000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000205e9bb0baae243491c7eb032dee99b7d36c82ec05b60e64eddd17c8be11cd6d5600000000000000010000000000000000000000000000002060fdc81936cb56fefc4ae765ed50a0407b33f19eff3eee870f07317cdb2ef330000000000000000100000000000000000000000000000020ed1cdc4693f53dc4db6ac19967a9854c6557cdba9dd1ef73aabe5680048340b900000000000000010000000000000001000000000000002039c719fa3f6fd86de45cdcbe116bc929d735098bfd57ba95c955727b3f86087f0000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000026000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020dc8aa5c3c55a97bdb7bd81ca0c78663eb6c0009ca983ed54c552867d176e3004000000000000000100000000000000000000000000000020a09e4a0cff4a2719030a0f657ce42c12a2cd4cc27b8cdfd21d1cbcf868b7190b00000000000000010000000000000000000000000000002057270586231d0130eb017de9b965c71be11d39fda49cb46ecc4fc4cf2baff38a000000000000000100000000000000010000000000000020a814a34f76af1733811481d105364da0ad5c6889b20ac62ec695d95bad6ccfa40000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000026000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020d9d44b09d08b8219649fee03bc1d8d6f144f9d725dc46d7d1cd32c7712d6cd30000000000000000100000000000000000000000000000020a9887501139d04ce4e8fa79b998c30f58c8d5ba78c911d4db7001a5436dc18fd0000000000000001000000000000000000000000000000208acf7b66bc86786435ec6708d199d5b065b2e43f560fdf2547c4cd28ea0352ab000000000000000100000000000000010000000000000020609f06fb0f917dd5aff48faaa7c9a26932b0164e4ceb2fcb49512a7126aed0240000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002600000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020884f313cc7a8412ea0712b8a5714e7da07720e79a0b4fd720bc61b0bf836cec400000000000000010000000000000000000000000000002032ce4870dfa2fb4284adb38aa43f49a3a3c28255497b93a85731134cd0486a2d000000000000000100000000000000000000000000000020d8d5941d890c32e24cc840a8ee7a932a739bad1dbbbe6985a9d3ea1a07252ddc000000000000000100000000000000010000000000000020581702be02dcae0d01501fe971bb01119d074a9fa43014b6ad4081e583d632e900000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000230000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020a9d3552f35a3b146b916ecafa15b906c5add1ec933ca9cba051f2f922830d2ae000000000000000100000000000000000000000000000020a1cf4fcf6b4c5272378721d94cae5230337db475b12639f089ecd14272235296000000000000000100000000000000010000000000000020bc7a78bb3c611e1b5f11dcbff023f3a085ed0bf8ecd7f9ece0c033dcabf6b6fc000000000000000100000000000000010000000000000020acd5d62b97e6c33a02d4331e361fc284fac3d4751616f3f316c28ea08f63c5d000000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002300000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020d546ef1f0e27c625cd1a42a9bd0e822dd1f8e2799bc24069109b0793320bbced0000000000000001000000000000000000000000000000207055df64fb4b8fa8d3782b1a47cb27ffdd974e7ce64f3d2e86c91905d32cf2e5000000000000000100000000000000010000000000000020b956db54d172694c1630b069cbb2710ecdaacf116a26dcabdef5e48e9f4e783c00000000000000010000000000000001000000000000002039c719fa3f6fd86de45cdcbe116bc929d735098bfd57ba95c955727b3f86087f0000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000023000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000209200bfaa351e2967f2fc54764d972b7f8e00847d3f6e6fad04c1499eaaafa40d000000000000000100000000000000000000000000000020985c4188d8e7254f787ee9c79ad36055d80ccf27b4944a8eabbd5fe550b5c33500000000000000010000000000000001000000000000002087e4224ac05bf39143e5b2b8f31e6ff5c9879040db1e5c52a6074d35b63b457f000000000000000100000000000000010000000000000020a814a34f76af1733811481d105364da0ad5c6889b20ac62ec695d95bad6ccfa40000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000023000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000000000000000000002072832eabee4d2394be19da019859394a2dece85dacf6dcf800f646033b065c04000000000000000100000000000000000000000000000020ca0664d700126a9fe07df61ee5ef4256a47f6538c636d54d6fa2789f4f9ed53d0000000000000001000000000000000100000000000000200998593abc6ae74ad4db1e3faee5a7426d83e0283ebfbba81490532b53fb3c67000000000000000100000000000000010000000000000020609f06fb0f917dd5aff48faaa7c9a26932b0164e4ceb2fcb49512a7126aed0240000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002300000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000000000000000000020c4cf0884a911747c8bdab3616e880562f218bb45ebca6b9b3466ee45050879e900000000000000010000000000000000000000000000002070b761bbe1a12b3e3924a1a4715dfefdbd10c1f0e149a866baff3973cb6aeffa000000000000000100000000000000010000000000000020d51dbff523abfb61534f3ecb97144bf53b03b4e9ba33067030fe9ec8101607cb000000000000000100000000000000010000000000000020581702be02dcae0d01501fe971bb01119d074a9fa43014b6ad4081e583d632e900000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000010000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020767a689909871821a06a373e9b587cc568cea87792317f5b3abb5ddd9ca6c359000000000000000100000000000000010000000000000020634594a54a3ecf1f4589730560dd9d0b8bc9e1561285bbfee3748d98ea0da35f0000000000000001000000000000000100000000000000209976a44019a2cc25e24d8e0128101ba53e738bdd0bad7d83caec1a8da22b1500000000000000000100000000000000010000000000000020407e1d016b2156134625c6c0acace3fca412163392f1c4920830c79723de997b000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000100000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020756e52a4d940aed4b19471722db1b0f36cb3a58e6645651ae95985d0859986fe000000000000000100000000000000010000000000000020185f7f0d727176797003911a517f775becf44208e97882249031521efd13e60200000000000000010000000000000001000000000000002061c5b4eb1c0a7e74093fb022c5f5951fb2c504423b1f2e8e1f5cb5c30c6896090000000000000001000000000000000100000000000000204bc065f3dd3e3b30a0dac92ed91cf22f8259a480aa87d1c980b53b9a86e52a01000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000001000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000206a21cf8dad19b95d6976b80a0ea46f71e5acaeb0d7ce0c952c612cb0e1b39b50000000000000000100000000000000010000000000000020038abde83aa667d0593b65b0be784caf2a567a1f56f609be7c79d4a4eca6556000000000000000010000000000000001000000000000002098c6a10d6e69554c9a66612e611bde1613925c85c294eac9ae4153c688311745000000000000000100000000000000010000000000000020a4de7176464be9124785e24d63c211255e653cd53798f2b73611e5f15feef7c70000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000001000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000000000000000000208254de19a26a51e2c3efe2de447c330663d42d71497f66d76cbae45a84e24a4c000000000000000100000000000000010000000000000020128769e0198c6ed1e41b6f18e1416c5d8447b78da326db64eb3a16e5ab5c7abc0000000000000001000000000000000100000000000000209ee50eb11a3de3483219cd22981a0f0b1d7086e1372d0840adab511808b3142a000000000000000100000000000000010000000000000020d2ac9a6c10a81d256c41bc67e07527d5a36e5dc54a2c6b984bb939fbc8ccd413000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000100000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000000000000000000020205ab1166cdd5236fd2fc0f67bc609abb7292e61bd1a7c4785cc1b331f05a72f000000000000000100000000000000010000000000000020104351b77693ba3c1b45c85533542bc6dbd5726b5cf5447c12b9f193d2931fca000000000000000100000000000000010000000000000020e98f654c7d4a4d72873302de6fc89a06a256de8b10b07b607e786bfeb6213059000000000000000100000000000000010000000000000020482529a81b98175b81ad742dd6e90b5edefabf8d4cb4e27a6d7438b3191f6bad000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000001f0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020d8fd6c31b297b06ec8cedef4e547fc71427987a2c64e406b71148ddd42bb420a000000000000000100000000000000000000000000000020a6a1702db35b748e42f0f110ec40716f747145613b2b25986a5c3dc74e1ab13a000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001f00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000205e6599843a8bfbe75ddeb3d418b0d88fc52aa4be4edbcf3d696e60c3f106e1080000000000000001000000000000000000000000000000203a2146e92a3ad3706b36813e4c45136f975811c6589e6331024a956042e7768c00000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001f000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000000000000000000002036561d9f344965bc8216ec0e2d9880e53598efc303d646a26e1a4dd53648983f000000000000000100000000000000000000000000000020d556e53e89946cc6a63053d2f237bd42df808fd51872fe3a16ac4cf4f89b865e0000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001f000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020183d0ffee9a19383e2806b2c6ed73c2eb138ef696f30de1a14a5afdab1d16abd0000000000000001000000000000000000000000000000207d27cce8e7d4819cb9c3a6e141c2d34d37acb8e1fc1075a3bb2d20b8408e984c0000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001f00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002072fee7ed27465e7307ca816750847f68b589444b0d01a065a5f23b352818d5b10000000000000001000000000000000000000000000000202671dd30be892f7113a73cf7f3a8445d53ddc40a8e9973ee587af2a0c1606cb80000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000003c0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020218082b41cfa41d4c64ce9224ed3833644389533fd9a858bc3f817ad52382529000000000000000100000000000000010000000000000020bcf05d3c5eb71fed288eb4b419a188c8860206b533025c802ed5cd504e55c1b00000000000000001000000000000000000000000000000207a1b3b2568d13a2eef371f9a6406e1e5ea8ea67cf4f7c3e9e841cfc385002de400000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003c00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000203a3eb56fb5169a0d4af4df327ff0e4fc2a92b36d4502ecf07be5de233a419fcd0000000000000001000000000000000100000000000000208b25ecd6ff537916132b0a2c9828a23713e826894f39c2af049fb06a056e2443000000000000000100000000000000000000000000000020ca4326b0ac9a40f7962046fbc2ae4a247b71dee20ff8514aa46bc9a7f710d2460000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000003c000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000001000000000000002047daa61a055f328185aaf797494e69028c4580769c701d9ced9ee62c93bb0cd900000000000000010000000000000001000000000000002070475275547a4e19ad5111cbc2761f67ebbb11db7b19d3e5da5b0a1829c4ec5a0000000000000001000000000000000000000000000000205863974ae834cb6f7cdda3179a5eb9db26199ae6501319daa7e9350565a01a52000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000003c000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020e7e880c0271d8bbb762151274053eb5387087ee11edf17aa5c2a62d86b1240de0000000000000001000000000000000100000000000000200bbb509da79f5f8b438035f866b33e7d35ea0d24c196577e58c711e996e9d67a000000000000000100000000000000000000000000000020e0d59165174c1b01a1778b0c00ea048f351711781eb9b7905bac635125041c7c000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003c00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000001000000000000002074d82bac807ca26403177015863222205cef6dec7e0c4a7d3ac57d28e79987c6000000000000000100000000000000010000000000000020b2bd6c7bce44e8cb1dd2c1ada3f46a4ef84aa70a4f6d582427f82789c25091290000000000000001000000000000000000000000000000207307458ebfa1b463080bdf0c8b226e68af95d3ce03c81f574dc53886fc92c5510000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000001f0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020d8fd6c31b297b06ec8cedef4e547fc71427987a2c64e406b71148ddd42bb420a000000000000000100000000000000000000000000000020a6a1702db35b748e42f0f110ec40716f747145613b2b25986a5c3dc74e1ab13a000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001f00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000205e6599843a8bfbe75ddeb3d418b0d88fc52aa4be4edbcf3d696e60c3f106e1080000000000000001000000000000000000000000000000203a2146e92a3ad3706b36813e4c45136f975811c6589e6331024a956042e7768c00000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001f000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000000000000000000002036561d9f344965bc8216ec0e2d9880e53598efc303d646a26e1a4dd53648983f000000000000000100000000000000000000000000000020d556e53e89946cc6a63053d2f237bd42df808fd51872fe3a16ac4cf4f89b865e0000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001f000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020183d0ffee9a19383e2806b2c6ed73c2eb138ef696f30de1a14a5afdab1d16abd0000000000000001000000000000000000000000000000207d27cce8e7d4819cb9c3a6e141c2d34d37acb8e1fc1075a3bb2d20b8408e984c0000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001f00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002072fee7ed27465e7307ca816750847f68b589444b0d01a065a5f23b352818d5b10000000000000001000000000000000000000000000000202671dd30be892f7113a73cf7f3a8445d53ddc40a8e9973ee587af2a0c1606cb80000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000100000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000100000000000000209058d03acc19a8bc5340a3803edc6e374875e4317924b7874af789b8309248dc000000000000000100000000000000010000000000000020516f64bfc51bc004bb05716451c926f5dba83d635199714f6c0eadd58d93efd60000000000000001000000000000000100000000000000200c9de449bb53c4d3ff3de2e3de5583618b02e5f4d842cb51120fcb0705bce2050000000000000001000000000000000100000000000000201ec85a72ab785b7c48cb10710fca42c4de34b9d99094486a7cb14fb0a459812f00000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001000000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000209422eaba572d0230b9db8deeee6952d3bda2f4db8004c7c723b03d7a19252e2100000000000000010000000000000001000000000000002064692406dac2faece78ae6e7c3c9c555173148e15ceda94cc162ed9ce7b88ac50000000000000001000000000000000100000000000000208331eff39080c5e921f7c00619019db156a8598c1869a62be83587b5322ba54700000000000000010000000000000001000000000000002048060202f26e09afa01220fe2b845539f7f28e73ab6b16690996cf8c05046244000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000010000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000100000000000000201629ca3ff4a2ed91bb100ec345fe010146b9f4f0be75a77509ae16513dd4fe0d0000000000000001000000000000000100000000000000204b86bc2c3198c3bf594b472abd611a3235fa1a607f9fb736f1f08f1671b4730000000000000000010000000000000001000000000000002012512ccbf3baa32e59f7532d63c9d35c7b894cb9479c9edcbe5e610d613f92570000000000000001000000000000000100000000000000200aed2038bedd56c46aa92e044dbb04e9d6d047ddb3819c31056472a336358fb2000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000010000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000100000000000000209a329f0413ac474176ecca4647f69df6c51fec62d899de69a02cce13c6c0e5000000000000000001000000000000000100000000000000200f549d309e2c4517d858da3f696bb6db8dd3ea8de89d64df7ef3b933546e88c2000000000000000100000000000000010000000000000020ecc01f0a50e51a5220ea92b3ffdb280ab65eb082fd2b9abb9493aba6e6bd8af00000000000000001000000000000000100000000000000204e291298e718e4215dade20a34700b89a0336d8bede04b427e3792a09b3a48cb000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001000000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000100000000000000206c5c84d1c336ce7447c1cc239aa4e8667be8aec4a418e03dd409ed420dd75cc8000000000000000100000000000000010000000000000020af0ebc5c462c6289fc5ac745cee7ffa729b715fb9728148bdc7beb06509bb162000000000000000100000000000000010000000000000020a25d9f27f69d1fa72e34576a35a754dbd543ba6fc98029a6c29b58d62a739c3d000000000000000100000000000000010000000000000020b4bfefcc77fb1c06d34fae0ff743553b71633d0f2755a6c510a2a7a843af6fbe0000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000110000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000000000000000000208cb54734c4d7f5b9b1c960092a47e177b16eb9ff003c498efa1d9780d33c3d78000000000000000100000000000000010000000000000020516f64bfc51bc004bb05716451c926f5dba83d635199714f6c0eadd58d93efd60000000000000001000000000000000100000000000000200c9de449bb53c4d3ff3de2e3de5583618b02e5f4d842cb51120fcb0705bce2050000000000000001000000000000000100000000000000201ec85a72ab785b7c48cb10710fca42c4de34b9d99094486a7cb14fb0a459812f00000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001100000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000201e990e27f0d7976bf2adbd60e20384da0125b76e2885a96aa707bcb054108b0d00000000000000010000000000000001000000000000002064692406dac2faece78ae6e7c3c9c555173148e15ceda94cc162ed9ce7b88ac50000000000000001000000000000000100000000000000208331eff39080c5e921f7c00619019db156a8598c1869a62be83587b5322ba54700000000000000010000000000000001000000000000002048060202f26e09afa01220fe2b845539f7f28e73ab6b16690996cf8c05046244000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000011000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000200d73c1dad4ac3ed5fb3b2aac1d8c53d8e962a01cdb8353c33eea4fcef6ff28950000000000000001000000000000000100000000000000204b86bc2c3198c3bf594b472abd611a3235fa1a607f9fb736f1f08f1671b4730000000000000000010000000000000001000000000000002012512ccbf3baa32e59f7532d63c9d35c7b894cb9479c9edcbe5e610d613f92570000000000000001000000000000000100000000000000200aed2038bedd56c46aa92e044dbb04e9d6d047ddb3819c31056472a336358fb2000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000011000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000000000000000000002040371248d7160cc6c882cd07b45bab36da53eae866a0cdca536d440c12984ff30000000000000001000000000000000100000000000000200f549d309e2c4517d858da3f696bb6db8dd3ea8de89d64df7ef3b933546e88c2000000000000000100000000000000010000000000000020ecc01f0a50e51a5220ea92b3ffdb280ab65eb082fd2b9abb9493aba6e6bd8af00000000000000001000000000000000100000000000000204e291298e718e4215dade20a34700b89a0336d8bede04b427e3792a09b3a48cb000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001100000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002062e2d6891fe340ec212625ae8767e24e5155c550dc02ab23cc028b00636fcc66000000000000000100000000000000010000000000000020af0ebc5c462c6289fc5ac745cee7ffa729b715fb9728148bdc7beb06509bb162000000000000000100000000000000010000000000000020a25d9f27f69d1fa72e34576a35a754dbd543ba6fc98029a6c29b58d62a739c3d000000000000000100000000000000010000000000000020b4bfefcc77fb1c06d34fae0ff743553b71633d0f2755a6c510a2a7a843af6fbe0000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000001e0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020ba15f8caa378deb827f35ab84ee3c8ef16117ea97e57e0f20b14ae88d236b6ff000000000000000100000000000000000000000000000020a6a1702db35b748e42f0f110ec40716f747145613b2b25986a5c3dc74e1ab13a000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001e00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d6000000000000000600000000000000010000000000000001000000000000002085351021aea650c4597031fb7dc932b99054b360e97ca572bb6bece35ae11bdf0000000000000001000000000000000000000000000000203a2146e92a3ad3706b36813e4c45136f975811c6589e6331024a956042e7768c00000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001e000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020f821bc8956540d674f85944695ec2cdab831a2a389a2d11a3d7cb0e72d70c402000000000000000100000000000000000000000000000020d556e53e89946cc6a63053d2f237bd42df808fd51872fe3a16ac4cf4f89b865e0000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001e000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000001000000000000002030d6b49905be576af2c974f08de40dec367587e3f626cc9bc52f04670a7003580000000000000001000000000000000000000000000000207d27cce8e7d4819cb9c3a6e141c2d34d37acb8e1fc1075a3bb2d20b8408e984c0000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001e00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000100000000000000208f526051780fa2a3d112fdedee88168162589e00a4943c032e8b91bc4c53d9840000000000000001000000000000000000000000000000202671dd30be892f7113a73cf7f3a8445d53ddc40a8e9973ee587af2a0c1606cb80000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000090000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020de69d45a7cfdd721b028a24fe71015f76f5aa7a273602588540d7177b2032e810000000000000001000000000000000100000000000000203b055f5ec21cdd2d321937c699cc5b005cfd392544e209343f6f4bc3609d50a8000000000000000100000000000000010000000000000020212011d70596d8f444a02b2551c63793bb6214725d0b1d4e2d024902a719d74d00000000000000010000000000000000000000000000002063b18099f915d818ff11dd06d2b4924e18e1b43d1a7d80c4018a6828759c3e2c000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000900000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000208fb27fefef947575d8370fca7cbc77cc2ab56337c6ba1ef2b114401465fe10880000000000000001000000000000000100000000000000205c4181331efc246b6fd787984126b3c735f6b747840454826726ab672228df2000000000000000010000000000000001000000000000002008c5fc936786cf9d0af43c12be03cc772b25837622cd42f08df1c66e5e116a2a000000000000000100000000000000000000000000000020bd75800a626d45803e0ac76b5c093b70cab826c1e74d4cd0ce8e6c36106f95bc000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000009000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020572da483fb877b90672fbd6cd281dd1d8fc1e3519c9d5b6b2f16f62721a72816000000000000000100000000000000010000000000000020a7170bc0cfb0066ee2a6bc38ae323cf6155ef29a640796587131389fc7ddd196000000000000000100000000000000010000000000000020f87937c3d7f9ea889556bed01a00031a67448288e6ad311f669b4408eebc01ac000000000000000100000000000000000000000000000020842c39bed54d7be108142ed95a58b534014e03e9871691ec932be839f2294f4d0000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000009000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000000000000000000202a8823c954f6384a513c97041a12b9202fbc85be6b543238fa04ae9a70393fff00000000000000010000000000000001000000000000002076f0d827402b47129db7da8669550ecbc1c84eddedb8bef62b4d08efce600e37000000000000000100000000000000010000000000000020ad2c19c26d0488214886b03e7e4bc57d130a100d9e13ced4921d6472e2238a2e0000000000000001000000000000000000000000000000201de5bb3d887c07d54506473a20db02428ebc54d6a3c978c792d0e6f1f4de0511000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000900000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000000000000000000020b266d01eb13c2bc656133dab42c1ec116ca3f28544f99eaba9cc7c89fe419fdd0000000000000001000000000000000100000000000000201df9ab42d54f8ea624eecc57fce828882c6b80c722d86bb88d11443ff87766af000000000000000100000000000000010000000000000020630f361882ada56a075e947b144639b306577494cfa2d14d2fd11f09586072a00000000000000001000000000000000000000000000000206e8232a0c61d237a50e6dcca4dcea8b407b71864d02b4c647447bc948ffe8ebc000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000001c0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020e3587c4b87cfa21fbef795afb84015f00eeec779982508e4e4777bb7c8c3e7ef00000000000000010000000000000001000000000000002012edb90efc6a65c82406e9e729c69705717bb9213763989a3e429db69b1fa1be000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001c00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000010000000000000020cc15f3502bc1908d357811f4f0f1f25d88acdd0691457037a57c5191c683847b000000000000000100000000000000010000000000000020070faa4b0f39e22d43da05eaf01eaa74ae4dfa9cf3b4f146bc3076585fa9c02700000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001c000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020e45ea0ef92a87114b48b4dc2f56781fce286f690846172fedffd2cda9e29b6a50000000000000001000000000000000100000000000000201581a9112f15b5db73805221511d3b17bb0b44a8d5bdb5961d05b119e83069f80000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001c000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000001000000000000002002bb23f385d33b1fdd83f3c47b2936586909c02ed6cfb9703e2e998321832e48000000000000000100000000000000010000000000000020ab7aae7bbf9e20bdeb1ab6bbe7a70c6cd858e5d76f9f05de9e38ec9f931a3ec50000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001c00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000100000000000000200f375dbba5f3588b95d031e9297728953db05ef7da46e721b77d820ce428649a000000000000000100000000000000010000000000000020d5f15fb4972b5ea2159a542111a45a1ff217a413588328aa49a47ed613fc70570000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000003c0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020218082b41cfa41d4c64ce9224ed3833644389533fd9a858bc3f817ad52382529000000000000000100000000000000010000000000000020bcf05d3c5eb71fed288eb4b419a188c8860206b533025c802ed5cd504e55c1b00000000000000001000000000000000000000000000000207a1b3b2568d13a2eef371f9a6406e1e5ea8ea67cf4f7c3e9e841cfc385002de400000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003c00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000203a3eb56fb5169a0d4af4df327ff0e4fc2a92b36d4502ecf07be5de233a419fcd0000000000000001000000000000000100000000000000208b25ecd6ff537916132b0a2c9828a23713e826894f39c2af049fb06a056e2443000000000000000100000000000000000000000000000020ca4326b0ac9a40f7962046fbc2ae4a247b71dee20ff8514aa46bc9a7f710d2460000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000003c000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000001000000000000002047daa61a055f328185aaf797494e69028c4580769c701d9ced9ee62c93bb0cd900000000000000010000000000000001000000000000002070475275547a4e19ad5111cbc2761f67ebbb11db7b19d3e5da5b0a1829c4ec5a0000000000000001000000000000000000000000000000205863974ae834cb6f7cdda3179a5eb9db26199ae6501319daa7e9350565a01a52000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000003c000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020e7e880c0271d8bbb762151274053eb5387087ee11edf17aa5c2a62d86b1240de0000000000000001000000000000000100000000000000200bbb509da79f5f8b438035f866b33e7d35ea0d24c196577e58c711e996e9d67a000000000000000100000000000000000000000000000020e0d59165174c1b01a1778b0c00ea048f351711781eb9b7905bac635125041c7c000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003c00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000001000000000000002074d82bac807ca26403177015863222205cef6dec7e0c4a7d3ac57d28e79987c6000000000000000100000000000000010000000000000020b2bd6c7bce44e8cb1dd2c1ada3f46a4ef84aa70a4f6d582427f82789c25091290000000000000001000000000000000000000000000000207307458ebfa1b463080bdf0c8b226e68af95d3ce03c81f574dc53886fc92c5510000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000000a0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020fc983dd7daafc6f9bd09f56cfae3edef56984b36f007d57cca6deebaf9cb6b27000000000000000100000000000000000000000000000020f95f23851afcff04d1ad49b881508c3633308363c1babb0c2d30123584655b30000000000000000100000000000000010000000000000020212011d70596d8f444a02b2551c63793bb6214725d0b1d4e2d024902a719d74d00000000000000010000000000000000000000000000002063b18099f915d818ff11dd06d2b4924e18e1b43d1a7d80c4018a6828759c3e2c000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000a00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000010000000000000020963ce7fa16a7bc2faf8b5a019fb2698e0bf100a32aad4b5a538b4dc1b308bbb6000000000000000100000000000000000000000000000020e13c705067783e7c197b6024479054eeb56690f491a37b0fd27a62af0a9483bb00000000000000010000000000000001000000000000002008c5fc936786cf9d0af43c12be03cc772b25837622cd42f08df1c66e5e116a2a000000000000000100000000000000000000000000000020bd75800a626d45803e0ac76b5c093b70cab826c1e74d4cd0ce8e6c36106f95bc000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000000a000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000001000000000000002000e9a8116be3eaa04fd3a9b8fe498439df65050c6d2ba8297979c140197d72ee000000000000000100000000000000000000000000000020f79665195ed0ea8504d75eaff65e22a7a3deedec016d749801fc7edf8d55a3fe000000000000000100000000000000010000000000000020f87937c3d7f9ea889556bed01a00031a67448288e6ad311f669b4408eebc01ac000000000000000100000000000000000000000000000020842c39bed54d7be108142ed95a58b534014e03e9871691ec932be839f2294f4d0000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000000a000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020b8271596523f0175c8f35996cef48923561a67284d14747b3a97002e7f568a50000000000000000100000000000000000000000000000020b35ae75cacfa782fb60ee04267aae26f074cefcea47f96b174716052e98d7657000000000000000100000000000000010000000000000020ad2c19c26d0488214886b03e7e4bc57d130a100d9e13ced4921d6472e2238a2e0000000000000001000000000000000000000000000000201de5bb3d887c07d54506473a20db02428ebc54d6a3c978c792d0e6f1f4de0511000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000a00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020d1fb2c8ea549af99b4a3ecb033283f236df6907d524f78289927652d8c75ee710000000000000001000000000000000000000000000000208de78120231f2b5d2bd8a35ce33c53d3c7094f877ce43c2ba48f9fccc6e57305000000000000000100000000000000010000000000000020630f361882ada56a075e947b144639b306577494cfa2d14d2fd11f09586072a00000000000000001000000000000000000000000000000206e8232a0c61d237a50e6dcca4dcea8b407b71864d02b4c647447bc948ffe8ebc000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000001e0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020ba15f8caa378deb827f35ab84ee3c8ef16117ea97e57e0f20b14ae88d236b6ff000000000000000100000000000000000000000000000020a6a1702db35b748e42f0f110ec40716f747145613b2b25986a5c3dc74e1ab13a000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001e00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d6000000000000000600000000000000010000000000000001000000000000002085351021aea650c4597031fb7dc932b99054b360e97ca572bb6bece35ae11bdf0000000000000001000000000000000000000000000000203a2146e92a3ad3706b36813e4c45136f975811c6589e6331024a956042e7768c00000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001e000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020f821bc8956540d674f85944695ec2cdab831a2a389a2d11a3d7cb0e72d70c402000000000000000100000000000000000000000000000020d556e53e89946cc6a63053d2f237bd42df808fd51872fe3a16ac4cf4f89b865e0000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001e000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000001000000000000002030d6b49905be576af2c974f08de40dec367587e3f626cc9bc52f04670a7003580000000000000001000000000000000000000000000000207d27cce8e7d4819cb9c3a6e141c2d34d37acb8e1fc1075a3bb2d20b8408e984c0000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001e00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000100000000000000208f526051780fa2a3d112fdedee88168162589e00a4943c032e8b91bc4c53d9840000000000000001000000000000000000000000000000202671dd30be892f7113a73cf7f3a8445d53ddc40a8e9973ee587af2a0c1606cb80000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000390000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000000000000000000205a8a6d6822d757b39053f2d696b440911b98fb855bd584870549e7ded4c8f784000000000000000100000000000000010000000000000020ea132e6ad465bc3d576d24943e8eb110cbbe9e0822e43ab2b485cff78cfe7bbf0000000000000001000000000000000100000000000000206402373ddcb71c9fa2bfe1d2d9097bfb1e67c3a16c2603e6850eedece20f804700000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003900000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020b9754dbc7d8d3eefeff2097a536bf8392001674a00a2100b0f5362195773d33800000000000000010000000000000001000000000000002087acc052c4befcbc863390a53bc9fe76ddf39509151f111da33e34eefa9c20bb000000000000000100000000000000010000000000000020ec80243d3ec903cb562c8eacb603f6c834430b23f15d562812829d19ab4c355c0000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000039000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000201434b750fa4c79a6abbb555e49c6de275c5917f1a7745ce0f094cc6f45451d50000000000000000100000000000000010000000000000020e25b16e92ce565166fe90f1c3edb66f7f7a147fe1eb50d049a44d69786c76df90000000000000001000000000000000100000000000000208e2274770ab1400a8d4a14228b5b83fbbc2f8b567f0d93bae220f05170b20030000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000039000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020deed836067856071ea7a63330beedf7de96c65e2598acaca714fc1e308998f90000000000000000100000000000000010000000000000020f33d0621a9be5d0bc10fb9ba479d2c92b9442af4ac19c6bc422738323447ccbf0000000000000001000000000000000100000000000000204b85a596b27c62a80e804a5f440e38fd1798e192f2e4faf6c9d937e152644b4f000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003900000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000202c3deceeaa53a4fd7cb0576d0c27372976b9f6f95317d05b21ccc995dfa7f60500000000000000010000000000000001000000000000002004eac4235e209d96bd17c310b61b8b64f2de73bff9eedc68f3d5329676b3529100000000000000010000000000000001000000000000002090d7b0bcec2a4257083160dd8ffbec8f4d56bdf900f2859e017373f837e3c55e0000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000270000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002082b4607dd2121124fe913ac73d6cfb7d23edb46c45a7c6c239e251b989b417ef000000000000000100000000000000000000000000000020ce6cbec44c6750b87c769f2196e739261249641951d381617e8405bbf0202556000000000000000100000000000000000000000000000020e8b9aa258428d11be94220c2dd6dc9be6f7dfbf6c563495f34ac19fe54c7a02b000000000000000100000000000000010000000000000020acd5d62b97e6c33a02d4331e361fc284fac3d4751616f3f316c28ea08f63c5d000000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002700000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000201aa4caab70d09b9a3b78992c54084bc326e346f6b26246624e3524dfbe50833200000000000000010000000000000000000000000000002060fdc81936cb56fefc4ae765ed50a0407b33f19eff3eee870f07317cdb2ef330000000000000000100000000000000000000000000000020ed1cdc4693f53dc4db6ac19967a9854c6557cdba9dd1ef73aabe5680048340b900000000000000010000000000000001000000000000002039c719fa3f6fd86de45cdcbe116bc929d735098bfd57ba95c955727b3f86087f0000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000027000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020f952df45f42865be94d69c9c7d21933b3e0ad8d0f63ee3775b0d79f285368945000000000000000100000000000000000000000000000020a09e4a0cff4a2719030a0f657ce42c12a2cd4cc27b8cdfd21d1cbcf868b7190b00000000000000010000000000000000000000000000002057270586231d0130eb017de9b965c71be11d39fda49cb46ecc4fc4cf2baff38a000000000000000100000000000000010000000000000020a814a34f76af1733811481d105364da0ad5c6889b20ac62ec695d95bad6ccfa40000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000027000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000000000000000000002011bce33f5446454b228452a0d5cdaae5a71b16116ff1a05e37598b6a6304a5fb000000000000000100000000000000000000000000000020a9887501139d04ce4e8fa79b998c30f58c8d5ba78c911d4db7001a5436dc18fd0000000000000001000000000000000000000000000000208acf7b66bc86786435ec6708d199d5b065b2e43f560fdf2547c4cd28ea0352ab000000000000000100000000000000010000000000000020609f06fb0f917dd5aff48faaa7c9a26932b0164e4ceb2fcb49512a7126aed0240000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002700000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000000000000000000020e63e257a41621044bcf901c3ac3eb320a79baad09ea4c038e67f28ae28f16c3b00000000000000010000000000000000000000000000002032ce4870dfa2fb4284adb38aa43f49a3a3c28255497b93a85731134cd0486a2d000000000000000100000000000000000000000000000020d8d5941d890c32e24cc840a8ee7a932a739bad1dbbbe6985a9d3ea1a07252ddc000000000000000100000000000000010000000000000020581702be02dcae0d01501fe971bb01119d074a9fa43014b6ad4081e583d632e900000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000210000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002066f812c8736a357f21436863a2199724f4144d4194234ebf039cc87839d8dde7000000000000000100000000000000010000000000000020af164518d52f638f864af4f96b17dfd11b54180898cac80dde9aad0b48c73071000000000000000100000000000000010000000000000020bc7a78bb3c611e1b5f11dcbff023f3a085ed0bf8ecd7f9ece0c033dcabf6b6fc000000000000000100000000000000010000000000000020acd5d62b97e6c33a02d4331e361fc284fac3d4751616f3f316c28ea08f63c5d000000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002100000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000201e990e27f0d7976bf2adbd60e20384da0125b76e2885a96aa707bcb054108b0d00000000000000010000000000000001000000000000002036011e620f239613805346976c01d6be477f0546303a35d8e91f936c5ab738e1000000000000000100000000000000010000000000000020b956db54d172694c1630b069cbb2710ecdaacf116a26dcabdef5e48e9f4e783c00000000000000010000000000000001000000000000002039c719fa3f6fd86de45cdcbe116bc929d735098bfd57ba95c955727b3f86087f0000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000021000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000200d73c1dad4ac3ed5fb3b2aac1d8c53d8e962a01cdb8353c33eea4fcef6ff2895000000000000000100000000000000010000000000000020c820cc49df62aac9d357ded86aed16cba909fd75f816a8472db6832966708c8600000000000000010000000000000001000000000000002087e4224ac05bf39143e5b2b8f31e6ff5c9879040db1e5c52a6074d35b63b457f000000000000000100000000000000010000000000000020a814a34f76af1733811481d105364da0ad5c6889b20ac62ec695d95bad6ccfa40000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000021000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000000000000000000002027192bb21c5c75b1e4d1bceb03a2c9ecf9d790b79d41e58c9d6359ce386f90dd0000000000000001000000000000000100000000000000201ff906e1ce9f3c5394fe409e7fef7a28a7d4469cb7e925e64acda39d98cc90870000000000000001000000000000000100000000000000200998593abc6ae74ad4db1e3faee5a7426d83e0283ebfbba81490532b53fb3c67000000000000000100000000000000010000000000000020609f06fb0f917dd5aff48faaa7c9a26932b0164e4ceb2fcb49512a7126aed0240000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002100000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000000000000000000020ca9c2c3725a394cda6baef5123dbe0ffd486e41377832cba5fdaa56ec79bdc3e00000000000000010000000000000001000000000000002078a9e98bb67d6a58ed5f47d03ff761fa75a0a090d14ed86341258ccae9faf3ee000000000000000100000000000000010000000000000020d51dbff523abfb61534f3ecb97144bf53b03b4e9ba33067030fe9ec8101607cb000000000000000100000000000000010000000000000020581702be02dcae0d01501fe971bb01119d074a9fa43014b6ad4081e583d632e900000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000240000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020a87e7ee5e09866aa006873cab1460c1595522fe9a3acc138dad90ccb048f09ec000000000000000100000000000000010000000000000020066b8498c9e05c82628c3565d3c18ea8674927640352cc9cf607415abf97f900000000000000000100000000000000000000000000000020e8b9aa258428d11be94220c2dd6dc9be6f7dfbf6c563495f34ac19fe54c7a02b000000000000000100000000000000010000000000000020acd5d62b97e6c33a02d4331e361fc284fac3d4751616f3f316c28ea08f63c5d000000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002400000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000010000000000000020880821cc48160488eb5d29feb2eead9cb25a07f610d5e1bca1435122b800416e000000000000000100000000000000010000000000000020e67415e2ce919b1302dfc211e39471d29a76795f1d4e6edbbdfc1856b5b2c153000000000000000100000000000000000000000000000020ed1cdc4693f53dc4db6ac19967a9854c6557cdba9dd1ef73aabe5680048340b900000000000000010000000000000001000000000000002039c719fa3f6fd86de45cdcbe116bc929d735098bfd57ba95c955727b3f86087f0000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000024000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020fa9aad6d2aace9a80704234a97da2dba93d14ea85b33d5c1a5b4f53de563f172000000000000000100000000000000010000000000000020bab7b86d13eda577e6efdf77bb504d22b0694d137022f14012aa8cd0fa75d1ee00000000000000010000000000000000000000000000002057270586231d0130eb017de9b965c71be11d39fda49cb46ecc4fc4cf2baff38a000000000000000100000000000000010000000000000020a814a34f76af1733811481d105364da0ad5c6889b20ac62ec695d95bad6ccfa40000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000024000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000100000000000000206434f87e734d29f9fd95399e82117674b990519a1379e6299d995792ed6d5633000000000000000100000000000000010000000000000020d7916d25af4bc31f4e809d04d5f70e0e2de17c037477afbb033a4ae7810e8b900000000000000001000000000000000000000000000000208acf7b66bc86786435ec6708d199d5b065b2e43f560fdf2547c4cd28ea0352ab000000000000000100000000000000010000000000000020609f06fb0f917dd5aff48faaa7c9a26932b0164e4ceb2fcb49512a7126aed0240000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002400000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020a7dfffac5fa2be54bfdaf88836fe9efe9e2f64482ae91878275e5ec2d36f450d00000000000000010000000000000001000000000000002000e0cc80f37570010eccdc5f1ef31956596028e3cc7f6e72de18bb35cd4650ce000000000000000100000000000000000000000000000020d8d5941d890c32e24cc840a8ee7a932a739bad1dbbbe6985a9d3ea1a07252ddc000000000000000100000000000000010000000000000020581702be02dcae0d01501fe971bb01119d074a9fa43014b6ad4081e583d632e900000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000060000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000100000000000000206068ff0ed4c4759abee34f335fafeb3a13303d5877af767f4d37506f840e35fd00000000000000010000000000000000000000000000002067ca165ae9157ffd65aedc2702decce7ef87efbecc65c1f23c346100aac99a2f000000000000000100000000000000000000000000000020c8a9706d43613feef1f7182c33ec47958f103c466f0a5c331ae15d21af056b2a000000000000000100000000000000010000000000000020407e1d016b2156134625c6c0acace3fca412163392f1c4920830c79723de997b000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000600000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000010000000000000020fcd2644366aa4cae1f5315462954dec50920d49904205bac2012ebd91921cafc000000000000000100000000000000000000000000000020c2867e1f4cc937dde4acfa436b33c068e26654c057a2da6ff57d5a652187de31000000000000000100000000000000000000000000000020a83ce3f6822f2805da6f235cd57c1e49249433b8646938623efd0a040bb1ded60000000000000001000000000000000100000000000000204bc065f3dd3e3b30a0dac92ed91cf22f8259a480aa87d1c980b53b9a86e52a01000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000006000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000100000000000000207d8105c33b0d4263758d71e48168235f66e18ab7c8cc5fa652509c4e455b85b8000000000000000100000000000000000000000000000020656c686dc65309b719de95affaf2db67a6d00e7c86975a6214fd698dc72b431b00000000000000010000000000000000000000000000002057b19820ae67477ff0fc9a389396aeb670b7c8e05836cc5910b5ddb99ab4caf9000000000000000100000000000000010000000000000020a4de7176464be9124785e24d63c211255e653cd53798f2b73611e5f15feef7c70000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000006000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020ef7a130cfe37c0592cee783c87bcfa81f15f7d690e68179b0414f67da128a1a70000000000000001000000000000000000000000000000205b062cf5dbdcf741c88519621043425bdaff3163299494ea1e4e9aa1874fe4800000000000000001000000000000000000000000000000202ca61985fbc5910957e78a916da8508a3ead835fe2a43c85aafb20f5955f0ca0000000000000000100000000000000010000000000000020d2ac9a6c10a81d256c41bc67e07527d5a36e5dc54a2c6b984bb939fbc8ccd413000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000600000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020ef8bf5707389ad5617236dd6d6c686a18f46eeb869921a2ad1e9a65fcfa6576d0000000000000001000000000000000000000000000000208dab85c8435dfd66280327b9cc5337f894bd670f9c80df0ba684f0a3f6ff807c0000000000000001000000000000000000000000000000206dd7a46816110430442508860c306738f4a9a0455d87cb1fe469f761064972aa000000000000000100000000000000010000000000000020482529a81b98175b81ad742dd6e90b5edefabf8d4cb4e27a6d7438b3191f6bad000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000000f0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020719a7a35adda0dd9428798c975730f35a62ffd9ee5f58d5ce5167156e67084f50000000000000001000000000000000000000000000000208035ed95221b11da3949bac40001ffa91e1aa82f0256b8cfe76c7f4bf0fd1c4e0000000000000001000000000000000000000000000000207c45dea365dfaace9be8fa260c352ec46e78980143459a4daee0f8ae4c5f9c3900000000000000010000000000000000000000000000002063b18099f915d818ff11dd06d2b4924e18e1b43d1a7d80c4018a6828759c3e2c000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000f00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020b58422241e3aec6a19e7b35858365ab1aa6effa0786c660d8553d9a441f39bb1000000000000000100000000000000000000000000000020f29066e56b551bd94c1d9b20ea9837e3018816f6bbe6996254212afb712566ef000000000000000100000000000000000000000000000020a2765aabd8364f95fefd13729dd6fca6eac9c34f87cf4395c6b2b47a49a90ea9000000000000000100000000000000000000000000000020bd75800a626d45803e0ac76b5c093b70cab826c1e74d4cd0ce8e6c36106f95bc000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000000f000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020abc4d89550572f555b5891e6efb7dbe2935c8f9ac12e51201cb0e7678ab7fcdf000000000000000100000000000000000000000000000020080a9a3f42f4a54cbb835bb52d64ef91d01db5403bdb3911d536aea3f9233f3a000000000000000100000000000000000000000000000020b4e9d6c8ba000d4455adade97f30d5cc513f15422d1dcec0ca5dd87320e49f8b000000000000000100000000000000000000000000000020842c39bed54d7be108142ed95a58b534014e03e9871691ec932be839f2294f4d0000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000000f000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020a8006aa982f9039a3a2c8aa8579e3c1fc0fa64648c0ae719c2b447cc85aceabd00000000000000010000000000000000000000000000002090339d4d9d726a053742ce39f20998afadf10f29edee03a234c6eb48b105dc45000000000000000100000000000000000000000000000020b4f6da852bb23c13945601e08434ddf7c6c4e89b8d6af5158e57f6fb31c8153d0000000000000001000000000000000000000000000000201de5bb3d887c07d54506473a20db02428ebc54d6a3c978c792d0e6f1f4de0511000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000f00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002039e257cc4f35788ed43e34433cf2e200d063d51f68ce81ec9f272b948ece0cfd00000000000000010000000000000000000000000000002070919a53202cdeca4903368941c5d387f2cf9f35819747b391647c50e7a103630000000000000001000000000000000000000000000000204e2be0e6e47bf5def4c851e05d186e60b38edd78b0f533be635747623bfd38660000000000000001000000000000000000000000000000206e8232a0c61d237a50e6dcca4dcea8b407b71864d02b4c647447bc948ffe8ebc000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000002d0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002075aefc18f34d0b9d24d3058dba57805ca214d7a2ef5015acfbd1d6dc24784f3a000000000000000100000000000000010000000000000020de539e059aab5793737ab7b6fdd8bd25a14d6221d0d1e94746b7eedd1a695c1b000000000000000100000000000000000000000000000020e8afd6f17c85f21e9f54e435f94a58f7a0002387aeb95b1f945e236e876fb79c000000000000000100000000000000000000000000000020bc2ec48a0ffda0d4d83b497975512e07ddaa2af9c054c3050454c1844d04b72f00000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002d00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000203f065963dc5f827189e63eb7d30fef121bf103875ef233f576ba79373f5e0d1a000000000000000100000000000000010000000000000020efebc253627a341429c9abadf466e6f234321ae2329a1eff0b4623090b8255fb000000000000000100000000000000000000000000000020a41aea614e3c42d5512e485f565d0b5cbdbe584b64aa66bcbcb365fe0aee5b920000000000000001000000000000000000000000000000201dbcfe2b985f1976717c36ba364b4855be4e3991bd1679509516db11cedec7830000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000002d000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020567491f6309e85f31072a8600cc25ad68a6cb210e9575af989900bca9accc061000000000000000100000000000000010000000000000020045cb3bae5c83f22f010f74c7d82e124ca984a74c53dec23f6011dd20fa1a7da000000000000000100000000000000000000000000000020c9e07df65a2734fdc8ada731511056ceb96e0401caf52c9ebc4e0cfa6a1d2cfa000000000000000100000000000000000000000000000020291814bb23ca041a829cd777ab17a74972cca1d409306698f066b2b12b5b7e450000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000002d000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020fb91b4582294afb1b43d2468cac5095e5d6fb16ef5bf595aa6b45e3dbc0256ad0000000000000001000000000000000100000000000000208c692dfb3b3d159d3dd5e5985d705f1093973f88ee5561519510e3a20bd734a400000000000000010000000000000000000000000000002034acd2eb98e0c00613dddfde79e2ed59b03091057dd67328a1f2a20fcc30be400000000000000001000000000000000000000000000000207afc3d3f377ea328d0a546da843425d8cd2f61d21026ec31c026288cb3d0698b0000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002d00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002016a3ba51172d2f53ba9fad3c21587fe75b52d7e378cfcf01eb7fecf1d235a8ad000000000000000100000000000000010000000000000020bd73e161e1e45359b0e9c8889819790eabe432440193232b2131d1f1b779c3880000000000000001000000000000000000000000000000207d62274328992c25ecf4a1832951db6fc2f6220d551c0ba04cb7fb7ced5be8a8000000000000000100000000000000000000000000000020d3e115a5a233331eea0c9d1a61f910fb1ddbd717686aaafe4459fc88d54a083e00000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000030000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020e3eda4ff4131e9d50c4e1b30b3fdfbc7666cafe598b33ea7ec6a7dfc746882640000000000000001000000000000000000000000000000203613cb120b2f2975315e760505b179b65712ad13a44c120548e3994dea630cac0000000000000001000000000000000100000000000000209976a44019a2cc25e24d8e0128101ba53e738bdd0bad7d83caec1a8da22b1500000000000000000100000000000000010000000000000020407e1d016b2156134625c6c0acace3fca412163392f1c4920830c79723de997b000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000300000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020ce5207c1efa11695498c32d3b02c09903ed2f951e404843f3480fcbbf7d9587b000000000000000100000000000000000000000000000020d33251146c9bd59a58c273ee3ca84520f45dc00b56606f29155743126e02603b00000000000000010000000000000001000000000000002061c5b4eb1c0a7e74093fb022c5f5951fb2c504423b1f2e8e1f5cb5c30c6896090000000000000001000000000000000100000000000000204bc065f3dd3e3b30a0dac92ed91cf22f8259a480aa87d1c980b53b9a86e52a01000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000003000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000205e57791a50c984b6b9bb11df72fbe8ead7611d5fbbbb1fde2c9f6ca001e3dbf200000000000000010000000000000000000000000000002014004ab029eb12ac1bbfc12bfb4fb3112e55c46e90c1ee691ed8bc36417a2d9300000000000000010000000000000001000000000000002098c6a10d6e69554c9a66612e611bde1613925c85c294eac9ae4153c688311745000000000000000100000000000000010000000000000020a4de7176464be9124785e24d63c211255e653cd53798f2b73611e5f15feef7c70000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000003000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000000000000000000002056eb38c40ce68d5cd8e95158a0028c5d89bc5658464fad550014da7006c79c93000000000000000100000000000000000000000000000020c15f16573a80f06e1daa20bcbf7091006df20f702348956739551ffe4c3868030000000000000001000000000000000100000000000000209ee50eb11a3de3483219cd22981a0f0b1d7086e1372d0840adab511808b3142a000000000000000100000000000000010000000000000020d2ac9a6c10a81d256c41bc67e07527d5a36e5dc54a2c6b984bb939fbc8ccd413000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000300000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000206e2343713e5ac93fb226ad8336de20b09df4879ab409d9bd31704260ecd2385000000000000000010000000000000000000000000000002051f6631c86c379672c14a62460decb29165cd65db29c3c813e2433ebe1acc94a000000000000000100000000000000010000000000000020e98f654c7d4a4d72873302de6fc89a06a256de8b10b07b607e786bfeb6213059000000000000000100000000000000010000000000000020482529a81b98175b81ad742dd6e90b5edefabf8d4cb4e27a6d7438b3191f6bad000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000290000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000000000000000000201b81605c89f82931ba1f9c40f6a11252716f4b02a1405f25e3c8d9342ae5141d000000000000000100000000000000010000000000000020a7ab07465b54611179f5d8b3f01dda40efa5ef6a7beb7ddea184943d0014654c0000000000000001000000000000000100000000000000201fc30593ec7d427903dd1f55256e3ffc19a85f70cf2a8e7c0acb4f0a53f1effe000000000000000100000000000000000000000000000020bc2ec48a0ffda0d4d83b497975512e07ddaa2af9c054c3050454c1844d04b72f00000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002900000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000202abc88d2e3de401ab2c938e2d0e3c6ace5b030a54d9aeff0e9218e717f5d843c0000000000000001000000000000000100000000000000206eda94265d040faabf44625d55ab8b4ec7a5f1ec78d8b49e877a868ec6619d3900000000000000010000000000000001000000000000002029ddc1ae85781550b5b8262839b67495818dab865d8bb41a08d9d715a8f5ad470000000000000001000000000000000000000000000000201dbcfe2b985f1976717c36ba364b4855be4e3991bd1679509516db11cedec7830000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000029000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020a99d428a8f4af26c826a4ed7482597440fc869f53f585c86c7250ec11b21a8d8000000000000000100000000000000010000000000000020f27a29d328bdc6caa0ee3f0f6f7c703890f1805c474144e4bcbc87eab56c5335000000000000000100000000000000010000000000000020b21fce2155f8766d6e3d49a87773c41a486b0eb7dabcbfc0cf2963f7b34ecd33000000000000000100000000000000000000000000000020291814bb23ca041a829cd777ab17a74972cca1d409306698f066b2b12b5b7e450000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000029000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000000000000000000206f1230ee39fa4b475a68ca2c21a0a52a3a2d008ace0147d9367ca0b19fbf44b300000000000000010000000000000001000000000000002054f128363693244ccfcb0f852cc53499930006a76f4f8ad53422282d7ba2b1a900000000000000010000000000000001000000000000002032906f8b355f4c2d6b639a6899bcadf4e2cb7fcba76d4ccb412d5c24053801490000000000000001000000000000000000000000000000207afc3d3f377ea328d0a546da843425d8cd2f61d21026ec31c026288cb3d0698b0000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002900000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000203e4b5489c39040df94e04b61ae4144d75b3731c552cb2872ea3522b56365e3bb0000000000000001000000000000000100000000000000203b71c8650663ac45104b87aeb469737990a8040255ea025b39bbd29956133147000000000000000100000000000000010000000000000020bbdfd0dd1887a478722c75ca8033a8a2201ecbe77561ec5505c4f7fa0b2fc07f000000000000000100000000000000000000000000000020d3e115a5a233331eea0c9d1a61f910fb1ddbd717686aaafe4459fc88d54a083e00000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000002b0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002061cfcaf3abbfaf060d0b53beb3ff1eb4e9923e49873a62b8f2f787d8b5a899190000000000000001000000000000000000000000000000202126eaa429043d207bc31ac0492a95b87916ef3a837b0de7fe9e539054aad1fc0000000000000001000000000000000100000000000000201fc30593ec7d427903dd1f55256e3ffc19a85f70cf2a8e7c0acb4f0a53f1effe000000000000000100000000000000000000000000000020bc2ec48a0ffda0d4d83b497975512e07ddaa2af9c054c3050454c1844d04b72f00000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002b00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000206255d43873b7b75be7cd4e8b0b219cb154af5bb3311754d0462b22dc2b14067e000000000000000100000000000000000000000000000020bc71bb4cd134708a5c1ae6a9909a7062ea805c915ae91379dbc944a73895479f00000000000000010000000000000001000000000000002029ddc1ae85781550b5b8262839b67495818dab865d8bb41a08d9d715a8f5ad470000000000000001000000000000000000000000000000201dbcfe2b985f1976717c36ba364b4855be4e3991bd1679509516db11cedec7830000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000002b000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000208d00adc26372a899eccef502932866d4f43fa5dc239f3670c3aa9a17c630c3e90000000000000001000000000000000000000000000000200d1596615dfc5a5b9db6a95acdad88935034862ea7d81602ed52beca7ddc10c1000000000000000100000000000000010000000000000020b21fce2155f8766d6e3d49a87773c41a486b0eb7dabcbfc0cf2963f7b34ecd33000000000000000100000000000000000000000000000020291814bb23ca041a829cd777ab17a74972cca1d409306698f066b2b12b5b7e450000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000002b000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020c2662e5a1722b6a5fb781e770e5ae202e52a072f1699d62023b34b97c3b7a664000000000000000100000000000000000000000000000020ede423867df6a5e010be077da1b68626a1fa76bb0e44bf0c569934de8bb4003500000000000000010000000000000001000000000000002032906f8b355f4c2d6b639a6899bcadf4e2cb7fcba76d4ccb412d5c24053801490000000000000001000000000000000000000000000000207afc3d3f377ea328d0a546da843425d8cd2f61d21026ec31c026288cb3d0698b0000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002b00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000202882c2da6bbde8b5670630244874d1c7d8bd36d156328ddd10e8f16333966b0f000000000000000100000000000000000000000000000020af8a1f56cf96d57df78368effb90dfbcef3078b07d9d59e9fba5fb26a1a88112000000000000000100000000000000010000000000000020bbdfd0dd1887a478722c75ca8033a8a2201ecbe77561ec5505c4f7fa0b2fc07f000000000000000100000000000000000000000000000020d3e115a5a233331eea0c9d1a61f910fb1ddbd717686aaafe4459fc88d54a083e00000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000002d0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002075aefc18f34d0b9d24d3058dba57805ca214d7a2ef5015acfbd1d6dc24784f3a000000000000000100000000000000010000000000000020de539e059aab5793737ab7b6fdd8bd25a14d6221d0d1e94746b7eedd1a695c1b000000000000000100000000000000000000000000000020e8afd6f17c85f21e9f54e435f94a58f7a0002387aeb95b1f945e236e876fb79c000000000000000100000000000000000000000000000020bc2ec48a0ffda0d4d83b497975512e07ddaa2af9c054c3050454c1844d04b72f00000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002d00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000203f065963dc5f827189e63eb7d30fef121bf103875ef233f576ba79373f5e0d1a000000000000000100000000000000010000000000000020efebc253627a341429c9abadf466e6f234321ae2329a1eff0b4623090b8255fb000000000000000100000000000000000000000000000020a41aea614e3c42d5512e485f565d0b5cbdbe584b64aa66bcbcb365fe0aee5b920000000000000001000000000000000000000000000000201dbcfe2b985f1976717c36ba364b4855be4e3991bd1679509516db11cedec7830000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000002d000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020567491f6309e85f31072a8600cc25ad68a6cb210e9575af989900bca9accc061000000000000000100000000000000010000000000000020045cb3bae5c83f22f010f74c7d82e124ca984a74c53dec23f6011dd20fa1a7da000000000000000100000000000000000000000000000020c9e07df65a2734fdc8ada731511056ceb96e0401caf52c9ebc4e0cfa6a1d2cfa000000000000000100000000000000000000000000000020291814bb23ca041a829cd777ab17a74972cca1d409306698f066b2b12b5b7e450000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000002d000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020fb91b4582294afb1b43d2468cac5095e5d6fb16ef5bf595aa6b45e3dbc0256ad0000000000000001000000000000000100000000000000208c692dfb3b3d159d3dd5e5985d705f1093973f88ee5561519510e3a20bd734a400000000000000010000000000000000000000000000002034acd2eb98e0c00613dddfde79e2ed59b03091057dd67328a1f2a20fcc30be400000000000000001000000000000000000000000000000207afc3d3f377ea328d0a546da843425d8cd2f61d21026ec31c026288cb3d0698b0000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002d00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002016a3ba51172d2f53ba9fad3c21587fe75b52d7e378cfcf01eb7fecf1d235a8ad000000000000000100000000000000010000000000000020bd73e161e1e45359b0e9c8889819790eabe432440193232b2131d1f1b779c3880000000000000001000000000000000000000000000000207d62274328992c25ecf4a1832951db6fc2f6220d551c0ba04cb7fb7ced5be8a8000000000000000100000000000000000000000000000020d3e115a5a233331eea0c9d1a61f910fb1ddbd717686aaafe4459fc88d54a083e00000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000003d0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020ace9659a3eca3c2a1cccbc983ead796d78a748e3786946462f4d9d1fdc3e34ac000000000000000100000000000000010000000000000020bcf05d3c5eb71fed288eb4b419a188c8860206b533025c802ed5cd504e55c1b00000000000000001000000000000000000000000000000207a1b3b2568d13a2eef371f9a6406e1e5ea8ea67cf4f7c3e9e841cfc385002de400000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003d00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020c15d51cf18b6ba8c12ed152e4a515b632b24633b5f6b22f7103649e18d6f1f9e0000000000000001000000000000000100000000000000208b25ecd6ff537916132b0a2c9828a23713e826894f39c2af049fb06a056e2443000000000000000100000000000000000000000000000020ca4326b0ac9a40f7962046fbc2ae4a247b71dee20ff8514aa46bc9a7f710d2460000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000003d000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020938fa0a6b1c2b75bdf6f4ba90387cbcf0b23762fb05befccb17d0cea24fe684000000000000000010000000000000001000000000000002070475275547a4e19ad5111cbc2761f67ebbb11db7b19d3e5da5b0a1829c4ec5a0000000000000001000000000000000000000000000000205863974ae834cb6f7cdda3179a5eb9db26199ae6501319daa7e9350565a01a52000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000003d000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020f6d0f9998a4caeaedf31272eebc9c4f6855dfc972528fca3c6aedb2b52959ee40000000000000001000000000000000100000000000000200bbb509da79f5f8b438035f866b33e7d35ea0d24c196577e58c711e996e9d67a000000000000000100000000000000000000000000000020e0d59165174c1b01a1778b0c00ea048f351711781eb9b7905bac635125041c7c000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003d00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002078d73dc05e52ee7c8e19682c5f83941c32eccea8702643ba4954454340dd7d48000000000000000100000000000000010000000000000020b2bd6c7bce44e8cb1dd2c1ada3f46a4ef84aa70a4f6d582427f82789c25091290000000000000001000000000000000000000000000000207307458ebfa1b463080bdf0c8b226e68af95d3ce03c81f574dc53886fc92c5510000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000040000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000100000000000000209b78a7ddb1bdf726d695cf1b5960843be18843d5f9fcd02b2632d5c5a2dd6e330000000000000001000000000000000100000000000000202feb59037d37e58c7ae6981240627157e2d56c7ce73366769597e4a404b62e4c000000000000000100000000000000000000000000000020c8a9706d43613feef1f7182c33ec47958f103c466f0a5c331ae15d21af056b2a000000000000000100000000000000010000000000000020407e1d016b2156134625c6c0acace3fca412163392f1c4920830c79723de997b000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000400000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000010000000000000020b715b8dc2b4f2279715881cde68ae43f478d157a6332f5469da1e301742325780000000000000001000000000000000100000000000000208c082649fedb2d6d1df100e532a8001567a341813a6a0fe1b04813431f53cd33000000000000000100000000000000000000000000000020a83ce3f6822f2805da6f235cd57c1e49249433b8646938623efd0a040bb1ded60000000000000001000000000000000100000000000000204bc065f3dd3e3b30a0dac92ed91cf22f8259a480aa87d1c980b53b9a86e52a01000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000004000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020d064e61c274d95bb5e9e0234973dcc2f97dfef3bb3efcb34c8d9a5cbf845a26c0000000000000001000000000000000100000000000000206c7de327c4cde9c353811da48a1929a019d15fb4d30226f8005d95a3a5043ff200000000000000010000000000000000000000000000002057b19820ae67477ff0fc9a389396aeb670b7c8e05836cc5910b5ddb99ab4caf9000000000000000100000000000000010000000000000020a4de7176464be9124785e24d63c211255e653cd53798f2b73611e5f15feef7c70000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000004000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000001000000000000002037f3c3334c4ccdf4c7af03a4e98d09045fbf91bd4aeda27221f4074fc87ae2f40000000000000001000000000000000100000000000000200145bfa689a590a70838a593886aa43d2fcfc263d3156b731a198b5f60d17cb80000000000000001000000000000000000000000000000202ca61985fbc5910957e78a916da8508a3ead835fe2a43c85aafb20f5955f0ca0000000000000000100000000000000010000000000000020d2ac9a6c10a81d256c41bc67e07527d5a36e5dc54a2c6b984bb939fbc8ccd413000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000400000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020acd025f157bb36e8a2a301e8d6d88f75bfd49283ffaf5d492c67b4a729a0984f0000000000000001000000000000000100000000000000202ff68e275e9f3c1b3b7f743a4782f617731151b00ff2a2b3c7ad2c740a85ee730000000000000001000000000000000000000000000000206dd7a46816110430442508860c306738f4a9a0455d87cb1fe469f761064972aa000000000000000100000000000000010000000000000020482529a81b98175b81ad742dd6e90b5edefabf8d4cb4e27a6d7438b3191f6bad000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000001d0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002064c557d55375fb980243316cc094e1409b4134756a1742dc867410611a380c9300000000000000010000000000000001000000000000002012edb90efc6a65c82406e9e729c69705717bb9213763989a3e429db69b1fa1be000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001d00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000209cd7e98a2d2e09ab57fbd65b8471e6f11d77a24e5ca150505ee781dbd33e9756000000000000000100000000000000010000000000000020070faa4b0f39e22d43da05eaf01eaa74ae4dfa9cf3b4f146bc3076585fa9c02700000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001d000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000201d6a369b05cc67293f0393af51a7d4056bc52be5156909401e804d159169447b0000000000000001000000000000000100000000000000201581a9112f15b5db73805221511d3b17bb0b44a8d5bdb5961d05b119e83069f80000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001d000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020dbdb6a4cc8b17c5ea2d125c6af18f1a5a232cbda042546a5e8b8a220e858de5e000000000000000100000000000000010000000000000020ab7aae7bbf9e20bdeb1ab6bbe7a70c6cd858e5d76f9f05de9e38ec9f931a3ec50000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001d00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000207bebb1b5de11152457d291912534c5ffe07f4ef1797e65901fa68e2f90056fb7000000000000000100000000000000010000000000000020d5f15fb4972b5ea2159a542111a45a1ff217a413588328aa49a47ed613fc70570000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000260000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000001000000000000002002264f66321999533318a66b630c922ed2c8afd79f75ad3ad7e2546988d2c229000000000000000100000000000000000000000000000020ce6cbec44c6750b87c769f2196e739261249641951d381617e8405bbf0202556000000000000000100000000000000000000000000000020e8b9aa258428d11be94220c2dd6dc9be6f7dfbf6c563495f34ac19fe54c7a02b000000000000000100000000000000010000000000000020acd5d62b97e6c33a02d4331e361fc284fac3d4751616f3f316c28ea08f63c5d000000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002600000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000205e9bb0baae243491c7eb032dee99b7d36c82ec05b60e64eddd17c8be11cd6d5600000000000000010000000000000000000000000000002060fdc81936cb56fefc4ae765ed50a0407b33f19eff3eee870f07317cdb2ef330000000000000000100000000000000000000000000000020ed1cdc4693f53dc4db6ac19967a9854c6557cdba9dd1ef73aabe5680048340b900000000000000010000000000000001000000000000002039c719fa3f6fd86de45cdcbe116bc929d735098bfd57ba95c955727b3f86087f0000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000026000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020dc8aa5c3c55a97bdb7bd81ca0c78663eb6c0009ca983ed54c552867d176e3004000000000000000100000000000000000000000000000020a09e4a0cff4a2719030a0f657ce42c12a2cd4cc27b8cdfd21d1cbcf868b7190b00000000000000010000000000000000000000000000002057270586231d0130eb017de9b965c71be11d39fda49cb46ecc4fc4cf2baff38a000000000000000100000000000000010000000000000020a814a34f76af1733811481d105364da0ad5c6889b20ac62ec695d95bad6ccfa40000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000026000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020d9d44b09d08b8219649fee03bc1d8d6f144f9d725dc46d7d1cd32c7712d6cd30000000000000000100000000000000000000000000000020a9887501139d04ce4e8fa79b998c30f58c8d5ba78c911d4db7001a5436dc18fd0000000000000001000000000000000000000000000000208acf7b66bc86786435ec6708d199d5b065b2e43f560fdf2547c4cd28ea0352ab000000000000000100000000000000010000000000000020609f06fb0f917dd5aff48faaa7c9a26932b0164e4ceb2fcb49512a7126aed0240000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002600000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020884f313cc7a8412ea0712b8a5714e7da07720e79a0b4fd720bc61b0bf836cec400000000000000010000000000000000000000000000002032ce4870dfa2fb4284adb38aa43f49a3a3c28255497b93a85731134cd0486a2d000000000000000100000000000000000000000000000020d8d5941d890c32e24cc840a8ee7a932a739bad1dbbbe6985a9d3ea1a07252ddc000000000000000100000000000000010000000000000020581702be02dcae0d01501fe971bb01119d074a9fa43014b6ad4081e583d632e900000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000140000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020d13b1182595fb7c8fd9c38b06609e98ff298f43b1dfe5d8b5ca476009ca9b933000000000000000100000000000000010000000000000020c6b381e0454db795b5b8e2c00528e8909b1dd390294e937bf0b6fb4466a5dbee0000000000000001000000000000000000000000000000204ea8cf9cce17e7e1cd760ecafb340641ca9c38dc3307fbbd00021b4d76fbf0ae0000000000000001000000000000000100000000000000201ec85a72ab785b7c48cb10710fca42c4de34b9d99094486a7cb14fb0a459812f00000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001400000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000010000000000000020892d112af16dd31aa00e78a4b486da7d03ccf553eeed08d731856f357b0d56730000000000000001000000000000000100000000000000204e89e96754b7e307d08e159877a517f8dae2dd670159ccae091ca417e29e0b160000000000000001000000000000000000000000000000205b81613de55d7495bc7e3454f119dc5ff6d98575a97ce0feed94a8a81ef4c58300000000000000010000000000000001000000000000002048060202f26e09afa01220fe2b845539f7f28e73ab6b16690996cf8c05046244000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000014000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000100000000000000203991f987ae43bdb2cb460f4b9117a831f120c1df621ef35f441c88f7b2fe768e00000000000000010000000000000001000000000000002041a778046c93dbd5892bb63389616c7fdabbff935eb68f5452f508f9f65f89050000000000000001000000000000000000000000000000202563891c5fdc655c709322f431d4685310ab6de8a04381b461a35a918206b74b0000000000000001000000000000000100000000000000200aed2038bedd56c46aa92e044dbb04e9d6d047ddb3819c31056472a336358fb2000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000014000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020f065628a8cc1acb32c10fca6cce7ff62f54b3006f7fc53109fe3de9eb63070c7000000000000000100000000000000010000000000000020197823063594ed9cdc1422e186f0f109a3276a516115aaf6b8d28dafd7912882000000000000000100000000000000000000000000000020719cc0a76d30bc5fc3d188278907a26c1bb12d95f610d264295d81fa4961caf70000000000000001000000000000000100000000000000204e291298e718e4215dade20a34700b89a0336d8bede04b427e3792a09b3a48cb000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001400000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020e6547ddea77102bb5b0769fa0ec49ae2993ebcb244cbd2d69f3bfd6fb3737cb90000000000000001000000000000000100000000000000200cbd009198ff0a8e110c81761a286e88fd0450ed686f921f3937fd0895542325000000000000000100000000000000000000000000000020b7d60652bb0211f3ad5aed0c840caa5d9da58707a326e5389e94ec43ff4bd2f1000000000000000100000000000000010000000000000020b4bfefcc77fb1c06d34fae0ff743553b71633d0f2755a6c510a2a7a843af6fbe0000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000280000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020e2efc0c8de247c9438c3cdc5219227339f21ddd9caa55bab11035618652dd797000000000000000100000000000000010000000000000020a7ab07465b54611179f5d8b3f01dda40efa5ef6a7beb7ddea184943d0014654c0000000000000001000000000000000100000000000000201fc30593ec7d427903dd1f55256e3ffc19a85f70cf2a8e7c0acb4f0a53f1effe000000000000000100000000000000000000000000000020bc2ec48a0ffda0d4d83b497975512e07ddaa2af9c054c3050454c1844d04b72f00000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002800000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000208cfd329d11d0511e44efb6c45cb19bbd79f020872b1914221f03f74772df0f780000000000000001000000000000000100000000000000206eda94265d040faabf44625d55ab8b4ec7a5f1ec78d8b49e877a868ec6619d3900000000000000010000000000000001000000000000002029ddc1ae85781550b5b8262839b67495818dab865d8bb41a08d9d715a8f5ad470000000000000001000000000000000000000000000000201dbcfe2b985f1976717c36ba364b4855be4e3991bd1679509516db11cedec7830000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000028000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020189815d4b7880b6e5b19f3f1fc059d7abc004a1c7efbd8330127640e1d8d5c52000000000000000100000000000000010000000000000020f27a29d328bdc6caa0ee3f0f6f7c703890f1805c474144e4bcbc87eab56c5335000000000000000100000000000000010000000000000020b21fce2155f8766d6e3d49a87773c41a486b0eb7dabcbfc0cf2963f7b34ecd33000000000000000100000000000000000000000000000020291814bb23ca041a829cd777ab17a74972cca1d409306698f066b2b12b5b7e450000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000028000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000100000000000000208fcc56b1c6d457aa8bcf6531f86007bd0c1554aaeb03e10977438cba39aa920500000000000000010000000000000001000000000000002054f128363693244ccfcb0f852cc53499930006a76f4f8ad53422282d7ba2b1a900000000000000010000000000000001000000000000002032906f8b355f4c2d6b639a6899bcadf4e2cb7fcba76d4ccb412d5c24053801490000000000000001000000000000000000000000000000207afc3d3f377ea328d0a546da843425d8cd2f61d21026ec31c026288cb3d0698b0000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002800000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020f398ecc257c9c2a22b7cfdd2ee9df79a0764838bfc331ec8ea9acf0cad0b814f0000000000000001000000000000000100000000000000203b71c8650663ac45104b87aeb469737990a8040255ea025b39bbd29956133147000000000000000100000000000000010000000000000020bbdfd0dd1887a478722c75ca8033a8a2201ecbe77561ec5505c4f7fa0b2fc07f000000000000000100000000000000000000000000000020d3e115a5a233331eea0c9d1a61f910fb1ddbd717686aaafe4459fc88d54a083e00000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000001d0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002064c557d55375fb980243316cc094e1409b4134756a1742dc867410611a380c9300000000000000010000000000000001000000000000002012edb90efc6a65c82406e9e729c69705717bb9213763989a3e429db69b1fa1be000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001d00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000209cd7e98a2d2e09ab57fbd65b8471e6f11d77a24e5ca150505ee781dbd33e9756000000000000000100000000000000010000000000000020070faa4b0f39e22d43da05eaf01eaa74ae4dfa9cf3b4f146bc3076585fa9c02700000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001d000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f29994185600000000000000060000000000000001000000000000000000000000000000201d6a369b05cc67293f0393af51a7d4056bc52be5156909401e804d159169447b0000000000000001000000000000000100000000000000201581a9112f15b5db73805221511d3b17bb0b44a8d5bdb5961d05b119e83069f80000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001d000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020dbdb6a4cc8b17c5ea2d125c6af18f1a5a232cbda042546a5e8b8a220e858de5e000000000000000100000000000000010000000000000020ab7aae7bbf9e20bdeb1ab6bbe7a70c6cd858e5d76f9f05de9e38ec9f931a3ec50000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001d00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000207bebb1b5de11152457d291912534c5ffe07f4ef1797e65901fa68e2f90056fb7000000000000000100000000000000010000000000000020d5f15fb4972b5ea2159a542111a45a1ff217a413588328aa49a47ed613fc70570000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000080000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020b2a09e1bba6978bd8c32031dac637f0f3d5206749723d885b5db7c283e254cac0000000000000001000000000000000100000000000000203b055f5ec21cdd2d321937c699cc5b005cfd392544e209343f6f4bc3609d50a8000000000000000100000000000000010000000000000020212011d70596d8f444a02b2551c63793bb6214725d0b1d4e2d024902a719d74d00000000000000010000000000000000000000000000002063b18099f915d818ff11dd06d2b4924e18e1b43d1a7d80c4018a6828759c3e2c000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000800000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d6000000000000000600000000000000010000000000000001000000000000002025553f8f686626057f8d663cb54d66c5a84f60cbc033a86e180f41c8543523ce0000000000000001000000000000000100000000000000205c4181331efc246b6fd787984126b3c735f6b747840454826726ab672228df2000000000000000010000000000000001000000000000002008c5fc936786cf9d0af43c12be03cc772b25837622cd42f08df1c66e5e116a2a000000000000000100000000000000000000000000000020bd75800a626d45803e0ac76b5c093b70cab826c1e74d4cd0ce8e6c36106f95bc000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000008000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000001000000000000002028d53f53d8529a7e90d5ccae7564158bec1af6fa3a5a8ba8cbfb9aa9a6aa048c000000000000000100000000000000010000000000000020a7170bc0cfb0066ee2a6bc38ae323cf6155ef29a640796587131389fc7ddd196000000000000000100000000000000010000000000000020f87937c3d7f9ea889556bed01a00031a67448288e6ad311f669b4408eebc01ac000000000000000100000000000000000000000000000020842c39bed54d7be108142ed95a58b534014e03e9871691ec932be839f2294f4d0000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000008000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000010000000000000020b54a72cb89ccf52e566d99215fd66a8ab35c3e9c5fa456e5a43fc8eb9aa1832100000000000000010000000000000001000000000000002076f0d827402b47129db7da8669550ecbc1c84eddedb8bef62b4d08efce600e37000000000000000100000000000000010000000000000020ad2c19c26d0488214886b03e7e4bc57d130a100d9e13ced4921d6472e2238a2e0000000000000001000000000000000000000000000000201de5bb3d887c07d54506473a20db02428ebc54d6a3c978c792d0e6f1f4de0511000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000800000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000010000000000000020bcf5094d09b6b17179ba3436f1b7be98ca6ba41a91456421e20664fb7f7443820000000000000001000000000000000100000000000000201df9ab42d54f8ea624eecc57fce828882c6b80c722d86bb88d11443ff87766af000000000000000100000000000000010000000000000020630f361882ada56a075e947b144639b306577494cfa2d14d2fd11f09586072a00000000000000001000000000000000000000000000000206e8232a0c61d237a50e6dcca4dcea8b407b71864d02b4c647447bc948ffe8ebc000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000003d0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000000000000000000020ace9659a3eca3c2a1cccbc983ead796d78a748e3786946462f4d9d1fdc3e34ac000000000000000100000000000000010000000000000020bcf05d3c5eb71fed288eb4b419a188c8860206b533025c802ed5cd504e55c1b00000000000000001000000000000000000000000000000207a1b3b2568d13a2eef371f9a6406e1e5ea8ea67cf4f7c3e9e841cfc385002de400000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003d00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020c15d51cf18b6ba8c12ed152e4a515b632b24633b5f6b22f7103649e18d6f1f9e0000000000000001000000000000000100000000000000208b25ecd6ff537916132b0a2c9828a23713e826894f39c2af049fb06a056e2443000000000000000100000000000000000000000000000020ca4326b0ac9a40f7962046fbc2ae4a247b71dee20ff8514aa46bc9a7f710d2460000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000003d000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020938fa0a6b1c2b75bdf6f4ba90387cbcf0b23762fb05befccb17d0cea24fe684000000000000000010000000000000001000000000000002070475275547a4e19ad5111cbc2761f67ebbb11db7b19d3e5da5b0a1829c4ec5a0000000000000001000000000000000000000000000000205863974ae834cb6f7cdda3179a5eb9db26199ae6501319daa7e9350565a01a52000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000003d000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020f6d0f9998a4caeaedf31272eebc9c4f6855dfc972528fca3c6aedb2b52959ee40000000000000001000000000000000100000000000000200bbb509da79f5f8b438035f866b33e7d35ea0d24c196577e58c711e996e9d67a000000000000000100000000000000000000000000000020e0d59165174c1b01a1778b0c00ea048f351711781eb9b7905bac635125041c7c000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003d00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002078d73dc05e52ee7c8e19682c5f83941c32eccea8702643ba4954454340dd7d48000000000000000100000000000000010000000000000020b2bd6c7bce44e8cb1dd2c1ada3f46a4ef84aa70a4f6d582427f82789c25091290000000000000001000000000000000000000000000000207307458ebfa1b463080bdf0c8b226e68af95d3ce03c81f574dc53886fc92c5510000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f8000000000000001e0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e0000000000000006000000000000000100000000000000010000000000000020ba15f8caa378deb827f35ab84ee3c8ef16117ea97e57e0f20b14ae88d236b6ff000000000000000100000000000000000000000000000020a6a1702db35b748e42f0f110ec40716f747145613b2b25986a5c3dc74e1ab13a000000000000000100000000000000000000000000000020ab170dad02da8e5a4c268e132c454adc4b6729b907eb3b0647e0b75ba06ca1ae000000000000000100000000000000000000000000000020261c2de001295b8ae6db8a3110d2d193b80167fee59f8f542a00ce1709747a6900000000000000010000000000000000000000000000002028d0668b3b0bb626ddb7371edbb5222936f68264e2cfb9376038323928d12a950000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000001e00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d6000000000000000600000000000000010000000000000001000000000000002085351021aea650c4597031fb7dc932b99054b360e97ca572bb6bece35ae11bdf0000000000000001000000000000000000000000000000203a2146e92a3ad3706b36813e4c45136f975811c6589e6331024a956042e7768c00000000000000010000000000000000000000000000002024299b0256071ee4c8943b75440fdb14cb0a87a9d470ca0d23930e470c29fd2d00000000000000010000000000000000000000000000002068af7e3f604105e672bb008f7f6497a71b4230ffaedefc6e201e3a965f80aad9000000000000000100000000000000000000000000000020d7f7d11996573b5da0d2cbe7d58b7d9ee40d6b31bbfd992e1387dae096d31597000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f000000000000001e000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000010000000000000020f821bc8956540d674f85944695ec2cdab831a2a389a2d11a3d7cb0e72d70c402000000000000000100000000000000000000000000000020d556e53e89946cc6a63053d2f237bd42df808fd51872fe3a16ac4cf4f89b865e0000000000000001000000000000000000000000000000201f0f92e1ba9dfc9c805ddaed879861bdc05c3a78b978e8bb3a8c041349d557fb0000000000000001000000000000000000000000000000202f82c0c1a186d9e1264fb0ac164a09274cdc7fa84262a440da9649a8aa36aaef000000000000000100000000000000000000000000000020824ce8426988565f955f44ee03d626fea805a15ec4db70b129a69a2d7b15a5aa000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a000000000000001e000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000001000000000000002030d6b49905be576af2c974f08de40dec367587e3f626cc9bc52f04670a7003580000000000000001000000000000000000000000000000207d27cce8e7d4819cb9c3a6e141c2d34d37acb8e1fc1075a3bb2d20b8408e984c0000000000000001000000000000000000000000000000208e9ca24717ee2452a64953880cd16ce2ed80e0ab655a248e3a0d70cb8d9ef4b8000000000000000100000000000000000000000000000020cbb94a1fa90daec34851502087bc06a9b8934f9e2e87d1242484cea77e968a42000000000000000100000000000000000000000000000020d488fb112c8e7e22dfab501043651ee3017cc449d7e2043156d45aaf96580343000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000001e00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000100000000000000208f526051780fa2a3d112fdedee88168162589e00a4943c032e8b91bc4c53d9840000000000000001000000000000000000000000000000202671dd30be892f7113a73cf7f3a8445d53ddc40a8e9973ee587af2a0c1606cb80000000000000001000000000000000000000000000000201a61d9687a39c69fc39cbb583e8569c27f226321d4438d1f17092925ea3cf032000000000000000100000000000000000000000000000020c1e67f4fe465546990e3ad91e731dd95b1c88152d8ecc54d60d94cbfdca528650000000000000001000000000000000000000000000000200b1317ae38b570b4c049c419190fae276bb0ef81fc42fd65f1a137ebd541d9ae000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b9272000000000000003f0000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000000000000000000205d4c779ca056d5a43fdb294c291c55feb6effb474b2ffa15a47c7826b94cf035000000000000000100000000000000000000000000000020e847feaf559ce80754223c34cd9f84ef8630f27f2ec5da9b17c0184e56ac0bbe0000000000000001000000000000000000000000000000207a1b3b2568d13a2eef371f9a6406e1e5ea8ea67cf4f7c3e9e841cfc385002de400000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003f00000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020837fe16eb995227a7f26513d8857ff01ce7279bd091bf82978429b062e6c7e0c000000000000000100000000000000000000000000000020133681acf78f078b649528d2bc4ebbf814409928ff3b11c5c2888bc599bdb55c000000000000000100000000000000000000000000000020ca4326b0ac9a40f7962046fbc2ae4a247b71dee20ff8514aa46bc9a7f710d2460000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc000000000000003f000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020d833267e4e1548dcec354bdd387dc676d52a3c6577c9bde310a8ea9b7d1462ae0000000000000001000000000000000000000000000000209ba171b4bbcf3a9c543a04d5d142e4e190ad4d81bcd4c08138e05f5dc9127d9e0000000000000001000000000000000000000000000000205863974ae834cb6f7cdda3179a5eb9db26199ae6501319daa7e9350565a01a52000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e000000000000003f000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020eca7ca33c2bb4170ac3f035f05468eeb2191e8082d35f89f81cd2a2b7468d41200000000000000010000000000000000000000000000002005ecb630e13c931db03887d2de361943a7433cd3a25d69061ef78222bc734cd6000000000000000100000000000000000000000000000020e0d59165174c1b01a1778b0c00ea048f351711781eb9b7905bac635125041c7c000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003f00000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f000000000000000600000000000000010000000000000000000000000000002016a091d31a88cdd9cdcf3c9cf1ef4ce3622029681073cb148d36577414b8df7d000000000000000100000000000000000000000000000020680c853dc6a0b371601382d940b4b0d046a42c04dba51c8b8801bcceaddb6f9f0000000000000001000000000000000000000000000000207307458ebfa1b463080bdf0c8b226e68af95d3ce03c81f574dc53886fc92c5510000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000380000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000001000000000000002025fed04d69e49303c22cd2fadc0112c6978ec8f20f8fa8fe454102aaef8bd64a000000000000000100000000000000010000000000000020ea132e6ad465bc3d576d24943e8eb110cbbe9e0822e43ab2b485cff78cfe7bbf0000000000000001000000000000000100000000000000206402373ddcb71c9fa2bfe1d2d9097bfb1e67c3a16c2603e6850eedece20f804700000000000000010000000000000000000000000000002093496aa9b95cdfb66da9c0d5bc5df817484a2a333e9349baecc93bd74a2ca4730000000000000001000000000000000000000000000000209fbca920ee0c87a956f99c4f1362a800f24be48892fb636d69c31e2a28f6ac89000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000003800000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000100000000000000204ee0c0b2ff1aa3546421e9e97f4f6196aa1e08d2fe0cb62b9340e2067d59b73f00000000000000010000000000000001000000000000002087acc052c4befcbc863390a53bc9fe76ddf39509151f111da33e34eefa9c20bb000000000000000100000000000000010000000000000020ec80243d3ec903cb562c8eacb603f6c834430b23f15d562812829d19ab4c355c0000000000000001000000000000000000000000000000200c0b006e9ce5ab8dee54461051bb96c286fd71b34dc6edc2cc81ccb3100d316500000000000000010000000000000000000000000000002009d96f34c0d0d0c579558695e2590b6b8a00dc82f66b0ed035313048e74ae7cb000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000038000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f299941856000000000000000600000000000000010000000000000001000000000000002076cf6d425c75d99e7c14d61eac345baaa286bf62aa616e1b43f2880d426fa226000000000000000100000000000000010000000000000020e25b16e92ce565166fe90f1c3edb66f7f7a147fe1eb50d049a44d69786c76df90000000000000001000000000000000100000000000000208e2274770ab1400a8d4a14228b5b83fbbc2f8b567f0d93bae220f05170b20030000000000000000100000000000000000000000000000020a724c8ade8149e1cc611772680cb6d18385ad3f0e4e5bb60e4780827cedd136c0000000000000001000000000000000000000000000000209e4aa536330b2d7a31d018a0c66389dc79b3652f4ba9a731d52185c1d2764761000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000038000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f32938000000000000000600000000000000010000000000000001000000000000002079de3766568509821bc323df29732f79a7231f97a7156c07f5f9c900dd040a30000000000000000100000000000000010000000000000020f33d0621a9be5d0bc10fb9ba479d2c92b9442af4ac19c6bc422738323447ccbf0000000000000001000000000000000100000000000000204b85a596b27c62a80e804a5f440e38fd1798e192f2e4faf6c9d937e152644b4f000000000000000100000000000000000000000000000020488cdfd2909dddf32aafba620adfd844cf7f0e6eae4371d0ed616315e9b3d1e900000000000000010000000000000000000000000000002068e96971008bee2f90df118bffada99c074a0d2c49bfc1b99915b2dcf51048a20000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000003800000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000100000000000000200809765dfcbcb9e1615204c8e0c08810d94b3e8b1dcc5a958d5c4b63a0b152d000000000000000010000000000000001000000000000002004eac4235e209d96bd17c310b61b8b64f2de73bff9eedc68f3d5329676b3529100000000000000010000000000000001000000000000002090d7b0bcec2a4257083160dd8ffbec8f4d56bdf900f2859e017373f837e3c55e0000000000000001000000000000000000000000000000200aeeef018d0928774997734b759241fff2f2f118735c3cc567f475600c93c6450000000000000001000000000000000000000000000000209c3cc5f2e03bbb6fbb6a00377debdbb0ff07e93db8e65b607e9ce577d2bff4060000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f800000000000000050000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e000000000000000600000000000000010000000000000000000000000000002080605255e64754fe39bbae7765c123629a4c2da652e7b7a845d118f9eb022af90000000000000001000000000000000100000000000000202feb59037d37e58c7ae6981240627157e2d56c7ce73366769597e4a404b62e4c000000000000000100000000000000000000000000000020c8a9706d43613feef1f7182c33ec47958f103c466f0a5c331ae15d21af056b2a000000000000000100000000000000010000000000000020407e1d016b2156134625c6c0acace3fca412163392f1c4920830c79723de997b000000000000000100000000000000010000000000000020659b6b070f44812ca2ffc215c67485587dd0d144e05eb3647148b4f5ca7360120000000000000001000000000000000100000000000000204467ec51ac2678c4458d9a3edfbce4efd6f8e939774edd234b937a850f2d8011000000000000000500000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d60000000000000006000000000000000100000000000000000000000000000020deadcf14c5fb6c6e0ee09890e8998329b274d6fbc7b15f827288c5fddf2e888c0000000000000001000000000000000100000000000000208c082649fedb2d6d1df100e532a8001567a341813a6a0fe1b04813431f53cd33000000000000000100000000000000000000000000000020a83ce3f6822f2805da6f235cd57c1e49249433b8646938623efd0a040bb1ded60000000000000001000000000000000100000000000000204bc065f3dd3e3b30a0dac92ed91cf22f8259a480aa87d1c980b53b9a86e52a01000000000000000100000000000000010000000000000020dbce0776e37eb7c2a9e60b3254ce5ea6bed0db83c8c2e6b120494c0d9ed2a76b000000000000000100000000000000010000000000000020ba287c91e1837cf95a60466adf2e983d3e1bc1dd772a30f9d4ebf9a5c624a41f0000000000000005000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020669356750c87158b6d053a2ff3d07f379c15d4a67e1c0567f4312cd1b2060e510000000000000001000000000000000100000000000000206c7de327c4cde9c353811da48a1929a019d15fb4d30226f8005d95a3a5043ff200000000000000010000000000000000000000000000002057b19820ae67477ff0fc9a389396aeb670b7c8e05836cc5910b5ddb99ab4caf9000000000000000100000000000000010000000000000020a4de7176464be9124785e24d63c211255e653cd53798f2b73611e5f15feef7c70000000000000001000000000000000100000000000000207e13fb6690e345dd8bdf6ed863b9142988ca740ed6091c9fae658b221f7d7334000000000000000100000000000000010000000000000020702dffb1d8d06dc763dc02242ce0cf15f3d3925fdb092e9a44ae3810e5ccec4a0000000000000005000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f329380000000000000006000000000000000100000000000000000000000000000020aa21819af434e5f2fac4e429c98e35053be9498009d29363fe03ff776eeb0b9f0000000000000001000000000000000100000000000000200145bfa689a590a70838a593886aa43d2fcfc263d3156b731a198b5f60d17cb80000000000000001000000000000000000000000000000202ca61985fbc5910957e78a916da8508a3ead835fe2a43c85aafb20f5955f0ca0000000000000000100000000000000010000000000000020d2ac9a6c10a81d256c41bc67e07527d5a36e5dc54a2c6b984bb939fbc8ccd413000000000000000100000000000000010000000000000020cc3aa606fdcbf96592df9e3ecf28c535384ef37bff659d91d2f5982a3a391cb0000000000000000100000000000000010000000000000020cd2c9854af6bcc27986c3ca36244687b4759f938229e11ea0ba4cad174caf7dd000000000000000500000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f0000000000000006000000000000000100000000000000000000000000000020010bc528b5465e9f3de0de8b8d47925b1d3655bf436b91380249b00eeb8d94400000000000000001000000000000000100000000000000202ff68e275e9f3c1b3b7f743a4782f617731151b00ff2a2b3c7ad2c740a85ee730000000000000001000000000000000000000000000000206dd7a46816110430442508860c306738f4a9a0455d87cb1fe469f761064972aa000000000000000100000000000000010000000000000020482529a81b98175b81ad742dd6e90b5edefabf8d4cb4e27a6d7438b3191f6bad000000000000000100000000000000010000000000000020af9f96d3edd125bc1e0a105b9ffdc8e3024dc69325a78b2a02611964156a8e7a000000000000000100000000000000010000000000000020cf1233b1b52a86a3afbae1f2412f889b6c0cec637185984030c1666bd63b927200000000000000290000000000000020f7fb5af75b5d40139379a7c2b5c447c3e47a0b8ce22ac15c0f58af4fd764a54e00000000000000060000000000000001000000000000000000000000000000201b81605c89f82931ba1f9c40f6a11252716f4b02a1405f25e3c8d9342ae5141d000000000000000100000000000000010000000000000020a7ab07465b54611179f5d8b3f01dda40efa5ef6a7beb7ddea184943d0014654c0000000000000001000000000000000100000000000000201fc30593ec7d427903dd1f55256e3ffc19a85f70cf2a8e7c0acb4f0a53f1effe000000000000000100000000000000000000000000000020bc2ec48a0ffda0d4d83b497975512e07ddaa2af9c054c3050454c1844d04b72f00000000000000010000000000000001000000000000002058440bb3eca8231612be77b9c78c293b9f181c1881583a7586c86adb22fcb727000000000000000100000000000000000000000000000020075c1ed55e5306f0d731109ca3431886dfd25beae783b317683e26dea49828d5000000000000002900000000000000207f64eba0f313d01a78ca31f52c8245595d1a2376b249ef76eacc2d71ee6cd1d600000000000000060000000000000001000000000000000000000000000000202abc88d2e3de401ab2c938e2d0e3c6ace5b030a54d9aeff0e9218e717f5d843c0000000000000001000000000000000100000000000000206eda94265d040faabf44625d55ab8b4ec7a5f1ec78d8b49e877a868ec6619d3900000000000000010000000000000001000000000000002029ddc1ae85781550b5b8262839b67495818dab865d8bb41a08d9d715a8f5ad470000000000000001000000000000000000000000000000201dbcfe2b985f1976717c36ba364b4855be4e3991bd1679509516db11cedec7830000000000000001000000000000000100000000000000202aeb1a21a8a51e3838d3ca4c4d1d4e93311f3f6425f84b09420bece8ed7eb8aa000000000000000100000000000000000000000000000020a814307bb9ea05955b844f1c790b8529dbbbc77272478e9f525c0e755c4d2fdc0000000000000029000000000000002023ac6deee0d39c98e44e3ac6f68b091952157a46229a24bc313e68f2999418560000000000000006000000000000000100000000000000000000000000000020a99d428a8f4af26c826a4ed7482597440fc869f53f585c86c7250ec11b21a8d8000000000000000100000000000000010000000000000020f27a29d328bdc6caa0ee3f0f6f7c703890f1805c474144e4bcbc87eab56c5335000000000000000100000000000000010000000000000020b21fce2155f8766d6e3d49a87773c41a486b0eb7dabcbfc0cf2963f7b34ecd33000000000000000100000000000000000000000000000020291814bb23ca041a829cd777ab17a74972cca1d409306698f066b2b12b5b7e450000000000000001000000000000000100000000000000205fd15a34d885afcd9d8a737c1c795199d26167415933cd491cceee66e0dc2005000000000000000100000000000000000000000000000020a14ee6f9546cfb02ff78b709dabacd0a429ab43c6b6fd584555628e9aaf7108e0000000000000029000000000000002015428122db3c3c0fbf9fa59275573d91d1dc457f965544fc97026f3762f3293800000000000000060000000000000001000000000000000000000000000000206f1230ee39fa4b475a68ca2c21a0a52a3a2d008ace0147d9367ca0b19fbf44b300000000000000010000000000000001000000000000002054f128363693244ccfcb0f852cc53499930006a76f4f8ad53422282d7ba2b1a900000000000000010000000000000001000000000000002032906f8b355f4c2d6b639a6899bcadf4e2cb7fcba76d4ccb412d5c24053801490000000000000001000000000000000000000000000000207afc3d3f377ea328d0a546da843425d8cd2f61d21026ec31c026288cb3d0698b0000000000000001000000000000000100000000000000201e8494aa47cbe65ed5b4dd007d4a7604316f8e9ecc719b852b563b4dbbae60460000000000000001000000000000000000000000000000205c77ef5068a9cc47ae333c46d9faa915e49a6fed586bde0e6044f58513c7a20c000000000000002900000000000000203312c10ebb0a3ab4d985b795df5be5c06a3f5983f0850e8fd39ea1db2805bc3f00000000000000060000000000000001000000000000000000000000000000203e4b5489c39040df94e04b61ae4144d75b3731c552cb2872ea3522b56365e3bb0000000000000001000000000000000100000000000000203b71c8650663ac45104b87aeb469737990a8040255ea025b39bbd29956133147000000000000000100000000000000010000000000000020bbdfd0dd1887a478722c75ca8033a8a2201ecbe77561ec5505c4f7fa0b2fc07f000000000000000100000000000000000000000000000020d3e115a5a233331eea0c9d1a61f910fb1ddbd717686aaafe4459fc88d54a083e00000000000000010000000000000001000000000000002004a802d0ff4ecdc663d8407bd9f69541f08fb3a7e0f38cfd3d9972c90108df1a0000000000000001000000000000000000000000000000204ce5348eeeee9b7a32feabcbd0a916dbe05447c1e6022211a8046a1ef97b95f80000000000000050000000000000003900000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000201d4e6c0712764147149ef25466d16fc7c33065b2c6565136c41c38fe01046650000000000000000100000000000000010000000000000020c9c0b321b083e72b287c1f5f27bd58c8853f81a58ea7aa78fc4880a0b3e1a20300000000000000010000000000000001000000000000002088d8b2c047feeef326c27ee57ed797854d67aa1709f8a7128818fa62e55a7001000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000190000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000205de6a68433963cf0c7857d87422df14e10c32724c7cfd2bf5af7cd6a9a11536000000000000000010000000000000001000000000000002049b93df03a2d9f677c69e5781a260e352ca40353ad1badb8e1d6a023c5bcf21e0000000000000001000000000000000100000000000000209a1a091707d63ca2fc90adc03b3ff0bbe24e5d43365c4f0d46f796825fa264d0000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000002600000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020b2eed6e0a8e84ed3bbd514720df2e18dcd3a57a71ab7d4a45bc12f0759a67301000000000000000100000000000000000000000000000020700a3f92944e6a87bc423009506865591e99810e7ab4554df985ec922f18aea40000000000000001000000000000000000000000000000200fb793038444977c354fee118941457e8f5cc8bd6d0c982f4e159d367c2849e70000000000000001000000000000000100000000000000206325b9ede6b47ca05a9aef70d48140c5ba36217b5522573795eae3ae5ed72147000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000060000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201280f1bcea43a07ba8a787f1c57cacf0d325dbc28386d88b7ef10b15697e2beb00000000000000010000000000000000000000000000002085f465dc62741704ec2a6392ac90942a708a72037ede0e36ab09f775b3603c05000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002300000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000208559f1fb8d215280bdc9e28ba319b8cc31b793b78c37e9fe1ebdff20e4bc69f100000000000000010000000000000000000000000000002012a0ef251e1c1d23cf149ec9cc670fbe5eeabf753d5a562eeff8a916060216930000000000000001000000000000000100000000000000204fd5e258ba7ff0f4bad07c49f2daf5f54e385148ca793245ffe062d67a02bbda0000000000000001000000000000000100000000000000206325b9ede6b47ca05a9aef70d48140c5ba36217b5522573795eae3ae5ed72147000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000030000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000000000000000000002094351d233e310dcc0ef8069de2cfa8b909f9e00bd6acf0b54ad1a43a7c1a5fec000000000000000100000000000000000000000000000020ec109daf6825ed91a9d90ad3b60af2ef73dd22a7eba66a8e0388fcbfe194b548000000000000000100000000000000010000000000000020d6eb504e9ef75a7779807884ffd88863c349a65c2d2bdb0014046feb1ccb2ded000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000000100000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020993f6747863d1184669b0175cc4b96dc9d1210e7cb7b97de894eee69c37a356a0000000000000001000000000000000100000000000000205e6da68da3ea9ad273f16ccdd48c3376274c734878296f6641f81e4d32b76656000000000000000100000000000000010000000000000020a7f7e46fa2884bc9ae411e1aeb83a2faf804a1d64b37e7b44cd72d7dd7a386270000000000000001000000000000000100000000000000203bab5ae19c3a6928a4468d0b856ea71595871c296f9e5ef991de19ee35356de0000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000010000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020da04e460913c32b9095fbe1a31f18a0841cf863632676c76517b769f1af8989200000000000000010000000000000001000000000000002075e379d2002547c4b271f443c8a80a0014464bb265311e488f1ed171187359eb000000000000000100000000000000010000000000000020d6eb504e9ef75a7779807884ffd88863c349a65c2d2bdb0014046feb1ccb2ded000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000001f00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000201725838680c0bb2b54b3e60370c133a78a6621d7a69726dcdd173526c3e6b9ba0000000000000001000000000000000000000000000000205c83ece4383148347a1b938c80a649b18433f1e821241773a02351a95f6cf96c000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001f0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000000000000000000002036e0725d8ea78d84622388e50be26e1800667f9718316fa6e5b5641327374dc70000000000000001000000000000000000000000000000204cd898605e569c9a3b4c9527c494b330f36420f151c4dc20e00933ca34fe5564000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000003c00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020c8349b495099bc7ff6e93c98c5758cb16d0fb610423adfee7b5ebae82d9bf08b0000000000000001000000000000000100000000000000202cd4647ce0dd828333f071d6897d8725115df161b3afee5fd00125b915a8e6cc000000000000000100000000000000000000000000000020897ff236f9146b3986820c1eab71fcb6935e6cf4a73d36131649a0459221c9d7000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000001c0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201d3adddcc76832796a7d70940da113cf90641a65120164763ef419c25e741b4e00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000001f00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000201725838680c0bb2b54b3e60370c133a78a6621d7a69726dcdd173526c3e6b9ba0000000000000001000000000000000000000000000000205c83ece4383148347a1b938c80a649b18433f1e821241773a02351a95f6cf96c000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001f0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000000000000000000002036e0725d8ea78d84622388e50be26e1800667f9718316fa6e5b5641327374dc70000000000000001000000000000000000000000000000204cd898605e569c9a3b4c9527c494b330f36420f151c4dc20e00933ca34fe5564000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000001000000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020b660ee564c133a610165e48112fb0a175922f823f84f6282301659dc78edae0400000000000000010000000000000001000000000000002034bd988f572837b892d565ca36ec2229eebe7090d1d2a6223e05180a2397d49d000000000000000100000000000000010000000000000020126e43fc89be56f6dbf774b292faf494d961bf902703368c3f4d27760b5429a6000000000000000100000000000000010000000000000020eb4e0651e828a84fae3111cd7f737af87f306934914a308793a6b7f27908b58b00000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000100000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000001000000000000002093990098c78699790934bf5a0c6d3ac96c48795e4a954236f7b2b376929eba8e000000000000000100000000000000010000000000000020d5420860789793bbdf4b32db486f7422102cfca8d1c25ae72abfd1b0dbd9accb000000000000000100000000000000010000000000000020ff353585f4318a2bc8ec891d323f97568b7b25040c702374c551ef4e9a3b1b61000000000000000100000000000000010000000000000020bf60b679b8e9b0759c4d05cdd1cce271d5bfb1e58f558b4e85891de0e584c083000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000001100000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a000000000000000600000000000000010000000000000000000000000000002035d35851605b34059cfd1dfe469a96d5c39d7c6872ccd382aee93e24389b917c00000000000000010000000000000001000000000000002034bd988f572837b892d565ca36ec2229eebe7090d1d2a6223e05180a2397d49d000000000000000100000000000000010000000000000020126e43fc89be56f6dbf774b292faf494d961bf902703368c3f4d27760b5429a6000000000000000100000000000000010000000000000020eb4e0651e828a84fae3111cd7f737af87f306934914a308793a6b7f27908b58b00000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000110000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020e9ff178f86227be39b9b0d6381bf83f3c7ad683bc12c5f44db96f62adad40c1d000000000000000100000000000000010000000000000020d5420860789793bbdf4b32db486f7422102cfca8d1c25ae72abfd1b0dbd9accb000000000000000100000000000000010000000000000020ff353585f4318a2bc8ec891d323f97568b7b25040c702374c551ef4e9a3b1b61000000000000000100000000000000010000000000000020bf60b679b8e9b0759c4d05cdd1cce271d5bfb1e58f558b4e85891de0e584c083000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000001e00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020bed3d57f1a0f265d35c741f468fe5ae25b80a9d8cce0bb511ce6d02c5f45496a0000000000000001000000000000000000000000000000205c83ece4383148347a1b938c80a649b18433f1e821241773a02351a95f6cf96c000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001e0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020bab8714776f13ede8b6c14d2f9fa1dbc18ce6f336b8b592c0ea67c23f48608820000000000000001000000000000000000000000000000204cd898605e569c9a3b4c9527c494b330f36420f151c4dc20e00933ca34fe5564000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000000900000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000204be7f590eb9344dd875819add7cb8a42e2072589f30801dc3c1fc2a0ed3bdd7f0000000000000001000000000000000100000000000000207f1a19165bceb32d754c643a39696fac86e2414996354784c22f2e02c92f527c0000000000000001000000000000000100000000000000206b8664c253c857f4081b903f24cd144c3fecea41bad9c9bbc6dede7aec8206d200000000000000010000000000000000000000000000002032f5d2fcd66c6d1be270028a1b13801252fc376fa82b764868eec39365d7ad3d000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000090000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000205c957fe18e200f67dcfdaff6ac0e79f330938d1f8ded2406740505d688bec0ad000000000000000100000000000000010000000000000020e1b6449da70162184206e3c54f8a1bc62dc59e315ed2d859457c4a36e0692d1200000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000001c00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020bd40693648bcf4063a2ce36449fb2340b0936108f3e17da0f35d0c1b9cfdc7ee00000000000000010000000000000001000000000000002031576616dfc8f01227203acd3c8aaf85a0fe1fadd2d720eccd06200027580a85000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001c0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201d3adddcc76832796a7d70940da113cf90641a65120164763ef419c25e741b4e00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000003c00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020c8349b495099bc7ff6e93c98c5758cb16d0fb610423adfee7b5ebae82d9bf08b0000000000000001000000000000000100000000000000202cd4647ce0dd828333f071d6897d8725115df161b3afee5fd00125b915a8e6cc000000000000000100000000000000000000000000000020897ff236f9146b3986820c1eab71fcb6935e6cf4a73d36131649a0459221c9d7000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000001c0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201d3adddcc76832796a7d70940da113cf90641a65120164763ef419c25e741b4e00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000000a00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a000000000000000600000000000000010000000000000001000000000000002050df00aae0130b1180a1f07ed26c2af1dfdbcf8ffd76dfff27d68e8aa7264386000000000000000100000000000000000000000000000020796e91eaa6d396ab877ec7a84e1d8d084a69dda27b152a4575ba94f9231676720000000000000001000000000000000100000000000000206b8664c253c857f4081b903f24cd144c3fecea41bad9c9bbc6dede7aec8206d200000000000000010000000000000000000000000000002032f5d2fcd66c6d1be270028a1b13801252fc376fa82b764868eec39365d7ad3d000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000000a0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020adcfc7399b7f54dffa210b62ef9f387bf9917135f9a0dd7cbeaed6332ddc96610000000000000001000000000000000000000000000000201b537d90761f18e0d990acfbad3607f40acbb8ff91ca128b4f6cf4f27d967f3500000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000001e00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020bed3d57f1a0f265d35c741f468fe5ae25b80a9d8cce0bb511ce6d02c5f45496a0000000000000001000000000000000000000000000000205c83ece4383148347a1b938c80a649b18433f1e821241773a02351a95f6cf96c000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001e0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020bab8714776f13ede8b6c14d2f9fa1dbc18ce6f336b8b592c0ea67c23f48608820000000000000001000000000000000000000000000000204cd898605e569c9a3b4c9527c494b330f36420f151c4dc20e00933ca34fe5564000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000003900000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000201d4e6c0712764147149ef25466d16fc7c33065b2c6565136c41c38fe01046650000000000000000100000000000000010000000000000020c9c0b321b083e72b287c1f5f27bd58c8853f81a58ea7aa78fc4880a0b3e1a20300000000000000010000000000000001000000000000002088d8b2c047feeef326c27ee57ed797854d67aa1709f8a7128818fa62e55a7001000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000190000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000205de6a68433963cf0c7857d87422df14e10c32724c7cfd2bf5af7cd6a9a11536000000000000000010000000000000001000000000000002049b93df03a2d9f677c69e5781a260e352ca40353ad1badb8e1d6a023c5bcf21e0000000000000001000000000000000100000000000000209a1a091707d63ca2fc90adc03b3ff0bbe24e5d43365c4f0d46f796825fa264d0000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000002700000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020a32b8fa6da08fbe0b9cad3ce20107f7872df48a824f037353340421b38e7dbf4000000000000000100000000000000000000000000000020700a3f92944e6a87bc423009506865591e99810e7ab4554df985ec922f18aea40000000000000001000000000000000000000000000000200fb793038444977c354fee118941457e8f5cc8bd6d0c982f4e159d367c2849e70000000000000001000000000000000100000000000000206325b9ede6b47ca05a9aef70d48140c5ba36217b5522573795eae3ae5ed72147000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000070000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020100afdb629c627e0a376a74b7076687862ab1e2f5f03a2337e087be51135150c00000000000000010000000000000000000000000000002085f465dc62741704ec2a6392ac90942a708a72037ede0e36ab09f775b3603c05000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002100000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020a11ad082b9b214587c295afdda8c3320bc23eb59713044956d98f288c29bdbf1000000000000000100000000000000010000000000000020d793c571a44628031e4199c577e6651c7ede504551022e3ee6e9cf46b43d9b070000000000000001000000000000000100000000000000204fd5e258ba7ff0f4bad07c49f2daf5f54e385148ca793245ffe062d67a02bbda0000000000000001000000000000000100000000000000206325b9ede6b47ca05a9aef70d48140c5ba36217b5522573795eae3ae5ed72147000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000010000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020da04e460913c32b9095fbe1a31f18a0841cf863632676c76517b769f1af8989200000000000000010000000000000001000000000000002075e379d2002547c4b271f443c8a80a0014464bb265311e488f1ed171187359eb000000000000000100000000000000010000000000000020d6eb504e9ef75a7779807884ffd88863c349a65c2d2bdb0014046feb1ccb2ded000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002400000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000100000000000000206c83b8e07133f63c38f013df39924d80cff3d1044f34cd1d9e3daa576d641c100000000000000001000000000000000100000000000000205714ca1ee71e5f917f25d92459ada5330a51f3117b7531c8d05e44e521816c960000000000000001000000000000000000000000000000200fb793038444977c354fee118941457e8f5cc8bd6d0c982f4e159d367c2849e70000000000000001000000000000000100000000000000206325b9ede6b47ca05a9aef70d48140c5ba36217b5522573795eae3ae5ed72147000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000040000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020b8800186623d507294b834b02e75760a085165c96bafd444ace1ec4f6726aacb0000000000000001000000000000000100000000000000209862d0445442827e216b27b80886d6d9907158f5890ffb1fd69a1a5a81af89fe000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000000600000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000100000000000000207e8249ce76aad5f84cdabb9a63e8ad9aa22859f2208b75845adb814280e64b0e000000000000000100000000000000000000000000000020688e345058319870b596fba44541ab46847590cab8811e07afd920158832e9d7000000000000000100000000000000000000000000000020cb3c9625eb492289ae401c2efcfcf5d50feffee71cbcf4a0388efa7e8d2794470000000000000001000000000000000100000000000000203bab5ae19c3a6928a4468d0b856ea71595871c296f9e5ef991de19ee35356de0000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000060000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201280f1bcea43a07ba8a787f1c57cacf0d325dbc28386d88b7ef10b15697e2beb00000000000000010000000000000000000000000000002085f465dc62741704ec2a6392ac90942a708a72037ede0e36ab09f775b3603c05000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000000f00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020a52d5a8887f55bfccb569c6671ed80b71f626fa840bb727e72e5f7f1201e5ba1000000000000000100000000000000000000000000000020c06b98b77be88b5057d5e9cc3c94fe1061f7c7a20250e17ba2b0ce8c1e9cb0270000000000000001000000000000000000000000000000208ba4b5db269e5f06cef1e69b14d5cd9ad9600d46ed13a0b48552d2cc8385b15200000000000000010000000000000000000000000000002032f5d2fcd66c6d1be270028a1b13801252fc376fa82b764868eec39365d7ad3d000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000000f0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000207c12d6d188e6d5d2df9286bf728211bd8607d6c266c3cb4411b8cb0639f1dad60000000000000001000000000000000000000000000000204a3936e2e522b670f552461431080ac7eb854242c1ff9742f92193781c20a5700000000000000001000000000000000000000000000000200e22d9749d60e0d540bb83ff2935afe6d6bd2f52cf199124a9320637f1e3df8300000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002d00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000200f072dbcc8a4e690a8a935b2f15ef06319eab4d457230ff7a31cf4e58084ec11000000000000000100000000000000010000000000000020e7c5e246a2b95e2edeee5f88b23ad6c80b8656b62fb64c213e3ef443860be5d400000000000000010000000000000000000000000000002089c932bfaee7d2bdaf7488749db3a6bf2763de81d20569f77b9fc12113731624000000000000000100000000000000000000000000000020a2331e4c69f49cc61b3158951e5e40e4c60ceac04b3caf1611d2a5eaf5f352fe000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000000d0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020eaceb0df2bd65e2b2fb0521ed1a45f240de92714c6007235da4479ce1c6e8367000000000000000100000000000000010000000000000020a1e8ee366ec4fb2e0704572f237151577cdd7c13611c3913441c718ffcf183090000000000000001000000000000000000000000000000200e22d9749d60e0d540bb83ff2935afe6d6bd2f52cf199124a9320637f1e3df8300000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000000300000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020ceb2525139b684fae176a32af4bac2bcc6596be509ee8bbd939db475a1cd5f3d0000000000000001000000000000000000000000000000206ac34deaf7ceb5abc2f720aae41f2875b6042f4b1cd4563463f7e992888903d4000000000000000100000000000000010000000000000020a7f7e46fa2884bc9ae411e1aeb83a2faf804a1d64b37e7b44cd72d7dd7a386270000000000000001000000000000000100000000000000203bab5ae19c3a6928a4468d0b856ea71595871c296f9e5ef991de19ee35356de0000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000030000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000000000000000000002094351d233e310dcc0ef8069de2cfa8b909f9e00bd6acf0b54ad1a43a7c1a5fec000000000000000100000000000000000000000000000020ec109daf6825ed91a9d90ad3b60af2ef73dd22a7eba66a8e0388fcbfe194b548000000000000000100000000000000010000000000000020d6eb504e9ef75a7779807884ffd88863c349a65c2d2bdb0014046feb1ccb2ded000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002900000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020047c0517c3d760697c7bf2d1bf32625f639094b05944f018f5cfb19847ec2075000000000000000100000000000000010000000000000020a83483e2fc9d818b2c5091dca8c826d520c3d80dfab7bd073e2f69081526e21f000000000000000100000000000000010000000000000020a3698d2bb846956a4f0e328f7f58fe2d3de4dc78469c3520aa648af402bd431e000000000000000100000000000000000000000000000020a2331e4c69f49cc61b3158951e5e40e4c60ceac04b3caf1611d2a5eaf5f352fe000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000090000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000205c957fe18e200f67dcfdaff6ac0e79f330938d1f8ded2406740505d688bec0ad000000000000000100000000000000010000000000000020e1b6449da70162184206e3c54f8a1bc62dc59e315ed2d859457c4a36e0692d1200000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002b00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020e13f1dccb88d9ec20e9908b156f9ae0cb8e0348ad728aea906bec322e02961e80000000000000001000000000000000000000000000000209d33024f264e56892f94df99fa14e797a7839c1eae54741eb3b7f3470a35f648000000000000000100000000000000010000000000000020a3698d2bb846956a4f0e328f7f58fe2d3de4dc78469c3520aa648af402bd431e000000000000000100000000000000000000000000000020a2331e4c69f49cc61b3158951e5e40e4c60ceac04b3caf1611d2a5eaf5f352fe000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000000b0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000000000000000000002026ec57a2ddfb8e5c455799d78e5e1d5fa3c88905dbce6501061408cd9b48405f0000000000000001000000000000000000000000000000201b537d90761f18e0d990acfbad3607f40acbb8ff91ca128b4f6cf4f27d967f3500000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002d00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a00000000000000060000000000000001000000000000000000000000000000200f072dbcc8a4e690a8a935b2f15ef06319eab4d457230ff7a31cf4e58084ec11000000000000000100000000000000010000000000000020e7c5e246a2b95e2edeee5f88b23ad6c80b8656b62fb64c213e3ef443860be5d400000000000000010000000000000000000000000000002089c932bfaee7d2bdaf7488749db3a6bf2763de81d20569f77b9fc12113731624000000000000000100000000000000000000000000000020a2331e4c69f49cc61b3158951e5e40e4c60ceac04b3caf1611d2a5eaf5f352fe000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000000d0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020eaceb0df2bd65e2b2fb0521ed1a45f240de92714c6007235da4479ce1c6e8367000000000000000100000000000000010000000000000020a1e8ee366ec4fb2e0704572f237151577cdd7c13611c3913441c718ffcf183090000000000000001000000000000000000000000000000200e22d9749d60e0d540bb83ff2935afe6d6bd2f52cf199124a9320637f1e3df8300000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000003d00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020b559b849ea63b933df931f5431732bd739b245bad9c12914eae279ddb28127a20000000000000001000000000000000100000000000000202cd4647ce0dd828333f071d6897d8725115df161b3afee5fd00125b915a8e6cc000000000000000100000000000000000000000000000020897ff236f9146b3986820c1eab71fcb6935e6cf4a73d36131649a0459221c9d7000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000001d0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020743d21415e8ded44dc758d10126165cc69a6c70dd61daf76d0afd6b4980d566c00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000000400000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020340da0421914b7a05bc7a70a573bb95801337d759a5d4cf87479791f85f1e281000000000000000100000000000000010000000000000020f864bb060b739b82d8ffbf4ed8eb1cbc55e9055705b9ff946dde3ce7ed3f040c000000000000000100000000000000000000000000000020cb3c9625eb492289ae401c2efcfcf5d50feffee71cbcf4a0388efa7e8d2794470000000000000001000000000000000100000000000000203bab5ae19c3a6928a4468d0b856ea71595871c296f9e5ef991de19ee35356de0000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000040000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020b8800186623d507294b834b02e75760a085165c96bafd444ace1ec4f6726aacb0000000000000001000000000000000100000000000000209862d0445442827e216b27b80886d6d9907158f5890ffb1fd69a1a5a81af89fe000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000001d00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020c6e9e8f5f183e6a18ae47b9c5d84289a45106548f52c0dafe560a7544dd072b000000000000000010000000000000001000000000000002031576616dfc8f01227203acd3c8aaf85a0fe1fadd2d720eccd06200027580a85000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001d0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020743d21415e8ded44dc758d10126165cc69a6c70dd61daf76d0afd6b4980d566c00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000002600000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020b2eed6e0a8e84ed3bbd514720df2e18dcd3a57a71ab7d4a45bc12f0759a67301000000000000000100000000000000000000000000000020700a3f92944e6a87bc423009506865591e99810e7ab4554df985ec922f18aea40000000000000001000000000000000000000000000000200fb793038444977c354fee118941457e8f5cc8bd6d0c982f4e159d367c2849e70000000000000001000000000000000100000000000000206325b9ede6b47ca05a9aef70d48140c5ba36217b5522573795eae3ae5ed72147000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000060000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201280f1bcea43a07ba8a787f1c57cacf0d325dbc28386d88b7ef10b15697e2beb00000000000000010000000000000000000000000000002085f465dc62741704ec2a6392ac90942a708a72037ede0e36ab09f775b3603c05000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000001400000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a000000000000000600000000000000010000000000000001000000000000002015f13a63e6e66a0384ae3940b5c12b5b63b951ea2864fa11da141b2a045428d60000000000000001000000000000000100000000000000201cb670eb1278127a062270a9af0404d26d0e94a1d7bf7346cd1258e13e151ec200000000000000010000000000000000000000000000002075c82b16eeab40fac71fc7b5daaf20759128e3ae4a2440cc391c55dbfc4526ea000000000000000100000000000000010000000000000020eb4e0651e828a84fae3111cd7f737af87f306934914a308793a6b7f27908b58b00000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000140000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020c7993784b950ed07cfa4c762cb8f108f9fbc533be123f0aba562817367d1033a00000000000000010000000000000001000000000000002081274907689d7f4463b7ddd2ab484481450ccc3969be250f387c7c3772e8e77500000000000000010000000000000000000000000000002027c01932b99e3f386091bb61e047d2b80acbd0b3901b0a925079bd4e20713b3b000000000000000100000000000000010000000000000020bf60b679b8e9b0759c4d05cdd1cce271d5bfb1e58f558b4e85891de0e584c083000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000002800000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020d973699b0333cf6f884bd71773ea22bd4441f771d7e202b1c3d38ef3f0eabf3e000000000000000100000000000000010000000000000020a83483e2fc9d818b2c5091dca8c826d520c3d80dfab7bd073e2f69081526e21f000000000000000100000000000000010000000000000020a3698d2bb846956a4f0e328f7f58fe2d3de4dc78469c3520aa648af402bd431e000000000000000100000000000000000000000000000020a2331e4c69f49cc61b3158951e5e40e4c60ceac04b3caf1611d2a5eaf5f352fe000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000080000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201cbef5e48bae942923c6d18d7958197b9ce2e3235793bd9ffb86842783262211000000000000000100000000000000010000000000000020e1b6449da70162184206e3c54f8a1bc62dc59e315ed2d859457c4a36e0692d1200000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000001d00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020c6e9e8f5f183e6a18ae47b9c5d84289a45106548f52c0dafe560a7544dd072b000000000000000010000000000000001000000000000002031576616dfc8f01227203acd3c8aaf85a0fe1fadd2d720eccd06200027580a85000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001d0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020743d21415e8ded44dc758d10126165cc69a6c70dd61daf76d0afd6b4980d566c00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000000800000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020d8f57319c3c14a3763222369cc2ca1a759f1a115a09e22099ad1c3f30b968e1a0000000000000001000000000000000100000000000000207f1a19165bceb32d754c643a39696fac86e2414996354784c22f2e02c92f527c0000000000000001000000000000000100000000000000206b8664c253c857f4081b903f24cd144c3fecea41bad9c9bbc6dede7aec8206d200000000000000010000000000000000000000000000002032f5d2fcd66c6d1be270028a1b13801252fc376fa82b764868eec39365d7ad3d000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000080000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000201cbef5e48bae942923c6d18d7958197b9ce2e3235793bd9ffb86842783262211000000000000000100000000000000010000000000000020e1b6449da70162184206e3c54f8a1bc62dc59e315ed2d859457c4a36e0692d1200000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000003d00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020b559b849ea63b933df931f5431732bd739b245bad9c12914eae279ddb28127a20000000000000001000000000000000100000000000000202cd4647ce0dd828333f071d6897d8725115df161b3afee5fd00125b915a8e6cc000000000000000100000000000000000000000000000020897ff236f9146b3986820c1eab71fcb6935e6cf4a73d36131649a0459221c9d7000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000001d0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000000000000000000020743d21415e8ded44dc758d10126165cc69a6c70dd61daf76d0afd6b4980d566c00000000000000010000000000000001000000000000002043952c83787323ed02967f6874b2568ab0c8c37159ec8878675f257f475a7c81000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000001e00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000010000000000000020bed3d57f1a0f265d35c741f468fe5ae25b80a9d8cce0bb511ce6d02c5f45496a0000000000000001000000000000000000000000000000205c83ece4383148347a1b938c80a649b18433f1e821241773a02351a95f6cf96c000000000000000100000000000000000000000000000020364ea361605912860ae69330ee197e81f5cf2aee5ee01238f89915c19e1b674f0000000000000001000000000000000000000000000000200178800a41369b66440e7a4d50b9cb10df27ae7b6096e93b35223a002189a50300000000000000010000000000000000000000000000002061bca55e64c007d6883994dba531cf815f2ac6477e2b8a7319ae51a4a14601ac0000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b000000000000001e0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce250000000000000005000000000000000100000000000000010000000000000020bab8714776f13ede8b6c14d2f9fa1dbc18ce6f336b8b592c0ea67c23f48608820000000000000001000000000000000000000000000000204cd898605e569c9a3b4c9527c494b330f36420f151c4dc20e00933ca34fe5564000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000003f00000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020a0c5f8d8f37c0396f9c73fb39e50b4569da374fac8b9deb71a8eb2d7c194356a0000000000000001000000000000000000000000000000207edb8977ea6e8b5aab8ac54c422e854a363cd7d64b2db12ea3a1c18f5ecf63c0000000000000000100000000000000000000000000000020897ff236f9146b3986820c1eab71fcb6935e6cf4a73d36131649a0459221c9d7000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a000000000000001f0000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce25000000000000000500000000000000010000000000000000000000000000002036e0725d8ea78d84622388e50be26e1800667f9718316fa6e5b5641327374dc70000000000000001000000000000000000000000000000204cd898605e569c9a3b4c9527c494b330f36420f151c4dc20e00933ca34fe5564000000000000000100000000000000000000000000000020d2e2852c778c4eae72fc1a705aec8d3b3c5bf078c5f02cef6222730394c3ae39000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000003800000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a000000000000000600000000000000010000000000000001000000000000002040aa7e5cffc72bb5c8fec8da28a63ff6f8500713c40bf5347c38161307d92a66000000000000000100000000000000010000000000000020c9c0b321b083e72b287c1f5f27bd58c8853f81a58ea7aa78fc4880a0b3e1a20300000000000000010000000000000001000000000000002088d8b2c047feeef326c27ee57ed797854d67aa1709f8a7128818fa62e55a7001000000000000000100000000000000000000000000000020e66c07583081e267c33c835ae197bdafb24712978d6aac9d0f53e986147fea4200000000000000010000000000000000000000000000002024e7c960723bc5ff5c693ca69cc078c6710037929d28ae1a94c75c99daed9c020000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000180000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000100000000000000206c7e55fc4f90a1593b82c2eeee1b68c1335e58b991f31e72c14171e9049acbc500000000000000010000000000000001000000000000002049b93df03a2d9f677c69e5781a260e352ca40353ad1badb8e1d6a023c5bcf21e0000000000000001000000000000000100000000000000209a1a091707d63ca2fc90adc03b3ff0bbe24e5d43365c4f0d46f796825fa264d0000000000000000100000000000000000000000000000020f4f25849bbf8cba836772db7dfd996f81624abfb24ccd21f150f88ff2ed96df8000000000000000100000000000000000000000000000020781b1b578c0c425664a7652fbe628133bfea300b8e42a45c8137f3db6738d937000000000000000500000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020e58f1d683e6449d3061adefe19ffa668e5062e5fdad3290408c2831c340fdbeb000000000000000100000000000000010000000000000020f864bb060b739b82d8ffbf4ed8eb1cbc55e9055705b9ff946dde3ce7ed3f040c000000000000000100000000000000000000000000000020cb3c9625eb492289ae401c2efcfcf5d50feffee71cbcf4a0388efa7e8d2794470000000000000001000000000000000100000000000000203bab5ae19c3a6928a4468d0b856ea71595871c296f9e5ef991de19ee35356de0000000000000000100000000000000010000000000000020cab72ad06a11034c52eef8fc9375f208dcf827280d9757a6c0fa58f455a95b700000000000000001000000000000000100000000000000202973b9b26275fc69265259026d439bdeef60d053f206a18e9769b07140f3f12b00000000000000050000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000209f4055c1389510a1fd40b1a01c5849ccedde94acf1de1af219172f7e7bf78cd20000000000000001000000000000000100000000000000209862d0445442827e216b27b80886d6d9907158f5890ffb1fd69a1a5a81af89fe000000000000000100000000000000000000000000000020c60fac2a2326940613ae844e1963c0b7722fb786b5c848e6e5cf4560b78ff515000000000000000100000000000000010000000000000020fb11825034e1e6f44af2363fb0e9dd5bb9f3a69d7ac16add55263b9f77626b880000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e000000000000002900000000000000208f449f584cec5ea8631ceba32dfacecf555c8a857f50a95ebbb3d6e26986580a0000000000000006000000000000000100000000000000000000000000000020047c0517c3d760697c7bf2d1bf32625f639094b05944f018f5cfb19847ec2075000000000000000100000000000000010000000000000020a83483e2fc9d818b2c5091dca8c826d520c3d80dfab7bd073e2f69081526e21f000000000000000100000000000000010000000000000020a3698d2bb846956a4f0e328f7f58fe2d3de4dc78469c3520aa648af402bd431e000000000000000100000000000000000000000000000020a2331e4c69f49cc61b3158951e5e40e4c60ceac04b3caf1611d2a5eaf5f352fe000000000000000100000000000000010000000000000020e438f43ec9049b440f68114d5b5dcfa9add20368378dae8fa14773617ef3e6d40000000000000001000000000000000000000000000000205f20bf2c628106ffa854adc0bffa5f663c42714a4e527a0fa535dee5fa5ad97a00000000000000090000000000000020247b251caf5a44093f84c39365ada3c0dc4f7011af68ba5f1d77767acc86ce2500000000000000050000000000000001000000000000000000000000000000205c957fe18e200f67dcfdaff6ac0e79f330938d1f8ded2406740505d688bec0ad000000000000000100000000000000010000000000000020e1b6449da70162184206e3c54f8a1bc62dc59e315ed2d859457c4a36e0692d1200000000000000010000000000000001000000000000002012efdb19f3477e740c260ab39237e12947930f9d6371304227e0478ea58af45d00000000000000010000000000000000000000000000002016bfa36762c0536ae259ab6ab17bacf98951fc37dcb1f69229fd857fd86fb9110000000000000001000000000000000100000000000000207454450fba3b71f84bf23424885b671523760cde0ef7cd1d164aa89275a28b2e0000000000000002148e58e16602596fff4ea6b392da3bc1aef7b51c771a43d9c33947a1f05de9b01b8f5cb37e1f4ef196925d25b175877efe435131cb73cc8d27d2f56ea5a39f72327c0be9 \ No newline at end of file diff --git a/contracts/zkllvm/circuit4/commitment.sol b/contracts/zkllvm/circuit4/commitment.sol new file mode 100644 index 0000000..1aeaed8 --- /dev/null +++ b/contracts/zkllvm/circuit4/commitment.sol @@ -0,0 +1,649 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_commitment.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../containers/merkle_verifier.sol"; +import "../../algebra/polynomial.sol"; +import "hardhat/console.sol"; + +library modular_commitment_scheme_circuit4 { + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint64 constant batches_num = 5; + uint256 constant r = 2; + uint256 constant lambda = 40; + uint256 constant D0_size = 128; + uint256 constant max_degree = 7; + uint256 constant D0_omega = 7356716530956153652314774863381845254278968224778478050456563329565810467774; + uint256 constant unique_points = 5; + uint256 constant permutation_point = 2; + uint256 constant quotient_point = 0; + uint256 constant lookup_point = 4; + bytes constant points_ids = hex"01010101010101010303030303010103000000"; + uint256 constant omega = 199455130043951077247265858823823987229570523056509026484192158816218200659; + uint256 constant _etha = 21408166461546097750498338983278817919292759452620061815139466303960054857463; + + struct commitment_state{ + bytes leaf_data; + uint256 roots_offset; + uint256 initial_data_offset; + uint256 initial_proof_offset; + uint256 round_proof_offset; + uint256 round_data_offset; + uint256[r] alphas; + uint64[batches_num] batch_sizes; + uint64 poly_num; + uint256 points_num; + uint256 theta; + uint256 x_index; + uint256 x; + uint256 max_batch; + uint256 domain_size; + uint256[] final_polynomial; + uint256 leaf_length; + uint256[][unique_points] denominators; + uint256[unique_points] factors; + uint256[][unique_points] combined_U; + uint256[][unique_points] unique_eval_points; + uint256[2] y; + uint256 j; + uint256 offset; + } + + function calculate_2points_interpolation(uint256[] memory xi, uint256[2] memory z) + internal pure returns(uint256[2] memory U){ +// require( xi.length == 2 ); +unchecked { + U[0] = addmod(mulmod(z[0], xi[1], modulus),modulus - mulmod(z[1], xi[0], modulus), modulus); + U[1] = addmod(z[1], modulus - z[0], modulus); +} + } + +// coeffs for zs on each degree can be precomputed if necessary + function calculate_3points_interpolation(uint256[] memory xi, uint256[3] memory z) + internal pure returns(uint256[3] memory U){ +// require( xi.length == 3 ); +unchecked { + z[0] = mulmod(z[0], addmod(xi[1], modulus - xi[2], modulus), modulus); + z[1] = mulmod(z[1], addmod(xi[2], modulus - xi[0], modulus), modulus); + z[2] = mulmod(z[2], addmod(xi[0], modulus - xi[1], modulus), modulus); + + U[0] = mulmod(z[0], mulmod(xi[1], xi[2], modulus), modulus); + U[0] = addmod(U[0], mulmod(z[1], mulmod(xi[0], xi[2], modulus), modulus), modulus); + U[0] = addmod(U[0], mulmod(z[2], mulmod(xi[0], xi[1], modulus), modulus), modulus); + + U[1] = modulus - mulmod(z[0], addmod(xi[1], xi[2], modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[1], addmod(xi[0], xi[2], modulus), modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[2], addmod(xi[0], xi[1], modulus), modulus), modulus); + + U[2] = addmod(z[0], addmod(z[1], z[2], modulus), modulus); +} + } + + function prepare_eval_points(uint256[][unique_points] memory result, uint256 xi) internal view { + uint256 inversed_omega = field.inverse_static(omega, modulus); + result[0] = new uint256[](1); + result[0][0] = xi; + result[1] = new uint256[](2); + result[1][0] = xi; + result[1][1] = _etha; + result[2] = new uint256[](2); + result[2][0] = xi; + result[2][1] = mulmod(xi, omega, modulus); + result[3] = new uint256[](3); + result[3][0] = xi; + result[3][1] = mulmod(xi, omega, modulus); + result[3][2] = _etha; + result[4] = new uint256[](3); + result[4][0] = xi; + result[4][1] = mulmod(xi, omega, modulus); + result[4][2] = mulmod(xi, field.pow_small(omega, 5, modulus), modulus); + + } + + function prepare_U_V(bytes calldata blob, commitment_state memory state, uint256 xi) internal view returns(bool result){ + +unchecked { + result = true; + uint64 ind = 0; + prepare_eval_points(state.unique_eval_points, xi); + // Prepare denominators + for( ind = 0; ind < state.unique_eval_points.length;){ + state.denominators[ind] = new uint256[](state.unique_eval_points[ind].length + 1); + if( state.unique_eval_points[ind].length == 1 ){ + state.factors[ind] = 1; + state.denominators[ind][0] = modulus - state.unique_eval_points[ind][0]; + state.denominators[ind][1] = 1; + } else + if( state.unique_eval_points[ind].length == 2 ){ + // xi1 - xi0 + state.factors[ind] = + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][0], modulus); + state.denominators[ind][2] = 1; + + state.denominators[ind][1] = + modulus - addmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + + state.denominators[ind][0] = + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + } else + if( state.unique_eval_points[ind].length == 3 ){ + state.factors[ind] = modulus - + mulmod( + mulmod( + addmod(state.unique_eval_points[ind][0], modulus - state.unique_eval_points[ind][1], modulus), + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][2], modulus), + modulus + ), + addmod(state.unique_eval_points[ind][2], modulus - state.unique_eval_points[ind][0], modulus), + modulus + ); + state.denominators[ind][3] = 1; + state.denominators[ind][2] = + modulus - addmod( + state.unique_eval_points[ind][0], + addmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][1] = + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus), + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][2], modulus), + mulmod(state.unique_eval_points[ind][1], state.unique_eval_points[ind][2], modulus), + modulus + ), + modulus + ); + state.denominators[ind][0] = + modulus - mulmod( + state.unique_eval_points[ind][0], + mulmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + state.denominators[ind][3] = mulmod(state.denominators[ind][3], state.factors[ind], modulus); + } else { + console.log("UNPROCESSED number of evaluation points"); + return false; + } + ind++; + } + + // Prepare combined U + for( uint256 ind = 0; ind < unique_points;){ + uint256[] memory point = state.unique_eval_points[ind]; + state.combined_U[ind] = new uint256[](state.unique_eval_points[ind].length); + uint64 cur = 0; + uint256 offset = 0x8; + for( uint256 k = 0; k < batches_num;){ + for( uint256 i = 0; i < state.batch_sizes[k];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(k == 2) cur_point = permutation_point; + else if(k == 3) cur_point = quotient_point; + else if(k == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + polynomial.multiply_poly_on_coeff( + state.combined_U[ind], + state.theta, + modulus + ); + if( cur_point == ind ){ + if( point.length == 1 ){ + state.combined_U[ind][0] = addmod( + state.combined_U[ind][0], + basic_marshalling.get_uint256_be(blob, offset), + modulus + ); + } else + if( point.length == 2 ){ + uint256[2] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp = calculate_2points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + } else + if( point.length == 3){ + uint256[3] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp[2] = basic_marshalling.get_uint256_be(blob, offset + 0x40); + tmp = calculate_3points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + state.combined_U[ind][2] = addmod(state.combined_U[ind][2], tmp[2], modulus); + } else { + return false; + } + } + offset += state.unique_eval_points[cur_point].length * 0x20; + i++;cur++; + } + k++; + } + ind++; + } +} + } + + function compute_combined_Q(bytes calldata blob,commitment_state memory state) internal view returns(uint256[2] memory y){ + +unchecked { + uint256[2][unique_points] memory values; + { + uint256 offset = state.initial_data_offset - state.poly_num * 0x40; // Save initial data offset for future use; + uint256 cur = 0; + for(uint256 b = 0; b < batches_num;){ + for(uint256 j = 0; j < state.batch_sizes[b];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(b == 2) cur_point = permutation_point; + else if(b == 3) cur_point = quotient_point; + else if(b == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + for(uint256 k = 0; k < unique_points; ){ + values[k][0] = mulmod(values[k][0], state.theta, modulus); + values[k][1] = mulmod(values[k][1], state.theta, modulus); + k++; + } + + values[cur_point][0] = addmod(values[cur_point][0], basic_marshalling.get_uint256_be(blob, offset), modulus); + values[cur_point][1] = addmod(values[cur_point][1], basic_marshalling.get_uint256_be(blob, offset + 0x20), modulus); + offset += 0x40;j++; cur++; + } + b++; + } + } + for(uint256 p = 0; p < unique_points; ){ + uint256[2] memory tmp = values[p]; + tmp[0] = mulmod(tmp[0], state.factors[p], modulus); + tmp[1] = mulmod(tmp[1], state.factors[p], modulus); + uint256 s = state.x; + tmp[0] = addmod(tmp[0], modulus - polynomial.evaluate(state.combined_U[p], s , modulus), modulus); + tmp[1] = addmod(tmp[1], modulus - polynomial.evaluate(state.combined_U[p], modulus - s, modulus), modulus); + tmp[0] = mulmod(tmp[0], field.inverse_static(polynomial.evaluate(state.denominators[p], s, modulus), modulus), modulus); + tmp[1] = mulmod(tmp[1], field.inverse_static(polynomial.evaluate(state.denominators[p], modulus - s, modulus), modulus), modulus); + y[0] = addmod(y[0], tmp[0], modulus); + y[1] = addmod(y[1], tmp[1], modulus); + p++; + } +} + } + + function initialize( + bytes32 tr_state_before + ) internal returns(bytes32 tr_state_after){ + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + uint256 etha = transcript.get_field_challenge(tr_state, modulus); + require(etha == _etha, "Wrong etha"); + tr_state_after = tr_state.current_challenge; + } + + function copy_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + c + ) + mstore( + add(leaf, 0x40), + d + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_reverted_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + d + ) + mstore( + add(leaf, 0x40), + c + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool b){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, offset)) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function copy_reverted_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, offset)) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function colinear_check(uint256 x, uint256[2] memory y, uint256 alpha, uint256 colinear_value) internal pure returns(bool){ + +unchecked { + uint256 tmp; + tmp = addmod(y[0], y[1], modulus); + tmp = mulmod(tmp, x, modulus); + tmp = addmod( + tmp, + mulmod( + alpha, + addmod(y[0], modulus-y[1], modulus), + modulus + ), + modulus + ); + uint256 tmp1 = mulmod(colinear_value , 2, modulus); + tmp1 = mulmod(tmp1 , x, modulus); + if( tmp != tmp1 ){ + console.log("Colinear check failed"); + return false; + } + return true; +} + } + + function verify_eval( + bytes calldata blob, + uint256[5] memory commitments, + uint256 challenge, + bytes32 transcript_state + ) internal view returns (bool){ + +unchecked { + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + commitment_state memory state; + + { + uint256 poly_at_eta; + /* 1 - 2*permutation_size */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 40);// 0 + if(poly_at_eta != 0x2f5497c3241d226f7a598e125b70d4977a432d3256a5cca609eecd9708197ef7) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x68);// 0x1 + if(poly_at_eta != 0x2ca6f6cfb491ac2d63bfc65bc93426f4fc7c1707955613eb6622712c287f7ad0) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xa8);// 0x2 + if(poly_at_eta != 0x1f42d20e86d85ce2f2bedfcaee04c2c88798a831cec778463324a315ca7d660d) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xe8);// 0x3 + if(poly_at_eta != 0x1c4e1a48a239d06ebdba5ef6a617cdea616e1700f74b6727cd5ccd92f472fe3f) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x128);// 0x4 + if(poly_at_eta != 0x2f5497c3241d226f7a598e125b70d4977a432d3256a5cca609eecd9708197ef7) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x168);// 0x5 + if(poly_at_eta != 0x2ca6f6cfb491ac2d63bfc65bc93426f4fc7c1707955613eb6622712c287f7ad0) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1a8);// 0x6 + if(poly_at_eta != 0x1f42d20e86d85ce2f2bedfcaee04c2c88798a831cec778463324a315ca7d660d) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1e8);// 0x7 + if(poly_at_eta != 0x1c4e1a48a239d06ebdba5ef6a617cdea616e1700f74b6727cd5ccd92f472fe3f) return false; + /* 2 - special selectors */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x248);// 0x8 + if(poly_at_eta != 0x213512f755aea8bd75050bd7d649b6613b649871744b991958a487efc18cae33) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2a8);// 0x9 + if(poly_at_eta != 0x1efa2279781ce1bd13c856bbc25d85030f7e4f6209ce07f8a25cc8572e6e973a) return false; + /* 3 - constant columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x308);// 0xa + if(poly_at_eta != 0x243c65637777d1ee46c13fa6d368a503c6ea125afaa809f6121faf4f7e8634ec) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x368);// 0xb + if(poly_at_eta != 0x10f4eb1c5290c61346203e82423cee59a6035bfd481bad6865fea0ccb30cc012) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x3c8);// 0xc + if(poly_at_eta != 0x3a73f59d35fce36e759ee3b753f2f4d97d01cf186f5e7c532c780e32ceef3b1d) return false; + /* 4 - selector columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x408);// 0xd + if(poly_at_eta != 0x294fd51015a092e0a6b142a1790ecb1bae622443b27626f464a54e0c2be735a0) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x448);// 0xe + if(poly_at_eta != 0x3fd0ca8f3234758577329d6c6758c49bf9aa4a2494805125375911931004ba96) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x4a8);// 0xf + if(poly_at_eta != 0x13cc23004f2aabbc9b7f05ca258e0b57a543e2bfb5ac023244bc9a46a0276b78) return false; + } + + + { + uint256 offset; + + if (challenge!= transcript.get_field_challenge(tr_state, modulus)) return false; + + for(uint8 i = 0; i < batches_num;){ + transcript.update_transcript_b32(tr_state, bytes32(commitments[i])); + i++; + } + state.theta = transcript.get_field_challenge(tr_state, modulus); + + state.points_num = basic_marshalling.get_length(blob, 0x0); + offset = 0x8 + state.points_num*0x20 + 0x8; + for(uint8 i = 0; i < batches_num;){ + state.batch_sizes[i] = uint64(uint8(blob[offset + 0x1])); + if( state.batch_sizes[i] > state.max_batch ) state.max_batch = state.batch_sizes[i]; + state.poly_num += state.batch_sizes[i]; + i++; offset +=2; + } + + offset += 0x8; + offset += state.poly_num; + state.roots_offset = offset + 0x8; + offset += 0x8; + + for( uint8 i = 0; i < r;){ + transcript.update_transcript_b32(tr_state, bytes32(basic_marshalling.get_uint256_be(blob, offset + 0x8))); + state.alphas[i] = transcript.get_field_challenge(tr_state, modulus); + i++; offset +=40; + } + + + bytes calldata proof_of_work = blob[blob.length - 4:]; + transcript.update_transcript(tr_state, proof_of_work); + uint256 p_o_w = transcript.get_integral_challenge_be(tr_state, 4); + if (p_o_w & 0xffff0000 != 0) return false; + + + offset += 0x8 + r; + state.initial_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + + state.round_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + offset += 0x8; + + state.initial_proof_offset = offset; + for(uint8 i = 0; i < lambda;){ + for(uint j = 0; j < batches_num;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != commitments[j] ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + offset += 0x8; + state.round_proof_offset = offset; + + for(uint256 i = 0; i < lambda;){ + for(uint256 j = 0; j < r;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != basic_marshalling.get_uint256_be(blob, state.roots_offset + j * 40 + 0x8) ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + + state.final_polynomial = new uint256[](basic_marshalling.get_length(blob, offset)); + offset += 0x8; + for (uint256 i = 0; i < state.final_polynomial.length;) { + state.final_polynomial[i] = basic_marshalling.get_uint256_be(blob, offset); + i++; offset+=0x20; + } + } + if( state.final_polynomial.length > (( 1 << (field.log2(max_degree + 1) - r + 1) ) ) ){ + console.log("Wrong final poly degree"); + return false; + } + + if( !prepare_U_V(blob, state, challenge) ) return false; + + state.leaf_data = new bytes(state.max_batch * 0x40 + 0x40); + for(uint256 i = 0; i < lambda;){ + // Initial proofs + state.x_index = uint256(transcript.get_integral_challenge_be(tr_state, 8)) % D0_size; + state.x = field.pow_small(D0_omega, state.x_index, modulus); + state.domain_size = D0_size >> 1; + for(uint256 j = 0; j < batches_num;){ + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } + state.leaf_length = state.batch_sizes[j] * 0x40; + state.initial_data_offset += state.batch_sizes[j] * 0x40; + state.initial_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.initial_proof_offset); + j++; + } + { + state.y = compute_combined_Q(blob, state); + if( state.x_index < state.domain_size ){ + if( !copy_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + }else{ + if( !copy_reverted_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + } + } + if( !colinear_check(state.x, state.y, state.alphas[0], basic_marshalling.get_uint256_be(blob,state.round_data_offset)) ){ + console.log("Colinear check failed"); + return false; + } + + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + for(state.j = 1; state.j < r;){ + state.x_index %= state.domain_size; + state.x = mulmod(state.x, state.x, modulus); + state.domain_size >>= 1; + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } + state.y[0] = basic_marshalling.get_uint256_be(blob, state.round_data_offset); + state.y[1] = basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20); + if( !colinear_check(state.x, state.y, state.alphas[state.j], basic_marshalling.get_uint256_be(blob,state.round_data_offset + 0x40)) ){ + console.log("Round colinear check failed"); + return false; + } + state.j++; state.round_data_offset += 0x40; + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + } + + state.x = mulmod(state.x, state.x, modulus); + if(polynomial.evaluate(state.final_polynomial, state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset)) { + console.log("Wrong final poly check"); + return false; + } + if(polynomial.evaluate(state.final_polynomial, modulus - state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20)){ + console.log("Wrong final poly check"); + return false; + } + state.round_data_offset += 0x40; + + i++; + } + return true; +} + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit4/gate_argument.sol b/contracts/zkllvm/circuit4/gate_argument.sol new file mode 100644 index 0000000..531a6a5 --- /dev/null +++ b/contracts/zkllvm/circuit4/gate_argument.sol @@ -0,0 +1,58 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_gate_argument.sol"; +import "hardhat/console.sol"; + + +contract modular_gate_argument_circuit4 is IGateArgument{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + // Append commitments + function verify( + bytes calldata blob, + uint256 theta + ) external view returns (uint256 F){ + uint256 theta_acc = 1; + uint256 eval; + uint256 x; + + uint256 prod; + uint256 sum; + uint256 gate; +// gate === 0 === + gate = 0; +// constraint 0 + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 576); + prod = mulmod(prod, 28948022309329048855892746252171976963363056481941560715954676764349967630336, modulus); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 512); + prod = mulmod(prod, basic_marshalling.get_uint256_be(blob, 544), modulus); + sum = addmod(sum, prod, modulus); + sum = mulmod(sum, theta_acc, modulus); + theta_acc = mulmod(theta, theta_acc, modulus); + gate = addmod(gate, sum, modulus); + gate = mulmod(gate, basic_marshalling.get_uint256_be(blob, 352), modulus); + F = addmod(F, gate, modulus); + + } +} \ No newline at end of file diff --git a/contracts/zkllvm/circuit4/lookup_0.sol b/contracts/zkllvm/circuit4/lookup_0.sol new file mode 100644 index 0000000..bb11b2e --- /dev/null +++ b/contracts/zkllvm/circuit4/lookup_0.sol @@ -0,0 +1,72 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 -- Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../../contracts/basic_marshalling.sol"; + +library lookup_circuit4_0{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + + function evaluate_lookup_0_be( + bytes calldata blob, + uint256 theta, + uint256 theta_acc, + uint256 beta, + uint256 gamma + ) external pure returns (uint256 g, uint256) { + uint256 l; + uint256 selector_value; + uint256 sum; + uint256 prod; + + g = 1; + + selector_value=basic_marshalling.get_uint256_be(blob, 288); + l = mulmod( 1,selector_value, modulus); + theta_acc=theta; + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 512); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 544); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 576); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + g = mulmod(g, mulmod(addmod(1, beta, modulus), addmod(l, gamma, modulus), modulus), modulus); + + + return( g, theta_acc ); + } + + +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit4/lookup_argument.sol b/contracts/zkllvm/circuit4/lookup_argument.sol new file mode 100644 index 0000000..82f2953 --- /dev/null +++ b/contracts/zkllvm/circuit4/lookup_argument.sol @@ -0,0 +1,182 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_lookup_argument.sol"; +import "./lookup_0.sol"; + +import "hardhat/console.sol"; + +contract modular_lookup_argument_circuit4 is ILookupArgument{ +//library modular_lookup_argument_circuit4{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint8 constant tables = 1; + uint8 constant sorted_columns = 2; + uint8 constant lookup_options_num = 1; + uint8 constant lookup_constraints_num = 1; + + + struct lookup_state{ + uint256 theta; + uint256 beta; + uint256 gamma; + uint256 factor; + uint256 V_L_value; + uint256 V_L_shifted_value; + uint256 q_last; + uint256 q_blind; + uint256 mask; + uint256 shifted_mask; + uint256 selector_value; + uint256 shifted_selector_value; + uint256 theta_acc; + uint256 g; + uint256 h; + uint256 l_shifted; + } + + function verify( + bytes calldata zvalues, // Table values and permutations' values + bytes calldata sorted, // Sorted batch values + uint256 lookup_commitment, + uint256 l0, + bytes32 tr_state_before // It's better than transfer all random values + ) external view returns (uint256[4] memory F, bytes32 tr_state_after){ + bytes calldata blob = zvalues[0xc0:]; + lookup_state memory state; + state.V_L_value = basic_marshalling.get_uint256_be(zvalues, 0xc0 + 608 + 0x40); + state.V_L_shifted_value = basic_marshalling.get_uint256_be(zvalues, 0xc0 + 608 + 0x60); + state.q_last = basic_marshalling.get_uint256_be(zvalues, 0x0); + state.q_blind = basic_marshalling.get_uint256_be(zvalues, 0x60); + state.mask = addmod(1, modulus - addmod(state.q_last , state.q_blind, modulus), modulus); + F[2] = state.mask; + + state.shifted_mask = addmod( + 1, + modulus - addmod(basic_marshalling.get_uint256_be(zvalues, 0x20) , basic_marshalling.get_uint256_be(zvalues, 0x80), modulus), + modulus + ); + + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + { + state.theta = transcript.get_field_challenge(tr_state, modulus); //theta + uint256 l; + state.g = 1; + state.h = 1; + + transcript.update_transcript_b32(tr_state, bytes32(lookup_commitment)); + state.beta = transcript.get_field_challenge(tr_state, modulus); //beta + state.gamma = transcript.get_field_challenge(tr_state, modulus); //gamma + state.factor = mulmod(addmod(1, state.beta, modulus), state.gamma, modulus); + (l, state.theta_acc) = lookup_circuit4_0.evaluate_lookup_0_be( blob, state.theta, state.theta_acc, state.beta, state.gamma ); + state.g = mulmod(state.g, l, modulus); + state.selector_value = basic_marshalling.get_uint256_be(blob, 416); + state.shifted_selector_value = basic_marshalling.get_uint256_be(blob, 448); + l = mulmod( 1, state.selector_value, modulus); + state.l_shifted = mulmod( 1, state.shifted_selector_value, modulus); + state.theta_acc=state.theta; + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 0), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 32), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 96), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 128), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 192), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 224), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = mulmod( l, state.mask, modulus); + state.l_shifted = mulmod( state.l_shifted, state.shifted_mask, modulus); + state.g = mulmod(state.g, addmod( state.factor, addmod(l, mulmod(state.beta, state.l_shifted, modulus), modulus), modulus), modulus); + + + } + { + for(uint64 k = 0; k < 2;){ + state.mask = basic_marshalling.get_uint256_be(sorted, k*0x60); + state.shifted_mask = basic_marshalling.get_uint256_be(sorted, k*0x60 + 0x20); + state.h = mulmod( + state.h, + addmod( + addmod( + state.factor, + state.mask, + modulus + ), + mulmod(state.beta, state.shifted_mask , modulus), + modulus + ), + modulus + ); + unchecked{k++;} + } + } + + F[0] = mulmod( + l0, + addmod(1, modulus - state.V_L_value, modulus), + modulus + ); + F[1] = mulmod( + mulmod(state.q_last, state.V_L_value, modulus), + addmod(state.V_L_value, modulus-1, modulus), + modulus + ); + { + F[2] = mulmod( + F[2], + addmod( + mulmod(state.h, state.V_L_shifted_value, modulus), + modulus - mulmod(state.V_L_value, state.g, modulus), + modulus + ), + modulus + ); + } + { + for(uint64 i = 0; i < sorted_columns - 1;){ + state.beta = basic_marshalling.get_uint256_be(sorted, (i+1)*0x60); + state.gamma = modulus - basic_marshalling.get_uint256_be(sorted, (i)*0x60 + 0x40); + F[3] = addmod( + F[3], + mulmod( + mulmod( + transcript.get_field_challenge(tr_state, modulus), //alpha + l0, + modulus + ), + addmod( + state.beta, + state.gamma, + modulus + ), + modulus + ), + modulus + ); + unchecked{i++;} + } + } + tr_state_after = tr_state.current_challenge; + } +} diff --git a/contracts/zkllvm/circuit4/lookup_libs_list.json b/contracts/zkllvm/circuit4/lookup_libs_list.json new file mode 100644 index 0000000..e25da30 --- /dev/null +++ b/contracts/zkllvm/circuit4/lookup_libs_list.json @@ -0,0 +1,3 @@ +[ +"lookup_circuit4_0" +] diff --git a/contracts/zkllvm/circuit4/modular_verifier.sol b/contracts/zkllvm/circuit4/modular_verifier.sol new file mode 100644 index 0000000..c37b62f --- /dev/null +++ b/contracts/zkllvm/circuit4/modular_verifier.sol @@ -0,0 +1,264 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_verifier.sol"; +import "./commitment.sol"; +import "./gate_argument.sol"; +import "./lookup_argument.sol"; +import "./permutation_argument.sol"; +import "hardhat/console.sol"; +import "../../algebra/field.sol"; + +contract modular_verifier_circuit4 is IModularVerifier{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + bool constant use_lookups = false; + bytes32 constant vk1 = bytes32(0x28b2cce92671307faa718cbf16c4bfcd3e17a5d19781f04a6b3a407d3d488dcd); + bytes32 constant vk2 = bytes32(0x716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1); + bytes32 transcript_state; + address _gate_argument_address; + address _permutation_argument_address; + address _lookup_argument_address; + address _commitment_contract_address; + uint64 constant sorted_columns = 2; + uint64 constant f_parts = 8; // Individually on parts + uint64 constant z_offset = 0xc9; + uint64 constant table_offset = z_offset + 0x80 * 4 + 0xc0; + uint64 constant table_end_offset = table_offset + 608; + uint64 constant quotient_offset = 736; + uint64 constant rows_amount = 8; + uint256 constant omega = 199455130043951077247265858823823987229570523056509026484192158816218200659; + uint256 constant special_selectors_offset = z_offset + 4 * 0x80; + + function initialize( +// address permutation_argument_address, + address lookup_argument_address, + address gate_argument_address, + address commitment_contract_address + ) public{ + types.transcript_data memory tr_state; + transcript.init_transcript(tr_state, hex""); + transcript.update_transcript_b32(tr_state, vk1); + transcript.update_transcript_b32(tr_state, vk2); + +// _permutation_argument_address = permutation_argument_address; + _lookup_argument_address = lookup_argument_address; + _gate_argument_address = gate_argument_address; + _commitment_contract_address = commitment_contract_address; + +// ICommitmentScheme commitment_scheme = ICommitmentScheme(commitment_contract_address); +// tr_state.current_challenge = commitment_scheme.initialize(tr_state.current_challenge); + tr_state.current_challenge = modular_commitment_scheme_circuit4.initialize(tr_state.current_challenge); + transcript_state = tr_state.current_challenge; + } + + struct verifier_state{ + uint256 xi; + uint256 Z_at_xi; + uint256 l0; + uint256[f_parts] F; + uint256 gas; + bool b; + } + + // Public input columns + function public_input_direct(bytes calldata blob, uint256[] calldata public_input, verifier_state memory state) internal view + returns (bool check){ + check = true; + + uint256 result = 0; + uint256 Omega = 1; + + for(uint256 i = 0; i < public_input.length;){ + if( public_input[i] != 0){ + uint256 L = mulmod( + Omega, + field.inverse_static( + addmod(state.xi, modulus - Omega, modulus), + modulus + ), + modulus + ); + + result = addmod( + result, + mulmod( + public_input[i], L, modulus + ), + modulus + ); + } + Omega = mulmod(Omega, omega, modulus); + unchecked{i++;} + } + result = mulmod( + result, addmod(field.pow_small(state.xi, rows_amount, modulus), modulus - 1, modulus), modulus + ); + result = mulmod(result, field.inverse_static(rows_amount, modulus), modulus); + + // Input is proof_map.eval_proof_combined_value_offset + if( result != basic_marshalling.get_uint256_be( + blob, 512 + )) check = false; + } + + function verify( + bytes calldata blob, + uint256[] calldata public_input + ) public view returns (bool result) { + verifier_state memory state; + state.b = true; + state.gas = gasleft(); + state.xi = basic_marshalling.get_uint256_be(blob, 0xa1); + state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus); + state.l0 = mulmod( + state.Z_at_xi, + field.inverse_static(mulmod(addmod(state.xi, modulus - 1, modulus), rows_amount, modulus), modulus), + modulus + ); + + //0. Direct public input check + if(public_input.length > 0) { + if (!public_input_direct(blob[905:905+736], public_input, state)) { + console.log("Wrong public input!"); + state.b = false; + } + } + + //1. Init transcript + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + + { + //2. Push variable_values commitment to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x9); + + //3. Permutation argument + uint256[3] memory permutation_argument = modular_permutation_argument_circuit4.verify( + blob[0xc9:905+736], + transcript.get_field_challenge(tr_state, modulus), + transcript.get_field_challenge(tr_state, modulus), + state.l0 + ); + state.F[0] = permutation_argument[0]; + state.F[1] = permutation_argument[1]; + state.F[2] = permutation_argument[2]; + } + + //4. Lookup library call + + { + uint256 lookup_offset = table_offset + quotient_offset + uint256(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf])) * 0x20; + uint256[4] memory lookup_argument; + uint256 lookup_commitment = basic_marshalling.get_uint256_be(blob, 0x81); + ILookupArgument lookup_contract = ILookupArgument(_lookup_argument_address); + (lookup_argument, tr_state.current_challenge) = lookup_contract.verify( + blob[special_selectors_offset: table_offset + quotient_offset], + blob[lookup_offset:lookup_offset + sorted_columns * 0x60], + lookup_commitment, + state.l0, + tr_state.current_challenge + ); + state.F[3] = lookup_argument[0]; + state.F[4] = lookup_argument[1]; + state.F[5] = lookup_argument[2]; + state.F[6] = lookup_argument[3]; + } + + + //5. Push permutation batch to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x31); + + { + //6. Gate argument + IGateArgument modular_gate_argument = IGateArgument(_gate_argument_address); + state.F[7] = modular_gate_argument.verify(blob[table_offset:table_end_offset], transcript.get_field_challenge(tr_state, modulus)); + state.F[7] = mulmod( + state.F[7], + addmod( + 1, + modulus - addmod( + basic_marshalling.get_uint256_be(blob, special_selectors_offset), + basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), + modulus + ), + modulus + ), + modulus + ); + } + + // No public input gate + + uint256 F_consolidated; + { + //7. Push quotient to transcript + for( uint8 i = 0; i < f_parts;){ + F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus); + unchecked{i++;} + } + uint256 points_num = basic_marshalling.get_length(blob, 0xa1 + 0x20); + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59); + } + + //8. Commitment scheme verify_eval + { +// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address); + uint256[5] memory commitments; + commitments[0] = uint256(vk2); + for(uint16 i = 1; i < 5;){ + commitments[i] = basic_marshalling.get_uint256_be(blob, 0x9 + (i-1)*(0x28)); + unchecked{i++;} + } + if(!modular_commitment_scheme_circuit4.verify_eval( + blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge + )) { + console.log("Error from commitment scheme!"); + state.b = false; + } + } + + //9. Final check + { + uint256 T_consolidated; + uint256 factor = 1; + for(uint64 i = 0; i < uint64(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf]));){ + T_consolidated = addmod( + T_consolidated, + mulmod(basic_marshalling.get_uint256_be(blob, table_offset + quotient_offset + i *0x20), factor, modulus), + modulus + ); + factor = mulmod(factor, state.Z_at_xi + 1, modulus); + unchecked{i++;} + } + if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) { + console.log("Error. Table does't satisfy constraint system"); + state.b = false; + } + if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!"); + } + + console.log("Gas for verification:", state.gas-gasleft()); + result = state.b; + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit4/params.json b/contracts/zkllvm/circuit4/params.json new file mode 100644 index 0000000..0227c04 --- /dev/null +++ b/contracts/zkllvm/circuit4/params.json @@ -0,0 +1,65 @@ +{ + "test_name": "circuit4", + "modulus": "28948022309329048855892746252171976963363056481941560715954676764349967630337", + "rows_amount": "8", + "usable_rows_amount": "5", + "omega": "199455130043951077247265858823823987229570523056509026484192158816218200659", + "verification_key": "28b2cce92671307faa718cbf16c4bfcd3e17a5d19781f04a6b3a407d3d488dcd 716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1", + "ar_params": [ + "3", + "0", + "3", + "3" + ], + "columns_rotations_node": [ + [ + "0" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0" + ], + [ + "0" + ], + [ + "0", + "1" + ] + ], + "commitment_params_node": { + "type": "LPC", + "r": "2", + "m": "2", + "lambda": "40", + "max_degree": "7", + "step_list": [ + "1", + "1" + ], + "D_omegas": [ + "7356716530956153652314774863381845254278968224778478050456563329565810467774", + "17166126583027276163107155648953851600645935739886150467584901586847365754678" + ], + "grinding_params": { + "mask": "4294901760" + } + } +} diff --git a/contracts/zkllvm/circuit4/permutation_argument.sol b/contracts/zkllvm/circuit4/permutation_argument.sol new file mode 100644 index 0000000..63aced9 --- /dev/null +++ b/contracts/zkllvm/circuit4/permutation_argument.sol @@ -0,0 +1,93 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "hardhat/console.sol"; + +library modular_permutation_argument_circuit4{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint256 constant permutation_size = 4; + uint256 constant special_selectors_offset = 4 * 0x80; + uint256 constant table_values_offset = 4 * 0x80 + 0xc0; + bytes constant zero_indices = hex"0200022002400000006000c00120016001a0"; + + function uint16_from_two_bytes(bytes1 b1, bytes1 b2) internal pure returns( uint256 result){ + unchecked{ + result = uint8(b1); + result = result << 8; + result += uint8(b2); + } + } + + // Append commitments + function verify( + bytes calldata blob, + uint256 beta, + uint256 gamma, + uint256 l0 + ) internal view returns (uint256[3] memory F){ + uint256 V_P_value = basic_marshalling.get_uint256_be(blob, table_values_offset + 608); + uint256 h = 1; + uint256 g = 1; + + for(uint256 i = 0; i < permutation_size;){ + uint256 tmp = addmod( + gamma, + basic_marshalling.get_uint256_be( + blob, table_values_offset + uint16_from_two_bytes(zero_indices[i<<1], zero_indices[(i<<1)+1]) + ), + modulus + ); + + g = mulmod(g, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, (i *0x40 )), modulus), + tmp, + modulus + ), modulus); + h = mulmod(h, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, permutation_size * 0x40 + (i *0x40 )), modulus), + tmp, + modulus + ), + modulus + ); + unchecked{i++;} + } + + F[0] = mulmod(l0, addmod(1, modulus - V_P_value, modulus), modulus); + F[1] = mulmod( + addmod(addmod(1, modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset), modulus), modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), modulus), + addmod( + mulmod(basic_marshalling.get_uint256_be(blob, table_values_offset + 608 + 0x20), h, modulus), + modulus - mulmod(V_P_value, g, modulus), + modulus + ), + modulus + ); + F[2] = mulmod( + mulmod(basic_marshalling.get_uint256_be(blob, permutation_size * 0x80), V_P_value, modulus), + addmod(V_P_value, modulus-1, modulus), + modulus + ); + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit4/proof.bin b/contracts/zkllvm/circuit4/proof.bin new file mode 100644 index 0000000..8515b58 --- /dev/null +++ b/contracts/zkllvm/circuit4/proof.bin @@ -0,0 +1 @@ +0x040000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d2d93ad8ea6390a305bde3bdab5d2b3a4b00d85eac61d418fabe4551528f97b6800000000000000392d93ad8ea6390a305bde3bdab5d2b3a4b00d85eac61d418fabe4551528f97b682f5497c3241d226f7a598e125b70d4977a432d3256a5cca609eecd9708197ef723e263c93f1d32f1cb572b458d1d8237096fd2a1c2ab5c7b8fee16a2ccdf69052ca6f6cfb491ac2d63bfc65bc93426f4fc7c1707955613eb6622712c287f7ad0336bf2ee3b91feb8f8b3d85bc1938b12eaa1eb30babedc329d4c0f54005d0d171f42d20e86d85ce2f2bedfcaee04c2c88798a831cec778463324a315ca7d660d011bbea729d9f99cdb8339cac7e1b75e0c0f34038086688eadc788f001d1416f1c4e1a48a239d06ebdba5ef6a617cdea616e1700f74b6727cd5ccd92f472fe3f2d93ad8ea6390a305bde3bdab5d2b3a4b00d85eac61d418fabe4551528f97b682f5497c3241d226f7a598e125b70d4977a432d3256a5cca609eecd9708197ef723e263c93f1d32f1cb572b458d1d8237096fd2a1c2ab5c7b8fee16a2ccdf69052ca6f6cfb491ac2d63bfc65bc93426f4fc7c1707955613eb6622712c287f7ad0336bf2ee3b91feb8f8b3d85bc1938b12eaa1eb30babedc329d4c0f54005d0d171f42d20e86d85ce2f2bedfcaee04c2c88798a831cec778463324a315ca7d660d011bbea729d9f99cdb8339cac7e1b75e0c0f34038086688eadc788f001d1416f1c4e1a48a239d06ebdba5ef6a617cdea616e1700f74b6727cd5ccd92f472fe3f284fcc6a316df7d2ea625c3a2722b9ed390583ad99e4e9e2bd00babc12bfd4cb1f135d8656f2fbe6530bda9887206e7c8cf6f6b5b4b67c55c9b29872586ad1e3213512f755aea8bd75050bd7d649b6613b649871744b991958a487efc18cae3311a6a284909131f79e7334f630ae40dc03bb749cfa3f6ee824831192f77c40263d0d2369220fe4bbf4d0a1e0ad782ca2419657ba67d605c889a8aaabc99fe69e1efa2279781ce1bd13c856bbc25d85030f7e4f6209ce07f8a25cc8572e6e973a396d5640644c8b4534981a0d6e554584ae2ce72c82a67feb333e136f41d82b430c3f9c13e66fac6ffa0a346c308b8b1068fde6f506915f86f2e990581d1e25ba243c65637777d1ee46c13fa6d368a503c6ea125afaa809f6121faf4f7e8634ec10f900e0300918f76b89cf8fd0772284d4beed33ed57d8475310adcd8c1b9e3d1b40d88ed8f2ccab20106fc411c400d35e237b51f8ccd9a59ed42801f76c0b6b10f4eb1c5290c61346203e82423cee59a6035bfd481bad6865fea0ccb30cc0121f135d8656f2fbe6530bda9887206e7c8cf6f6b5b4b67c55c9b29872586ad1e31a59f8ba0d598f5ee18c3f74e734d7082135f076cdf00395698b7afce96d59603a73f59d35fce36e759ee3b753f2f4d97d01cf186f5e7c532c780e32ceef3b1d1423edb764eab9245eac79d85ed8512e9dbdaa333c87445f2e4b4f42c2131eb7294fd51015a092e0a6b142a1790ecb1bae622443b27626f464a54e0c2be735a0060991113e00d635772a6ecfa82f0536e585a0b17528a050b7a9649df5c3eb113fd0ca8f3234758577329d6c6758c49bf9aa4a2494805125375911931004ba962c39d96f08fbe5a28b9a3f53e23b235832e26885e624b1ecf1e4d5cf8387a9a826f6338ae70dda4f241e9437210e96ba7ad542f7c9bf1d168723fd189d59192f13cc23004f2aabbc9b7f05ca258e0b57a543e2bfb5ac023244bc9a46a0276b783dff7ce276a26b42b69e281d749800a56fad3006012a3d8afbe16c0ec5f4fe4800c9771071ab42b557edf605b62f6f6efa8aa624a9b16c9a05b170758fc86a9f21bb0fa3e66cfa1dafc7eaf3a576f1ccb1e4211bbf9af6cd4c6d611d0d603e030000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000122975e5333e8fbd80a26c60ae0e19e4b99730c7f3e5475c59f45e8a5268fd4b01468249d38233fe18ae488edb5465e74bc0d6d07cdb197019f36265e020a66d11debd8468a5cf7ef54767c21f349100b8bfc676a9d7c89fb65f946888de2165b365ae6896ccf5fbb5cd69b625d01efcd214c4936bfc299d705a640d12e2da65d3ce74c333eac65ce62caf933bf74f24993368f6fc33ed3cf7fc304e045b47e9f1af68d57fe5bea3fd932f3c55fe3fa5cb6093a4663010f03a89aa9cac7fb8e9c291e0e56ad46fc53a428d356099e98ca56e569695144c71b3f55b547ffd5ffd1118ecd1ef7c7d893df0899a8d7ff0b55d5f53c7d5599b512f47ff089a580f386063a1adbf29e6553bd21bddb8a90a88ad821898c854d5f9d60078b1e6a6c7bc3128a2da0da453174d473d9c8aed11a6c5f52b6f1d9488863e5624abe7da517d53847f0b8ef70b2144eccba2ca47d0d754601568bce5119b8f651819fe99180282b06e147394ce75c3af8a6765a76c2ceb6188572bcf630db55c9bf9a2477612322cfa6cc26271e30d0904d0f26449599d5cfa6ace5e1c6ab9e5cb2ac84f88c09023b9a0227019ffbfa95d2c748152e0ef7f5a75247544da0c88815524ffffd6c000000000000000a00100103020203060402000000000000001d020202020202020203030303030202030101010202010101010101030300000000000000020000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000002010100000000000009103bbb8144d1f3f33c6d2d55c2595efb92a12475950f44e843d5930d7461f3eb3e04447ebb2e0c0cc392d2aa3da6a1046d81222366fa0810d7c39a23789e0c14c32aa9865819c3c02e21e2accbbedae9dc9c9be7f92724a4e4c72a7f91e9c39832155679a7e63c3fd1de1d53344125162385aab102e2285436d202b15b163c67cf154f9fb880d2c0e6a96d5ffaba46914ea837bce9a7d04d25184ceb1290d1f8f72ab060477f2d3f195692a00545b96eb17a0edc12617cabf680e045da6f2e070a2a8e1e9a841dc4814f22dfe5a360d68926d017943dc4889de053666fd419dcd21571e1657be23b7eb0dd201a5c9f2976fb768167cb88707db8d9ca7d2be6232f3bbb8144d1f3f33c6d2d55c2595efb92a12475950f44e843d5930d7461f3eb3e04447ebb2e0c0cc392d2aa3da6a1046d81222366fa0810d7c39a23789e0c14c32aa9865819c3c02e21e2accbbedae9dc9c9be7f92724a4e4c72a7f91e9c39832155679a7e63c3fd1de1d53344125162385aab102e2285436d202b15b163c67cf154f9fb880d2c0e6a96d5ffaba46914ea837bce9a7d04d25184ceb1290d1f8f72ab060477f2d3f195692a00545b96eb17a0edc12617cabf680e045da6f2e070a2a8e1e9a841dc4814f22dfe5a360d68926d017943dc4889de053666fd419dcd21571e1657be23b7eb0dd201a5c9f2976fb768167cb88707db8d9ca7d2be6232f286fce36c7c6dcd354f645d87fd9dc5a5263fc02d1038a65afc7a75c3bff73763c45ae4868a6aa3509ead71f15fb75699d7ae17f13dc248de26c8da6687adeda23500dfb71972b65effbfc64e970bf0af2f850e628644348aaf32e368c725bc32708dddaf0a355dd8d56733e344629709d81d66a333624a6716db87e609b78862361b64dae7e512dbcdd173d2457cc67766e5bee3bb3835c089c11f69494135838e121bda4be2151157ea3e6b2aab629c6187ca7e01ff0f7a2d6a67dd12eee680bba83ec51b371ba634a2b0e62f1486240166ac739a6a2eccd207ad851377bd8043ebf3397fa8c728f45703b7caaa909e0d27036bcf9f98eddb2a187130309870409ae2f87c7368549686786a98175ac8c817825a11200d132276a2842980b550ce7e97ae590c12eda640bdea2f2501459f94dfc3a5ad39eeacb0ce72bdfce162c8f4e10fcb5bc91a12bfa3add4591e54b9bf26d809d826d3ca67b9728eec047255a9e23f44c34a9b3dd5145dc06083082b757d448e88312eb9887154fc66d32344023cdc6a1f7c6bb0dbdc296b5649aff30e50f19322488d79f8c47378e30ca1cb173dca6b5ffed68beb5a2b5be612609907a0ecb87a902de801bb536e9a8a327583a52e1113697e0a9b1e3f3c31486a5379712ded750e9ecd47f600bae62b418a7c5ad1eeec9681f564e1c0c3ceb797d0f01e92a75a831ac58b18cf4519d4e3025e96e987bbe517e6e7e45998e0925a2ba6bedbaf663a2772b3235e15b1452295861febdb13e884270cc249cd5017cc24c2d298a8c79d89d8046a15ddc4df935e09ee0e9f409062f0884b5facb714555472635795f44356b684717b8e949bf19d06026e54eeb1af4d37141ea9131f646f67e8d4de86bd14a1fb5686849a2080e21798416f284a1fdd6e2034fd2ccee9e48c973d3c2982b67c301401fcb6668252330e81efff4fef97bd85a4e63ea2cd7f49937046c4c0192901603b3e2f294000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010d6530f64db33846ee66c26f14fe0fd764653940ef391d5f5f33f9e0c7d8bee73e40b4609cb98c148af74c0085b958dcb1d412305272fb43559ed5afbb76898a14ff2eee72a99d9d77a14fe7887655d31468154f06e1b277d08797637496eeff27f482b865b612f1fd6832f436ed24c7a251818e8611644af46ee571198498e22e221f07396e6a8920160706cbe50ece209190c50e2775c09ed15c908178440a04ea6d4a07cb0c790caf69e5a3ec2650b96d09d9468c0064d47ffe18bc4994981ff1d310c4d25fe55d2b9be024360035c8a3be0706e409d5f79728df56e03ffe05b081f2d55b080580c8240c4b7fb4c2a808ecc3ed3abca18b18e81ad69c2c6d211fd64f283b5ecd706e46d1f7719ac52a41b3a6e76077af9a5489b5ab816e8231fec00a26a7b503258d776d41550f518a1f2775700a819b46fd6a46fbc3415f3278f0dbd68db99b9fb663123d9117becf31ba242b7797160c4535662220da8a072f55a9c9477841f104b63ca094ceb1d74b22568d62b26f33c77eecebe7e55d0f74ed16a52d2f9cbec062d4c0b01beaa02380f8c53cc97a790243603e477dea0035c975fc17c020c335b56d790329e15dadcb9f9c1dad981c03338069e7e97b031580908d5081af7cd07aefcc4300f3270e517eb86516be3d54c68ce62208b131a6403e766c4895df1e8f45626e2058a625a2ea1049ab67ee922ccb050886f535c06b08b8a08eae2054ec9919a7143c46d44715a5c5111d5f42fb326270800b2972078a38b52b01fa2a6b85c217e21e18b20e1159d155e0f60860260b104c5808ccf4d3a5e93ecf17c6dce5a8ee2a604a4de7693506ce6caa2463287a5d817937330b2c5a16c130e839231a5711d59fd7f8b192d4462aaeef08cdc485a27e882c00c8223d8e3a0b76e2507c4ca6d3e17385850e0922081f52b5efca63d3875d13ff37ddc271c5f4891daf83b3592c1eaec113ee002af0fc467741229c2c78a41c03e8ab33c72239526b926d7f422366dac7ce5211c33d49d2061c2cf321a4ce23fc1754cc38ddc6ad946d9280bddc99477ecaa9f789bbd1c72714c00cde5b330c138b5802e3ab1e9c19dc237c4ab1020159d5a246364039e7c42b06bfa8380433ec74a7fd1c54e163e623dc83b54efe20ecc359c316b8e1b16905e64057c7fd08ccf4d3a5e93ecf17c6dce5a8ee2a604a4de7693506ce6caa2463287a5d817937330b2c5a16c130e839231a5711d59fd7f8b192d4462aaeef08cdc485a27e882c00c8223d8e3a0b76e2507c4ca6d3e17385850e0922081f52b5efca63d3875d13ff37ddc271c5f4891daf83b3592c1eaec113ee002af0fc467741229c2c78a41c03e8ab33c72239526b926d7f422366dac7ce5211c33d49d2061c2cf321a4ce23fc1754cc38ddc6ad946d9280bddc99477ecaa9f789bbd1c72714c00cde5b330c138b5802e3ab1e9c19dc237c4ab1020159d5a246364039e7c42b06bfa8380433ec74a7fd1c54e163e623dc83b54efe20ecc359c316b8e1b16905e64057c7fd2ac0ac6f9b58736d8b9902a0567227960edc30fc3065398d32cc71a5620401191b32ecdb06154ad4de0590c2867c0b6df9c5abeae1a5be2bd2c68bbf2f76829604c82119cad824013ef1bf8ed46cf0b6b3d833551645db7f2f7b7bf50b5b920a3afe6009c6a9219031e2300b14d24812a826c447cc8618769faeca6169faef7b0f9953b8cab91378564d02cdcfe889df1f5284980d25d4396b9c92a113d972e024b344e00bdc152b96720f701c2d881e02b5b8ea83cfba3ed035374191b8161d049db4e05814bea45a0a83c63a28f040b3a6869c0b2427567d479b8bb6dba7433b67fecdfcf956a17525539c36a55ef1686f87628b8544536a784e130b4746e42c9c5447ae1258463f3aab447a9f9906b7afbc722f2eeaa83dc7e2d2b05d15550da9914a1efea3e5e652d1bebf32fb2c4a8339fdf7e114fbb9026c3948d1e57b3875d1ddefcd02331aa5654f15979079639b6a80e6aca760f7658a998c21daf13c1045975546e0df6145bd54ed3f48baa6fb0d5cda16e558a79c5acca4192c8a1077327699cf689135753dd0d520e7b35f9234aac2a1e40f36e5435292a06cdf29ceb31b3341939af0183f3264b1ac7fa2a0c1c5646e1b94bfe50bb9668e8df202cda12c7ad0c4ab4f226c1215edec87150efaaccac0cf137de2d71949ce87643d325ed3852f3b54b0dd93edea1213790d379e4f3e8c2a081b4a59d3b631789e37f2e5208c34ad64f2f232026274e3ad5f3c2468bb21c0d577f8fa4dd0573958367523ed5991ca9f478696e856af15610f624aa94d6bc08e5c213b06e02628fd1ba7ca113b0f7478d7fc6c6f164b0f787c96f727edbb3acef9f8c1af257a9c7f2360c14b8a91bbe15e3abf25bd7affe61e9f7cc3dd44196c2782bffb3e9d876a18721e0209fd7186c65a02ba3696ebc901cfcdfc4d1f91b0485dca66af687433041454542a0ecac2b8a2e92e155ea002c05248c440844188ea37f0eefac8c353000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011a84981eca93f884a2db4f38c3838701c2dde3d80aa2cbc2572d2f8d33f143fe3ac5af6d688906c0234d1eb31b88dd8e6c989f08e5890086ecbef1436a65462208d2964865ed44bf35f2177aed0825a54df4d296812ff2afa97fbc68b0b8879c35a9f0bcade6d5dda1dfa390a3779769c5588300bea5a045540d35a746d5967e2ecf9034a771d3903f5332188153e777174efc2be0a91a50196e83cd1484e16c3514b7c1de3ea96f67bffa775f2fee607993af08eb9c2cef7b5112ff4950bcd11a6a089c1aa5c4521617626c50d964be8aca7ca150449bf1f09ec1efd2063dbd0a205652f0f4b8a75f30153bf12ba92adbee9575be6e26234a4e0a541114ede637be856b3aa3ca0cd973e145dc2f6302b17aba0ba5560fcd334e0e1b0130462102c0f6330e321174f60608f72c1ebd76a47e07f12e5c348758fe5631419346ac232729a73ced6cdf91af471586bbdd24ae56025870b4eb3eeccd2fc808a503bf103a7c1276f5849b7e96bc5907ca9d823634262192dc9f67f945fe3ae5919c3b2a9943e12103b2deb549c1cf2d7b9673f0a5f8fc14c7f60751de7a97d5574d84251172ab80413cdeccac56730c37af582f71ec9855df7a26dc542d35d2d819e2085155c2842c025f60f559c18e7043656c1bf9483b4f335fea8fb8109d1ea51c160503543d79a1c933a7e3b3b375d3d138ecbf7f8a96769fd4482450f37a465b35b90e768d50f6e2578ba668b6f747eaf22a816276ce66cfe3853792cdc45ccf3fee04410e62f937db2e2dc882c7016a96f8a5d70c760b31b1f11d1984b270b6200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af2150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f3981eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c69269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f6196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af2150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f3981eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c69269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f6196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b3fa261b1844f304c485490d5e999b2633afba4d7b5b76ec065c640ecb11d4f893335039be7eedfac2e3ac623e673589a8852baecd7723f5e37deadf71fb908e20d2178e1ae70947695e9f02849f81419e46b869c9b3b2b3e23e1146ac456939012de871e518f6b896a160fd7b607ebe62cb7c5e1696b514fa8b5840bbba96c711ab1bc182a8f50046511b7ab409a1d69cb3ab17ebd01f77d737b60b7fe18ccc60440930f7560351b151572858db88b4c489a2f492f8897491262236693d3a6fc18e807a31e61baec745b3680a23a69b641364929583aeb16689e9bcadb56009c0276de9a6932a003245ef15aef58d798be95c6f3cac18ae207855e797110dad2305d9e4e7bb0cfb3b7ab6f2a16664d9d00ffe6e15a8f452fe648d4b20ee2b0793ccafc6418112053d1c539dc198ca765b3a8d0cc38d47492143067a7a046f7200ab1bc182a8f50046511b7ab409a1d69c2a90b3fbaaeb9368d30147cbe18ccc63440930f7560351b151572858db88b4c624f22063682521dc544081853d3a6fd333c256ccd403b3d21c17f01cc6e398325260683c1a75838a8b30c828a8c1cea39ec7545c681b4ca67af2a046384bb7f8f82b129d1bc618951c62fd7249d8ab036712908b52f1ae94ffc4525b2e1921d93c3ceb3921fdcc22dafd5c7ea4525cb098ed6f74ad0e516b003bada4d1e6de28e82ca48772d1c596b7d5b2515bada370a9d2905c385fa6e80abdf643f5f069cd2d70fd883d5ae14267f9e45f180bad21b8da1104295ba42e4c7df11238b2ba685bbadf6caeefd46ec6802ba43f32c471f3bb0cd27bf0ef02d5acd7b01d1d563ca1925e5938b10ccae4668147c09af482e94cea0e2160822da091f0cd312cd35b7d9bf51af4b8ff33048fd8573b67a960d92625f97f8b1f9d99a2e94ca7f36640906d12ffc4ff22c2d048ed7375bd63a0916df5e2529a6702fb45803196dabe75127ee9fca694157de13742f99e36cb20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000126d09be32ec3b470410c2239d01d6b894da7cfb0e6814d22e7458b2eb347a92f273c5541df839c579932a2bcae67f86d156e7dde88bfe5824a3fb09c0e1450c43b477496f698f750f5c5702b3ac054c166987aa3698c5ece2ae68cefbfefe8af12743d13f1091e1ac65c5dee9781b7bf9352188eb5663b21514ac3bb9e6a94dc3566b4cd927cf5a480a00717c70d31244f4d6398c2b14e615d2ed382e2ee57de313d34a6810d5d30bb2a7a3e5396e0b85cb72122a7c01d2dded50c0f6d2cf12d22b2efeac4d1fc9980a1ff5905d67843e8879bbae276e76bd2135210e89514f116ffa4767cedc9998f1d901a5074b58aa64d306e793b5c782cfc1a240ed570a13b8753d50b973129ed5601a4d639bddfe4fdc2e6401c1244da8a748e3ae110dc047936fe314cbfc4a7df0a263777cbd9b9302191a14a799dd19b44ae4e0c0fe21b6328c24f0fb08fce6f98559838a0901d6a5f2f8afeaca839cd9a5381ad745a37e5c8d6d84ab42b987c6c3b64e89fc659d0bad530d71102f4b7e15f96b9fd5f2c37b25d6350931f931f6114c7a33a3ce75709850258ef0935d1c68a39d5966d2373042f3df45c9deed6b72d72100b8f38c0dc0f684e8124f860e1436e59d0f926bf7ae88ee570e821cdb304297b238708918decf47ede80a92a4a6abf97c7042d14f860a4008590ea30bb6767286517d2266c368c7f80262a2b99efc012ff222bab31dba34cba188370d8ae51c6bffcbbeffe0cb620fbb169f28add96dcdd82183a12d869d4fd9cea41aa27f8c40661838115a2ce097dfd7217ceefcd82846a28193a8f8c87680c7a1876234385f642d2c3edbdf7ca4a4e184093e11105939417e6c570737897f385e789dcbc7a09bd4f82ab3e1182aecd80ec9d0beefa6c6d087e24cdbea5083e627a4eb0519dcf4db6ffd9c1bb0c8833adbb509e551be1e13781db32415af7c19d85b14fae6230b26b46bf3a4e4070e7eb71e04eaae41e202a76b804b9392937ec63897198150c8492ff40c8a73ea90264a89317a98b6965158947fb46c6d6c8139c768e67eaf37b8f475833620e501934849dd55674969c145198179e1dce179df1af37f8693e96782878f7285261b92bc34caf4fb90ef62bae67e861e231e8620e50c80796c169aa1e2004e0fa97626d69e43db046f10b28193a8f8c87680c7a1876234385f642d2c3edbdf7ca4a4e184093e11105939417e6c570737897f385e789dcbc7a09bd4f82ab3e1182aecd80ec9d0beefa6c6d087e24cdbea5083e627a4eb0519dcf4db6ffd9c1bb0c8833adbb509e551be1e13781db32415af7c19d85b14fae6230b26b46bf3a4e4070e7eb71e04eaae41e202a76b804b9392937ec63897198150c8492ff40c8a73ea90264a89317a98b6965158947fb46c6d6c8139c768e67eaf37b8f475833620e501934849dd55674969c145198179e1dce179df1af37f8693e96782878f7285261b92bc34caf4fb90ef62bae67e861e231e8620e50c80796c169aa1e2004e0fa97626d69e43db046f10b077596ab5d4f14c7435038a9742be3e6b737f77900011bd2975eecabf38cafdd2a541dc9aede8050ad6648812a33cfccec8163996bbfab69265fbcf2ef361c4e3000000000000000000000000000000019b4f2bd06f9bad4b2e1e4b1c00000013000000000000000000000000000000019b4f2bd06f9bad4b2e1e4b1c0000001054e43e7d570affb9aee4854bf65e29645e89aff47a48510591b37be81e7333b1bbf6cf08a9fcae4eaea8d7a724774b3c8891d34d51de544ba34750fec2c590536098084ccd24f630a4526a8ec327dd02e337604f5c9549b72cafc70dfac942c255565b8bac20b8c8e750132a560c37ef3df331436801a7896862ec06cba474305abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b3288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc735024182ccb0627001b850504582c756dce7c72a060e0b10fd66001d0bbca3d909fac28e0e5d239105f5b80d47da2bc3f88cdacf4a3d170591082de15897ab082ec95088a6954a2b0eb38bcafc7568bd41c195159aec6025222744eec5f8f4c73502425abe23651217faf5299b77ed5cc30333e56dba19fe08bf95918c03550c9e3b42000000000000000000000000000000011234c7e04a67c8dcc969876800000012000000000000000000000000000000011234c7e04a67c8dcc9698768000000123ea3210f0baf3d18e488ffeda72d1ed08283fff93761e18561d394428b76d9b0ac638a8cf8ea937a5cfd2dca9768e1e91fe046bbe2c220883ca8c33eee65e122850ba5536ba7642c5272fbfd65327d276a5b8fd336422cb3beee5b1199c3bba3aeef6c630693d93fb6067e1d8d25b357b1be696bffdc11d34314f9a694cf41723f35650420d4301512ef7e3d889e3ca011820840ef356cdbc03611a0c5635d92e02372ed819e8b59bdd6f3191761e2c6482b87cfd81d4fe877ba8c5a68af8820000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000122cd78f17f6d8c465091b7b0a204088a1e1ce8f5dcdf4df23e18eea57f2977153103173e02af76fe7bc01cca917b86174b47fdaaf691cd346f0c253577f0786501a43379266a2eefb2924f175075e2713e19f8f54d9a2897d0e73ad2dfc57d280634737a52f7a02496315b2b674b1359b0f00bf718a7a12a4ac625086572e6d10cf70046716cc25a307ec231a93525384b7fca5e29eaaf6547576a31685f46aa298d9e330e9547a6e7e611571a38f7abeec37028021852768105f1f24bebcd04394a4c01f25197dd55e5e2f4af7fdccf1bce8e2f4d5814b9cf5a1bb080d2c3282e9e1104a4b5ab9cb219600596d0e0c86cddd64566d9ceb2690f8907853d8bd816c2e2174f049ed55afb2959828b35f6cf45c7bd6af632167786382f9a29d1f525835cbe525fdbcf40b144f4c568fd72d0446f4b6815020e78dc2b25c3f87a323014812b48db8de104c6e95bc2b6da937f7a42ad448dda5bf48c2f8ec33bc3b717ee70afb169f685e89b40e8c3029d8654573611c72df2eef9846237f2ce24921eba15486cf5ad2809c7970278ea5e5cba1a620d23940dc5b3542b6f6dfe193430f0a144344f4295782e813fc0c8e76f65fd8387471362687ade7c5e3a314e322a68de31e6e82f780e0e468a1c6c12e27b01363b8fabfdbf99383913ee40330f2ab1da45968df2538581430fcbd4f1de9ebde75007ad2f0c50fdb35d2562e8f00375b746d74aa3f8a04de42a501de7199a4fc4c7e2c92f9cdbda891b3c5041b5006f8d6d35d713bccd649eabfa6cdf4482dab5eb981450f667029fc5280f20362e1e44accb70a379e0aa7bbfa5861300e6c5a66e7b2e4f6ae1e8e0476d7f0b3b11e1bb53348f5c861f5584405a79ecff3b80f28d8e1ea9b0b74450a59280f4c62697575ff933316163546abe3b9e5f041b0875344c00a1c39e04ce9e237b38241968a8a006ccce9e9cab9541c461a0fc073e23c7bd4c5757fb28624edc84c7dd00f4b4dfddfff6e6f0a615b72a17db1420567f11601c3d7f4a90764fb16818b13f0b4b20220009190f59ea48d5e824ec01f019eaa930bb9c4e9cba9d4e97e75004c7885f55ffd282b33e6c93d2774764a1b07b56e08d337c74d24f8e77087b753b3877a0aa002d7d4cc1936c2d88b89b80961da528bfc59f245ae15e88f7848c2e1e44accb70a379e0aa7bbfa5861300e6c5a66e7b2e4f6ae1e8e0476d7f0b3b11e1bb53348f5c861f5584405a79ecff3b80f28d8e1ea9b0b74450a59280f4c62697575ff933316163546abe3b9e5f041b0875344c00a1c39e04ce9e237b38241968a8a006ccce9e9cab9541c461a0fc073e23c7bd4c5757fb28624edc84c7dd00f4b4dfddfff6e6f0a615b72a17db1420567f11601c3d7f4a90764fb16818b13f0b4b20220009190f59ea48d5e824ec01f019eaa930bb9c4e9cba9d4e97e75004c7885f55ffd282b33e6c93d2774764a1b07b56e08d337c74d24f8e77087b753b3877a0aa002d7d4cc1936c2d88b89b80961da528bfc59f245ae15e88f7848c0409ae2f87c7368549686786a98175ac8c817825a11200d132276a2842980b550ce7e97ae590c12eda640bdea2f2501459f94dfc3a5ad39eeacb0ce72bdfce161fc6a3ef7a30a81709d7aa355992354fd93d1e3d53a2b055a2af3bfc2322aee703f684053292e56a23cc9aa6cf6b481f2ec93b24a323cd8de4386d69771a4f5c2708dddaf0a355dd8d56733e344629709d81d66a333624a6716db87e609b788623500dfb71972b65effbfc64e970bf0af2f850e628644348aaf32e368c725bc31b9db6668f5dc4dd7d5f86d590d1cc2465212c4ba530adfd1fb40487ba76e6dc1469067986f43cf59010dde08f92426f9c3c91b26d7baea2cea61005e14e93c71f58081e26b71aa87374afb67ad656bae9ece3c89aa1828ad674a7ce51fc08032bf93842bf2d60223b1a98080fb866156c1f2eaba5c51d58b80b9996a54f20521fe9ff989561772ea2d51724e6f0df9a4153ba160a091c827b172e0f31ca66ed06b1c44920157c93acd913a20dc88b72472013d85acacd891a620f4021066f1a1c2fade0fe082163acbfee43fcec5503bc880299149847f4c4568ac89a4545c62f21927fe7dc596701cf597a8da267cc99840fdb2bce57eeca29b69c5d05e2903036759e3edac14171a5563bed33eeee72af6ce9782023b7a578221ef4f625750fc98a61c1253ebe8e5aa9c412cc1111af972c12912cd563f3b50ece0b09da8d3b9199cadd3d03ff6c78305d3da09035ed9eb38046286aca90940c7d19bf964817a3747acf162f38a350354b39b09b18f6969dcddaf1d26e479160ab64a296a7292500858dc4cbf6cb392ae7c2afbcb026857c51d3784ac80aa2f9f4c9b1fad020cd90831b33111a1207e29516e0656e61c6ac921f597591eff35fe8041867c321e8a79e1070bde4bc84e52025781872e9e57793af63dbdb77f231a651059720003b2eb2f19bfe5599844db38336b74f919697253931b2425d1bb448e236d72600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001223b2428aca3ddca50a4e6cee67482fa0dd86bd9d1689768254f10c1adc0312d25c363702d64ba5e934715df57ab4bba2cb17d8662b239dca50584d80cf020d416e2d9fba42d3bd37a7834156e6e061c5c722c6f31b3d5df1de40f4f25935bdd1a1595d143d11b47d4db164ef10250c5d5096d3e08ffb1154a9304d164264ffd33efa315b6cc8b92350e01630da2b8016db6fb7a889f1385c11651682123480611e4861e7721f0331eacb134490c8141a111c9743d4df9de32c207bce8f901e819b7c497da5170d91bfef97b0abcdd53ccc38762ac4ede70ce748a02151cf92a35a61c3890b22c6ffa43121ea2f855a10defbcd01efc2353bef2c02588beb8cc0bca143dc161946546b4c2709d5e5bf134f9c804146ce05df6f16f051be82a8338a5122dfd46182e42b471bbbc1157af1570e94cf3c8d2e4219be3c748b448852d9083f6e76122159ae39261b4ad5a642c7d8243079553b2ec6ba0e45b06b68e17c3a72ca2fec863ef5e78199a7b0668d878c01937ad35106e22804583b2b6c108133cf457fbd8705ad92fae803efd3821b259e52c3c86819dfb7b1ff8fda928079779984949174d271ce893b9744893dc1ef2b3351df090f709fbc0af31be3d386ef43105df9a355dbd5622ab5c9d99cc0ab7772aa434c9be44b3ec9e21089322295aea8e501ce4880020c2e1cd5409cd7d326d89a681ca6e3758d3dc1eb5713e0b1cbeed6a6f988f6636f8a2d09d07332ce9fc52adbe806ccc2598f6cb534d19621aebe16f83b61f83047b7054e7fb3cf59cb5bd55c3d684930f3888e14c64166befb5171f47394b6710b5cbf1e0a257d568300d169b1ede64dfad66ceb1702994104ae8e0b8c6b498ef4a340e1f5dca7130cbfc365dfcbac8513f99314e91301bae89739c641e7903538cfbb9632b94e46ff438240e7ebecb2d760209772f0fe451768c639be186fcac7304469cd48d622907d128ea9cda620376fdf688d2308a68af420df4985d10a1c0ea9eefd981a264d0fccd5d26ee7050870a2f53e80f759750bdf20b67a2ef5e3f15611026a0a4342b0c7f9bf4aabce065f5d0ac1932b40b6c4a45c6f9d15328c4951aaf3f21582d20d41be66fdca9ffdc32eca3850d4bf493b5ba39062eacd73b6ae550c100ee6bdb353112abbc833110cd135c7c166befb5171f47394b6710b5cbf1e0a257d568300d169b1ede64dfad66ceb1702994104ae8e0b8c6b498ef4a340e1f5dca7130cbfc365dfcbac8513f99314e91301bae89739c641e7903538cfbb9632b94e46ff438240e7ebecb2d760209772f0fe451768c639be186fcac7304469cd48d622907d128ea9cda620376fdf688d2308a68af420df4985d10a1c0ea9eefd981a264d0fccd5d26ee7050870a2f53e80f759750bdf20b67a2ef5e3f15611026a0a4342b0c7f9bf4aabce065f5d0ac1932b40b6c4a45c6f9d15328c4951aaf3f21582d20d41be66fdca9ffdc32eca3850d4bf493b5ba39062eacd73b6ae550c100ee6bdb353112abbc833110cd135c7c1663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f216232e0e89af62d4b5e0a44b1fdae3b06376c9123be386de90ef339f6846a620c8509ae342a78dbce2f652ce83bc8df13cae92ffd4acd96c384d84b5b62829aa4c6374baf5ec512737c4b30713f1f990aee557a2b2289954c4678ebb40fec4e4b6d03c88a181de5af86bd618c7ca6d2d1c6c23247c7fb1d7c35badde3a77e53e275325f6801ed604899667b4ebb69d9690e57da2a8bdf801b1adb26780d848343d034dc26445dfc3d86f0c6ad853b8e90dc59275b991680e24ef59731a1d97c84bd0ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b22e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d57145a40e4099c34ab09aab12529be4211daaf783bee3df5d9e430c580d2149a242a2adbcd6a52d4ca8f75b25d259380a1098272a199bd1f2a1d40b13cab90e27536bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db13d9536a1756b57977f4cfff193accd1791336c49366844ba2d645ce68c53b622c26ac95e8a94a86880b3000e6c5332ea933623775e674cff656eb1e973ac4a0397f861bf30d14bc54bd10d550d6206d46fe59f94c85e2fdf4358f440c824b1a3964dcfc56c5aa7cffcebb8cd19e578dadf06b424364b3d74f499983307f128c35bd596c9b2ae909556bf04b32a63034bc8cd39fea8c460bed7ccef9520576250bb136dc421e7dc750855cf951fde0c09436e335d09bda551392f0d290e5af2930a19cdda9ef82a7008969622aa4f09a04654cafaafafa1fa28d11065ed6d1132cf159565af759e9b439f0b428958e5879faccecb3d8b95c4d92fab4a1cd9cf5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011432ca149237c258feaac194541ef39aa19ca3e5e875017a66b834c6c5caedb91e0743e56e71a36aff9f28654eeb8030d520a300414a7b5fa227d474e0035dab0dfd5efdc3f8e4c1c7f4a7cd2fdbfd0fb899e6527da664b7da4f11868ff913c33f78b0e02d9ec870de11a5217b4ff7b6b751b0d18c1504dbc32aa5eef465d1e5007f809e0872f824323290eddbf2e69e0444b475945f12f11ae1864235c0eac21b76b645d8f3b10946854658f785b108867d3b2533f44a20070cd5a8280e6c8c0e391ff2a1c7d23bfb397ea6f844315d46daefc4f03cd0c7d62fb2af7a60e0b52893620c5cd5e7adb3a0a12063bee363d7a3228a40a231612d684442d50b68ef3098508783009f3ad14f288d95a6e2d5112cfc26044296f9587ba6ce5b328ff009ee9ba9ef19816a6cb05f56974a6b200627c767b118f8764281d9427ce0cafb1904997016071d3ef5667a80c85cc7cc7fcadb4f3dc500dc9a2b16a8954ad3c8284485e6f59286f30371e61fc3fe34f835fd3bcd65af2e168acdfd48472cf4d534c68c8b10c49778bd73a31430c0de90d98892d6b78005ed8da54872e2837f661ae42a0190805844c482752e08f2673b468f52bdb3276a40a08d5f5ac5abe80039f8a32ea04060f7a60d7a5141140d7e384032298f71b53946365b6d1e7c384c1fdc5a1406be3b0a54a901eec489d4689df1ecabc7c114505106741f070a71651e55758d9bf57e390210647f4d206b1cade564ab62c3dba85fbd5b5eb82aa8782be1d91cc2806821444c578a9e45c73eaef4afeef24cd672b1466f7e98de85b53c10a0708141d6f1d8fbd1cbbb5cb256ee4eeddae80d4551f2d19dd7d0ea978403ef5f8f7ebe290e27042e3444a34da933f7ab21213fb3c9a65b93152f15687d2c532232864932b93ceb18faa8cf7bb21e704156630e762b596351831494f59013acddcd79b6cd46c314e7055730844e03d657a5a63e82f03fc9df69eb6b0a711d9faafc9f6dfd9e30977ce54c0d6a7a315d7bbbd3616385f36904c866e8cbcd2260550360920261cf68831ab3f29585f0e91d4035eb9595a5c42c2499173434141e56ef1d25f416f2f5707a7c431462b24638b30e4cff668eb2b610028bfaff2be1a910e2da0be90d0a8f8583bceb9d70006048fafff9b50a7a7adcfd7405023c10a0708141d6f1d8fbd1cbbb5cb256ee4eeddae80d4551f2d19dd7d0ea978403ef5f8f7ebe290e27042e3444a34da933f7ab21213fb3c9a65b93152f15687d2c532232864932b93ceb18faa8cf7bb21e704156630e762b596351831494f59013acddcd79b6cd46c314e7055730844e03d657a5a63e82f03fc9df69eb6b0a711d9faafc9f6dfd9e30977ce54c0d6a7a315d7bbbd3616385f36904c866e8cbcd2260550360920261cf68831ab3f29585f0e91d4035eb9595a5c42c2499173434141e56ef1d25f416f2f5707a7c431462b24638b30e4cff668eb2b610028bfaff2be1a910e2da0be90d0a8f8583bceb9d70006048fafff9b50a7a7adcfd74050214cda1b9433fb43ff84e3aab6e2756c437f9c72677fb7a3897b566ae006fdb553fa1f2a2d0b4cce733cb9590433d6813522b16e9db2173a58e4bcaea7364b2a410ba3b497946b8354436b36b51cf41e4ead546ea6e0434895375ccb17bec7e6100def3c798623305e3bde40c330bc212eb2a37209efcc5dd23bc28e0fddc535c328d97abecc9fba594cc5b6a957df4c8ffa3554a419a966a7d7522a71d2380cc112ff4370160fa8ee47f429587d17f09bf124d723699f4d1743af3e63c540fdd386561ff2896754e1a9bfc8dbdd64e28bcb81dfcaa5cc1877214dbe5a00228450964ba54afaca6f3ebf02d833d35bc5e45aa020758b4baa3d6e8a96aa514596a150a02f1be7f1ef6e5d539f61024406f5775519521d6cc7c9950525f5fa4aada04ed39a11be374a6c61c5e56b99bfcc18cf3844790a53d75fbd6e84fb2bdf573371cc3efd9623d338eb44f519257599dbc7b577fa4144e6a6e6aa4f4434628e23b0798e2031fcdc5c2a2b737061d163d4e81662dd06c3b86a540acf39c68960c1a7822fd4379938ac37b11e940096756ff778aeb234d4a59ae01fd8d83a3a64c3f7f199596e90012e876866389b6d5da0737e3ed987bb8b480526e0e8ebefa03158ae95c27961ee3fd5eb392866d6a95728406a392a80ce3b22b153dd0e5b0d92a7516a3d869e11c02a14c6d7992956aafc2925876a4ec37e7021baf2f1a4f29231f3907049791f551a95c9df8fbee2e89a97e9454868a43994240195e19d8b504434dc9619f3394aa0ecd6f8d6e4ebaaced7a336f03cded2128c8f19a33ad71268a7bdcd32887a8fa0d72f3d21ac157c394647eea250c62d3990d621e94379c1ee0b1f5d14bf78f536e3324f2c9924f46e6c0d9c967651a28a8ab8916ed0d8f0d7135a36b344163aa853d266c8382e1a58d76c2df9149ca1cd1c23003925edc110a769eac5d72cda6bdb4cd4590283039c5c5d674e57e313e3348bf7b6e234600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001133a774a19ab61b8109f64814c51f34780235fc7fd842509d94be8a4d2a68ee83355bafa976cca4b782e3bae3d9491f279df8ae93f4a2c1b3945a22c7410a8ba3dd1f3e49f7e113609009ddbc3a561d934e75ba083633d6b80f88c88418299511590677d410af07d8896b9c8903d0884ce8ec7ea23f1ebc08dc870acd2c30d22315b49d6ff2526ec4fd9cae7f30cc356436612577e020848692920fd9085260015c54222a532bd9b8e79e3bb2788f09f19b4f41f839babf9a34d90507c22d0f31d1a7a866d049bd0f02a39b96d04d460ea19c69dbdc07833b06900d80da5233d06e7b4b94a9bcfc9be4a742840db35d30c82d686d248548c74ede204dc81503722c9045498d573a52b887db4c342e20ef2961a2837bd158ff054c033f73ae6931b9be59407de6536533ff0e414ea4500b9dfe4d4e090b7077d257df5e05b52e1200eb020a2be2dc001fa7c1bcf8a07b2a950d809e29eee449310ca02bb28c9bf0b36900480c46fe47dbdf8fdddfb85778d0b04ee35554e178ba05057c07420371d8ede1aeec5815daa129f8589ec50b4c38ae0ae88608075ab34b621e3644bd3321bd871b27f6e5fd7e378bcafc6f5175c8d04e5e246efb882fdf1abc4cb1b93363735a35595151b34e047f8e4c7673734dad13558ee078841673efe6223ba26177e1db765a9cfe132cabee8141f26a9554c8bce64f153286328811a1b97ceb522a2b0e7e95ea5247188b6c05063a52007110f5a4485de2a2c613a971c7f418c138d96a4a8209a27d0dd78d8a9c868e3e765da3629738e76d9ef1f071981bdf12d30c4b65ccaff430a6ae8691b1502ed1df45381b89288e2a79f83e093ee643012cf3b49a33500bcf5951796e4eafd130452457a50ba7038f18dad0c6c119bd121f3d78fcff6fc4f34168a0d87690ea12ef1d6947ef5c11a7a96009be3a7f4ed1e0c2870300903b0cbe975f27896f15ef354c2678a5738011e9730511c580b1429c335cf0fd2ed8c0470b243a50d4925a62bfeee6832d34d3293a1317247c89f163cca30f02d1273fb8f4dbc5af2b6da7c1a9a0da11a25ce66998fbb8db8376210d00d0b4f1ea3bc16337b5239426dbbd8082fb3ed17352f315a93303b66eb182f2ff2f4b0e15c43e9cc84adc6bd92444a3e69481c35c3ec67d29dbcc49914e92d30c4b65ccaff430a6ae8691b1502ed1df45381b89288e2a79f83e093ee643012cf3b49a33500bcf5951796e4eafd130452457a50ba7038f18dad0c6c119bd121f3d78fcff6fc4f34168a0d87690ea12ef1d6947ef5c11a7a96009be3a7f4ed1e0c2870300903b0cbe975f27896f15ef354c2678a5738011e9730511c580b1429c335cf0fd2ed8c0470b243a50d4925a62bfeee6832d34d3293a1317247c89f163cca30f02d1273fb8f4dbc5af2b6da7c1a9a0da11a25ce66998fbb8db8376210d00d0b4f1ea3bc16337b5239426dbbd8082fb3ed17352f315a93303b66eb182f2ff2f4b0e15c43e9cc84adc6bd92444a3e69481c35c3ec67d29dbcc49914e93c5f354a6809f5d8fc0d754f10b0845dec5a231524772141e6eba5461ed414fa0552acfb4136a8687c086867198f336159a70e0de3347500c25c57abf0d8fec11e33c15bb7c48e9229bac840ac06e645d5d917c31e7bc20a0d2539cb4b8d780c018b32a08bd577cb0759e12c12649b35b1950d0243bdc98db464389292a9847109ba3ec16ce4e3b577c673d5f779617b91117c21acc708f2cb129044f137bc6730be7cf60e14728754091d3ce47d168eba3688ee70a16bc363f93b55af74c3ab140abd0d572caa3449846edca7dab68abf06b7538daa95c4ed7c7ffad844ffb50e59ceb397bebcaec96b9b376943e0716b5b2081089021d634130bdc897d5c4c2e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd630724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f63f7f30e3a522dc6fedabd456e1e59d3a23b81f83c1fce0491f79071ad8c30f1e1b3a96d7923c736fad0f134f3ba55954c26859c3027f01f0e736830ee9b27479256d0959e0317b94da37c2704348955c8259f71fcfa70eeb3e4982c8959e72fd3922206432f3dfcc7c9db66cd40c3169170a7debe25aba8d226ca0ae7c7d7cd034fac432e92a2b42e05aca56726b8cff6ba0fac7a6f2a5b1456c948b9eec1f080b053bcd16d5d4bd1fa535a98d947300b6a59e34625a536a53c09c616113e0fa1a2860d6799e7e8128c54e3756812bb83112475cde65eb68ed4524696648294d1acbeae826ae756b4fd92588190031879cd596490575d27d14629329ff7625c92e82e168b10984ebf3882af7c607017785483bca2939819d44e632e3b8ebf51c127157567c1b756d037771244847f987f11dd52364c7ce7d5742716e2eb606f112c3e655ddab7de8cb099b20822eca36512856454cbbb8b49966b76d6cb4d6c42f8b04a641f5bd9684e6c27e27603f178a74b98f35b6fd0218a9ee67420a6c9f000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012a138378678b9a9fa9f822caed56fceefea86209bd4021ba6bee573e3c901bb228c918ff0fa3a0c67bfb6b09e1e1955a75796a8302704342f297c61e7e1081c63a74d565cdc980ea6ae240b93a5eeb1cf5c4476b65c5bb5976091e2e3b83b4e409724080afb6b80e23451e0e31b32ec209d72e3e6f703c689d9466c0f819bec610bff26eb79ccc2698381c1e526c8e8cb81ba5da513c88a95d658706741d25391b5396ef89c9859185f9151eca021218fbe3e645a1fc14164059a32652b8cca537116fac156fe37d320c94709832c3f22e65f14c7ea2e46f49ab4ef770fb2139252df3bf9b3a43fc1c81f8d7197587f0711ea690f28a3b522d2efe8aa6d9fd30214e3a4e3e248494d38c08f1d5f7eba0c97998462ab93c1c6739d4e713a7bfcd2e3e162ffd97be3811337cae82bd1f822cc386b0dbe9975197b39c8f083b9a5e22b9de9a05cedd8225130d0caf51ab986662849eda2a51d47a9b045a9b1ad645120e7452eeccc843918d303bf6eea2d60b26712452de0050a4a46f5efc3a95ba298237ad97a925b7fb5f8fc518872edcc9ef6f7452d907d96b1f70a69e0e84a626287edf099bca058696887d212c16ef5628762017ce6854c31337270a20e2c03eaab85ccf078c24d4d49fd75524349b4a32bc61d43aa8f78a08534a1e7cafdf106d64d6e051bd4aa75782d3e051ec2d55a9fa53455bd1f4af3ebd2de24c32e1129415db32addd146daabee6f5ee6b77961e9789ad6a9d253cff105823ab8c7209b727b072fd9d39077a488d58ab0e7b60f7a3532ee5474d70e8e695a47a48f43395a5dd360e13de1d90628d3107ef8b4b55279b87bebf2e5cae67f17ea6ba930c6a5a22c9f1ec21e26f9d72cef81074d6f17160818e39ed3c7ec8fb8159456e01ec3d520e46635693d1ecc1f527adb7ef8f62198185d7796ab344037941a4db3e13c2adf1b99ca96c2e133e0ad8524832b736e287c721a22e79ece986be5b26099d329a475ff0b0e3199fc9c9c66497adccea7f879d355f158054115e4838473662cd65b8a00f4f1ce6603636399b687479ae7c81afc3bc83acdcdba1b7c7ba3011fd0364dfb3746f801ef0f0dff6f66500947da6120adb6b81a456d76919630fee02fc9b204c8b907fe10f0f200909bd46047e633aee402dab8c962896e69e3395a5dd360e13de1d90628d3107ef8b4b55279b87bebf2e5cae67f17ea6ba930c6a5a22c9f1ec21e26f9d72cef81074d6f17160818e39ed3c7ec8fb8159456e01ec3d520e46635693d1ecc1f527adb7ef8f62198185d7796ab344037941a4db3e13c2adf1b99ca96c2e133e0ad8524832b736e287c721a22e79ece986be5b26099d329a475ff0b0e3199fc9c9c66497adccea7f879d355f158054115e4838473662cd65b8a00f4f1ce6603636399b687479ae7c81afc3bc83acdcdba1b7c7ba3011fd0364dfb3746f801ef0f0dff6f66500947da6120adb6b81a456d76919630fee02fc9b204c8b907fe10f0f200909bd46047e633aee402dab8c962896e69e1daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff42ce53ced07446ce4cbfeaaa0f4abcb1f9db63b2df513b703b1ed32ba27a6c3e40ec70c44d876c57b82bb950c382934e3ec0009a81f04f2b33ea650419990bbc823395a400a684d94c6d78fbb9be15c3f755ec66343bd022f90dd2d33a0d5bb6d0acb6a404135136d1257fddd30a618cd231dcdf8bb21b7ee6788bc2a9fab0c8a3780608b24a9456ccb9f2045db37255b2c52432e9a501fe468cb58daa56815043e67bfa2358232f285f9c6aa48a670ae33bc882dc8695475516879500f531a3b05f957432b4d66c307dd8d7a9f77a65b49b53376dadd9b2290ea826fd6568a542e26f67ab7b96cbd66298cf342505f2dedb559fa4be2273dd01899d6c3abb17103e95278400e0261be0173704e35195ed08b526147587391f22271c9aff1acd02e6f28d62bd42c3fcc73da7b517d5baa60819620acba95f0aedd2585cf579b7d35705bc03969e10b81c3063b89f4985eb328621906caf853ca0348347f0337803eaff1fda99cf274ec44143257d36d2aa688c4542941c328302d04ff1aff04470749654581b0744e1b99794847a43930c573081ebae8d115f9eaae5dbb57860f38b69aba7e4f8bb1e46686b7b85bc6cf5cd390dd4e6428059f42828f44a879f32ae97dec5beded385fc5a0fbc4dbad157d00b9605a7af6d457ef6729bf577f581692321285153bfbd269c62de2a8b229adf2e7765fb13f6dfb9efe3f1b2d1a6613c2edca043bfbefe137a27b08a8997d6151e2cc09bc0d9dbeeab485e46e2284379704caf1a3956679f4fed0cc79f4a409c31f28f7570b1a33dbf528767a0e062f244c42c07aa2adb178d863c82e44f801963c1abefa4604560d9922872b221021670fa21cf311d03323710021d3b9af58b09f0e76a3999c34f7c17e93b32d270000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000105ef28bb37870e2956e0ca8373dfb53ca25283dc496523edd689fb24ce3d15160ffaf1fd37fa3a6e30758b55573b347318cc7de00e4814622011ba8c3e9ecfeb394031adcf3bddf1d5c2c65069a470a20ac215810b6c6dbbe8d2268312e726fd1b19b898e3bcc05c13513b750bb0d67a63bf272a0a00a0bccdd634138c161bd520852d9cd639680b2d4ba4cc4cbbf58055fa09b712543f327709ba3df9fccd1e06122ce578c8978f32cad194b99fab77d6fa5a084fe0a1542b807b59426d0f980afd2e808afca9e72d4acab191940964a8cf8de2f86e707f7e2839294c7974042ecd4cffcc97b64146e19c18c957da5dbfc6d2cd992f11bf80057f78591da5841121e2dfffad26e1abdb004617e8a86cdfc23110b7b3eb15d8e6ba4ac208cc7c3314e2d3d37a79154e4c0667e9d35eab4b93fd465dcd270227e4c50356307ca61b0ccc75474575e42fcf2d4ed95c1a4c2acd36e268af6d9cd6a836a975a646052dc270fcf6540983a25c3adf5535e12bf378a54fc70a185a3a782c1184f2be3e074d101e473b0b60462be350c56c3939718990cb4a2db52b6c8d34ffe94bc485085da66e5a09e45d3bca34f174470c928c47bbcd172cc1e7287841e0bee3a2e03cf850aa9595be4878bd1cee2e3ac14946c856d6a49234233f265bbc83e8140a21510bc249bffe88fca3965d33f041df0278db90c7a354595af64d6bd64248f63a70721b2b8b32dd3c51cb0dcca9765da60fc6630119acabc9e7cb2df21bc693160658d4947e83dbf2406d62c6baf5c3f277f92548bb249da09d1b1ee212c0e20204b49a0d32048e2071504769351aacac54528b75b0155e3a707f3192cbde183dfb4b65f2cdfb71df8eafb896cae55375f24670939ce3bd5ebcb1bb6d3421e90a17870241fa16c6a23691650e09855f5da59cb94c706ad724327bf7ddfb567835e878fdbe05e9395dc96e9af1f67aa0c4a0fc42bcdc8e4474fab4f52204a9893275a30b49e271e12b10d6f9462f9adcd43c0f9e7e321633b4fc6bd755e8b0580d8a5cf4b61d8e1ed4ef2906b9d065234e0a895d8b1ae2e7e430c515aa174fa93c4c2f38716c3965d75432de5eee064fbe5883245b1383afbd66886dad8b71b503b3d0c78e93c69a28abcd21a111f9b063ee15d7ae39756bdbc6a87f52748e4c0204b49a0d32048e2071504769351aacac54528b75b0155e3a707f3192cbde183dfb4b65f2cdfb71df8eafb896cae55375f24670939ce3bd5ebcb1bb6d3421e90a17870241fa16c6a23691650e09855f5da59cb94c706ad724327bf7ddfb567835e878fdbe05e9395dc96e9af1f67aa0c4a0fc42bcdc8e4474fab4f52204a9893275a30b49e271e12b10d6f9462f9adcd43c0f9e7e321633b4fc6bd755e8b0580d8a5cf4b61d8e1ed4ef2906b9d065234e0a895d8b1ae2e7e430c515aa174fa93c4c2f38716c3965d75432de5eee064fbe5883245b1383afbd66886dad8b71b503b3d0c78e93c69a28abcd21a111f9b063ee15d7ae39756bdbc6a87f52748e4c07b0d5bcc9ec3b3519e1c387b96fd2b5b394f2a19894a21b9af910b00e9f70833756d5b8b269cb43b4e1645cd9b858f5a91fbb368bec1f0b8c14c58ce7233b722361b64dae7e512dbcdd173d2457cc67766e5bee3bb3835c089c11f69494135838e121bda4be2151157ea3e6b2aab629c6187ca7e01ff0f7a2d6a67dd12eee68092d97c34e376b63e44ee2fdb8edc57dd52d967f44e9ff11340a69a0945aacef2c797c664f8e13589e5ead5f295b5206dee5742872158b36e1ef11847e977ecb283ee68b27d40a5745056f2725b3db7ee753772eb05448cb014af6500dc9ff2b07c7d654ee7df77bc86af58efab033151a0a46cf625813d4ed0f1e3d8dfb7b783c45ae4868a6aa3509ead71f15fb75699d7ae17f13dc248de26c8da6687adeda286fce36c7c6dcd354f645d87fd9dc5a5263fc02d1038a65afc7a75c3bff737628f43bb2c868137aee268d33127ffacdae6ab4bc988caf66d6b9a59cb77d5bd63070006b8220f8c2c22b4805f8c69a260daeaf4d153958c4c6277eedf5b1ce2714ed73f58795739d2941253b223860e2f8434a6c3504d3a3f5980e465ccc7c270fc80889a8d8136b359ff7bc739cf0e0d554fa19a68de234036ef5cf47add6292c7da5bebfce96c9d44adf62a25e8488c825e7656d4e4259defd97d720cd08b213825a41403169362bb5209d5da17b775a20b1969bfeb6c1ba2f9915df32f75029a6d80771b663e4de64aa6b34df3c2033e1020db0fd93ba8e4f3209f7c1025e3492f8eaae5db1eb890a2064be48010597bbbbbabc1338a8f04d89852245ef24166d60eb4ecfc5ac8a37f7f38a2acad7abb940418b00036fed80e5ba3d34cc8225d2edfee774f844ae703a465c427b1afe0a66eb5ab1d97dce6d6e62ef472ac62ef771597d4eff7928b363d047d0af484a03786872e005a385fca36dca85dfca252d4e66fc137aecf09b82a21fe778001bd22a058f5eb691501577ce02af8c54000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013e8c89ebe8cf3aed9e7495fe5bc65b79c118c65888071ed5000074cbc4a3838e3739adbe15b4f00cf6566f9732867431b26b0f1cb1d85e48f5d91cc144abd9a40366842c2f00ba675952c9653991199af8c6db6f04791061a013078c88770a3c1f883db1cce24eb132c41f3d98cbad9de44661799a02ba565b05f95fd20eb7f11115c4d8c38db99c5bb3f5a9cbb25d5301660cbd55f90be0d597e47964577ef604c8b6729ca2a763fdff8f1757a534c9f058b8bc0a7fadc90ac8c4f01533bf3814f4161e633a7c7444650285e2edb68d310a5640993e24a120ba5db51d85e79d1847950e0241e25627494b1dfec45f30f7c471756a0b841b292bb00510b79616011089440fc397bbede39a82fa91085c1ac27e919d9b9a86bda0d7710b6dcdfe3450581507b9568513d6e3a6a8990ac9e2e23f31f024303d6d0c07f60ed8aa30399161e66345800d58f35cba9ab9e4304a711a3038c3a5c97bc66ee87b4c83f23bae76b40e5df3560a55f4796ff8bb393bf0792cdf62e0f33876e3ec607e617a05acc0ec31914f687ed7bb09b99b38e6d688c266a07b70f4b48bf6c6a8a5836609fdf5a06fb3a055031e5d3880180ce527488a31c0df061de0798019ff89e3ff017eae07e58a70f419101c374f919abfb14c2636fa5751460288a13b67a8601e26a4765c5264dca5ff7318d6e58b733715efecc4d252fedf78e98a0c029f5e352523bdfb1a5358adf6dbeee1a6fb4b6abcc94cfcb4a11ffac27a6ba6ac06918a0b3993c23116236e359fdb56daf4bc4f51f653b043b0510c043b13229d0b929d2536d7ae9327c01d3159ed3ae3849187e4fded6c3b9bbd494a7b15ae78e51dfe1ac928516cd83fe2cea612c51c7b6e783d48ab8fcdb13bd24eb21b3e871ae2033a123668dfc6c091f6c1a2267196d7a7346871251770c037420d0a8e5c7995f405edc99720393f6e093e5dd98e692858edde27d6f1dc38e45720265ea3866a0d225b100c5ee1c2d9d1c82ac037f236437cefd1c94fffdca5e58c7113ce5fedc01da4eff3a11e3d262e37d53fc80dc9bca556c732b94d1c75b3a0bfd931a012412bc7503dda68ce4118e8d5c117bb0f512c21e6f67d655d064963d38907dfa4be1438afc2259731bee7172a3ee844f0aef624b2058be79c154fc95d63f8205b432536d7ae9327c01d3159ed3ae3849187e4fded6c3b9bbd494a7b15ae78e51dfe1ac928516cd83fe2cea612c51c7b6e783d48ab8fcdb13bd24eb21b3e871ae2033a123668dfc6c091f6c1a2267196d7a7346871251770c037420d0a8e5c7995f405edc99720393f6e093e5dd98e692858edde27d6f1dc38e45720265ea3866a0d225b100c5ee1c2d9d1c82ac037f236437cefd1c94fffdca5e58c7113ce5fedc01da4eff3a11e3d262e37d53fc80dc9bca556c732b94d1c75b3a0bfd931a012412bc7503dda68ce4118e8d5c117bb0f512c21e6f67d655d064963d38907dfa4be1438afc2259731bee7172a3ee844f0aef624b2058be79c154fc95d63f8205b431d8394ba2e4adcaeaef721748559b459a82e03b51fc3c9ede424d047bd7ed5f20c42ba95e57d85e81e62e43ece358248321ec92aa5f4b75b78640b9689961a6a29d7a4ab01bed336de2374a17e4b97338f6f18bb99d246b53105b90d6014862f048f2c43ec98418df9e7f3e6fcd964d4bcd802356279b7fff0f5824d2622a81622fd51b03acc233e68925827f0ef75cc95274a555a5a6f94cde32383b3c2300e1945226cd708e68d1e2209d7f1c11660f0b044e6400af76672c727c8f2c63f4c284898ae85facafdfae320ee674e0a7af23650af192b3280d49b71d5f31b72de198183a5524851440ba9092293be000c102bcf54e9e649aa7462137a51fb0ed1235b5f0d6a17565734c6c297adb20db96542cc678885f50ad8c48986405d7d6b047780b393c9324d25d3cf2c8399bf9cb8b67dbfc80f7d2ddb11c11af25663f733b78cf9b412db73acc90b9342beb7b17ffc913fc85ea41e2158f0352faeae6f1a2416346f6b199301dfede424ccd873dbda7c06df07bd43968350a9f0a292a838a4c69acff6501a72e569e9fc5ab4730cf015875903e1941d2fd884e26ca3e22f2e19262dea3889e7b527da34f118e3334fcd9c00de89c02fd3a30950473d82342d45e73c2d1dcd4d119abd78c0f4d6543997c790f46466421e1769f0163feb0bd2ba18c3d2e232b2ee6542873f0b29ce0d0134785894b5570f19830fe9c017310023df2f8c547f4cfd73353ae424c178bdfaaf5b8603db3df7d60ee7ba75383aaa0bc91b50f1a5fbfba8ff7a77ebcbbf8980375da512d27db7eb7a941fd43f3b1955aa3aa0dda9dbeda17afc46d5000de2114961f0105c8425ee297669b0903e03b4973c05198832b87e7c40d59330c8ef04d69a6e5a88de571e8ff23b9d4c1f6fa38efe1be20a6c320608b2c28cf397c06ed7fae85e181a485b699b97d3b3315dea9c405d30508123e005725128dcd8d0afea1dce0691ed318cfc89ac12c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010b77c1197c929d4b643081e0cab4c952eb0b5364911ba8091ed58e769f2063812de87aa31e0e4cbd34cf424a6f50f56d045c6e3af77c0b7536cb862629f468e736148bf59be93fa7ce84f85509152ef4ef98f277cb6787ab7c2cf2a05bdb2a912f05327bde01a18fe6a545b3f3de198de3a5a0049c66eaf0437f236d7744329209701ada6dadeef9fea0f1e4a1847f8b856aeeed22994a3ecc2184c4548054be3b2ce4bc3fc244dcd8855bf2ac4d0e391a0919afa4fc989cf4d88a06760e46ce012c32e9207b71229f1176a9e5cdc9dedc5e4a2bdf20b7b85cd27f3997f9ca280cbd09c44c1693a56bb962d67f6d672c4830836a3d2f0daddc24c7291f56ad8e0c69c22249e02ee86a0d1bd0acf01a6c3d6fc2f780f6b3494a46f9c33a6fb8d538fc8497281cea95a3bbef03b55f569d9c20e0f404e84557c395b4462f485d98068a1adabcee2c5e692b141914f9bf71852151e77172ebdb884581ee9f558ea136dae0aa2cd2207b2c1bfe8e4eb4e2cd907fe956d5caee7dd680038ae122884f3c01553a6bc249c6ff062bd90e96e0a7f774dc76a06515484488b812a6238ee313a961523582a5f682efec692b1c652428a3091dca425ae5e9a9efbb020bd883057d07783d74265ca6ba341ffae177d844bf5c1799805249c6544d01a2a28efa14eeacdc4d29e267bf0abe112abea2e7144e9838d7bf4e57ce8064106e3177812b841a0ae7462125ed92ede4756adaf8b85e7145c5ec1e77948f5be653b78569261627d0a17e0ef8ab6be82f257ea3bfd80ccc88d46f68451d34fe163f063ef2365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575109a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b00fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d430f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22334bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575109a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b00fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d430f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22334bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e196338b4638e14cfd60159eba3a4b37353ad4a5d4d9e176d1f2d58b8452241f02622cbee39cde689d2d8a050b771f7a2c3b1ba52e62b09b30c8e93c520f6ada108e7ffa7a6007171ca846ab5c221a555d35b9aacf9f95610076d0f3575dc681c0440361a1ec224d7d8d5ea28a83a7d57f8b8b730acf476f957ec35112a3fa61626bbfed82d1828baee8720e0a208b1b44b74061ef724dd8e083522442f783e5d197c72c4ccb103b028475e963f041edf0457e1b288d586454f04237818425ece04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a3b6eeac5e4cb11c87a80550d4b74dfa3eb8d23386b65868e6be730962988072412334659429b892780000594c3d097f40db55bed1a591791fa10890d107b17801d6a5055453de0b1f5ee004b172161a4672b9d1ed3c3d60b5965531316d1491429830108cb5a02fb92b96cc16107c2713d5b965caf18aaee85332c9caa0d94d41b3d9840014b56d5e06008e175546d429279f5dbdfade3229583d32a9821679a24c267bffeb4a92a1f9ff71e8aab92bd8fcca320299f15f903a95dc267de986832dc9e0425440fd13b49e72087bbfd0944c40d96f6411202ccae4631e46097ad1d04c802c73bb5682da8ae046269d75e6d067a1ee1225b7c287c4b176cf2a6de2a058eedbea0901751c3cb699500e5c6a9232dbca0bbf3319c64a76754fd1b9410107710165bc0e1593682c1358f9dd773b9f523e8d4a9a061632ed053cc2be01fe51a21e994ffe1e00a4dd29d4ffedb384f01abea3acf52bf2ea331a1a8f0dd0d4599ce45d427e2d631ad7a1bd61fe7e487b02b5406a1dc6f2d36652d5e606a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001128dfe18ca83ba51b71d807d3f39d29517c08d3d418123651e9b22f3394d42632baadf51c0967e82e22afe99af216599c49553ad3266faf11e98c33dbf9e89da36633eb9d8f2850bb7cd39fd0e0b5b2309609cb0375c39f2c3be3973aa99c5c500e14e414857349d4fc03288c2355c778bb6d16474b68187f5b8a64395596e9c0d49b78ad17be3cc78167be936911e28187892bd920715bc9a8c2aa616b7557a0b679b62d8dd9652581ab85f89ca2af488879b966664a1da62d7f923f398335e2781031c6d2f8d3f2e4738867f390aa037f5f6d8f566eca62dc6006f27337c5c20d5c721d5dd51fd1a17dd6e9b34eb86551e0eaf46eefefc255d6140093063cc2de77298419249ac825157b9714cd5a5719adc16a64ac75d69f8ea6726063f0b0e4b8f78e621c090866c82dcb40a0fbd9935f5d90968e9e6fe1d949ccf2fae730f35170bf7b1bcf30dbb02f2ae357e426937428db2652b1ba5cbb935811ce03c247d7fab66df23bb452507802b7a484d0c27e331576117a392e8977a39741d9d1a19e52e3ba71ceab3a59e5fb5387395b0114477ec4b1288513c8e4452e1057e3590d15e659dd2d2ce5079e2847ad2367006a11c7e5c5da5dcf61989554e61e8334803f84404b90ab676dfa456b284ed80587877bf072248690682481ade24b12a1047c055fb549955e70886683925272d662119c22c1135efff8899b67124e90e823a99584cfc1d14cd8b09d1e015502fb910fb5e9bd8f0bb04d689f19e973704410a6aa4538987ca1074bb7cd7c8fc4b693aad33f0284765747bca59c57a372bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1871b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a2075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d938a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c62824af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d1b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec42bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1871b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a2075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d938a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c62824af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d1b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec4376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec2ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b200905d69e666e3b2a0d6d173f142cef7678532cc741da81bb8790348d2c293b4d08283f8b0e460d52c58913fad78e1fc4cce8aa7552f29062c225dd92e0b0220d3f12e6d50c19d3afe7194b499f780b8254280277f27d10a690611b5074a3acfb248677f56dd7dd830c3d4eba7dc5a9491cd36a974b3715b2c93e973495bd87022cc2720a52f1c8b3e645a5a14ab153afd19f76d4391f99ebffdf81ecf51e775d11f76b80533490007d130518a294847325d3679c416406b0948885d8d5135f3c11d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec489012536bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d579249ee770786f97c5ae19a5a2efede4059fcfcc794a65d5959bef42d651d7ed922dcc61308ccdd0f07246c9274194c18a8befc9595e813ea573fa5d8eabafe9123f8accd0a2fe98f110745ccc315197fed62328601bd6def78157fd64826d63ca0907c64532b347c431682ff5de12a6dabb7611c175de7b7450d0d6b0e16f72d508cec664f5af7fc45282be822b3af8dbdfd6092bf1d01515c9a5f0ade3198e513731399b0a50803bad7d417dd4c5072442708fd0177ce405cf87403f1ce671b1179f18f4efb54da6f69117ab24cb085fe3e17331c405e0e6366678c7e80231511a9f5752226a546c94c74f74504497574c58734b471215c882ca0664875b02103e4b2492adf430a0e8a7a7195af426787038a07bb7fcfcc341310f29e13c28a53c6faa9f6dd6652a222e877eb1b1dde117cb58f0ae22b84f44b0b00ed111f57c0ef5d56097aacb5c3b09a0db63ef313f4a044b16b67dec81e6c650a89abf1ac71b8922ca8d5b7349006921bd3fa0c8999805bbbb209eaf81c6394ccfe6ced952000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013d95323c72ba34a7f1516223cf2cbf9109f1d9882d13d1c8d182552b65cdd17713bd2d46074d2c4ef0b7388c8e89bd3b1513427629edcea4f56ef30c2b01067d20756fca380009aa9c71630f3a9cd58b2d1b7636f8f629f01b22474dcd8d2296345ca7c49ac97f393e1c356c2be180db02941a2377d948bb499e87c79d2fc1680486fce4d180aa85666e1106bddc4a8dc6bec2bb764a211d25438c9ba9186a6d213a7f63819d0dc4af4a49c9b742416605e86549c3c182a847e0fa2f3a48483c03167d790bcf08a9e1f4fd88a83dabb3ffcd47287ae2d9e85c9793843933a7c80271ac5c3ae8f6a2c6a0a836257501a6305aca175e28b9d54bec63effaad7c4c14b4cc37ebd8f1e886f6b6ca23d96bc348707f917fe703606fba0b6341aeec97352d51f9d8788577206b2db2467dda613679306b3a6b4889d1c6591f170d4884001c45ea3de1326c146f30ccd93c6e707908733e8170d5279b03ee768a2214d5336c222f33bd6b9f84a2035f192a293dd63b30bd584482b65aee8b69d373d4e63c667559612466bb060a125a1e1b24510ddc47b9e6e9ba9cd4a5e4264a8069e813444133402089027bec05e81b98217b123b9dda83bdb591598cc3a75daefd7e17664c998bd5235fe71ebfb64def298a47abfcfbe4a54edd55ce62bf4d86d218394c36e878ceb56350cf5363179a4214ddef89720697b57ac1d87ad06fb278e60f6112a588513e482de5872e938c5f3cd186d3d747baa9d8edd41910ee5d99b41d7a349cc00528ceed5cbcd0d70d8d7ae1f809d31fcd4f3ebb1f5caf8e2aa61130b3f71e7257dbc15d48d1a1dd9b655b6e8ac51b3643da16287432b78486c4700f4c08e18da8243ea2b72e5e22649aa4b3bbd3e0d3091f0570b8fe357b793b913383d3983bb74ac6d26c18295408fac8c1e20e93f36c571bfebd6ace96a1d62d0c7c2c67c448b5392d93e7d6abf7053760648a6815e0a1ff9a6fc61e695e29d4019321f92a9475e21c1c78cea42ce5eb404fe4f39be9cf1d94fe5254f1292edd3e6cde06d56b8a1de3e387315bd31a14e1f6b4086d6329fe042ede980ed6d12407dfa9ddd4e64d6a8c8e5c0934e07d98418f78c20b910b93e8f79ba8b5cdea51382056222b19b2957371a3f6cb1f8267e0b72039fdbbed87b03595444a3215b030b3f71e7257dbc15d48d1a1dd9b655b6e8ac51b3643da16287432b78486c4700f4c08e18da8243ea2b72e5e22649aa4b3bbd3e0d3091f0570b8fe357b793b913383d3983bb74ac6d26c18295408fac8c1e20e93f36c571bfebd6ace96a1d62d0c7c2c67c448b5392d93e7d6abf7053760648a6815e0a1ff9a6fc61e695e29d4019321f92a9475e21c1c78cea42ce5eb404fe4f39be9cf1d94fe5254f1292edd3e6cde06d56b8a1de3e387315bd31a14e1f6b4086d6329fe042ede980ed6d12407dfa9ddd4e64d6a8c8e5c0934e07d98418f78c20b910b93e8f79ba8b5cdea51382056222b19b2957371a3f6cb1f8267e0b72039fdbbed87b03595444a3215b02260f666d094d1a6403be2dc098fb8f586eb4ad8166745ba69d9a8268d67ce9511fa42639b21ecaf1ed4e983217b62a6709fcf49a5422b064a6309c8e2c55766374baf5ec512737c4b30713f1f990aee557a2b2289954c4678ebb40fec4e4b6d03c88a181de5af86bd618c7ca6d2d1c6c23247c7fb1d7c35badde3a77e53e2751d0e91854489c12ebe7a3fe60a253723a77be6156df5a2af0472425de5c64eb8266251b54c6d2543d21425e07ec0aeda47502ad99e9fa2f46262cd952d3d00001b1353dbdcbacf05d7f8445e7cd1ac7ebae5ae3a8fe2a96f0215074076abd6803db11dddd7e8aad9d0c5bf60ddc65996faec969496034479f8b4e1d72b5460f73a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f21621663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac5056cb4030f4d5c2e8923e36a4a17988b6c366788df71a22da6be18e7fead30e202eff5c09eb16740fed884a0786270bd6ae9367ba870daf98c4d5f53a9b3eff526535a3a6a58badd7493abe4d6d73c1c6827bbfd729d60364f9505a38649e6012a3d338446f863ca23c98a0037b1cb92ef7481ea68ed51df93ec437c9ee6c6270fef7a203ab70c8cc8bef1e3b8603d5af1c670d79d1692a25e7f07f550285b3c301085dfc548f37337410e1c479fc2a5308028246c3666793aae28f7afd7a4c615c2fa3e41c489be4b82f6e4b3a7ce9cd1f313bf76ee9b065bf8679620a7f9510b3ebf5fb6480b30894371dba3a5fdbdd1b1b0fc6efc5b410a4aa2017f7ce63f25bc48f8eee95bee234994c721d6a872a35dbd73a770be9d5ced0c0702aa2e9100ceec7a2d04b43381f9bb53c95bc2ea0549de63bc0de1e33beed1f50f610ebf11856441a508a00582af0b0fd3035a2973748c851d8c298709e55cb2b32d70ce37dd43dc8a7697b1af2f9152ecdd753738a0c0deb79359e5b4c03d65a4cf912a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000118a1d774bbadc7bf8d9f0e165d163aed99726cb1358331bc8815881d59b176b93fbde4d33f577cdc0b16ba95f3434a5912cca018368a8ec9b54797370ef40d51305b5872e768d49cd49220c23bda2c885176edeedbfc6eeae61cab51d6e9e29e2226d6873f3b80f7185d9fe9cd05bee0655bee027642be7ae9ce0f391cedba723685831fdf4233a0933e958e82a551917cb48be6d071c13e350b31be3f455e96389ff51c70c83643a0fddca11a87ed996afc5ecd8a811b3f8df39c09f4f748811e15065dcb934d61f7b06022584d8408e48db721e384dd1192d47521103265a808b9b00d18ebfa6b368322cd56f2a1c67c869fa96f6944b513e13b56b5211fe233a6e1c0b9e66da1270f563c654d65a057b0da2174829fc5257f7c433d05a7271f2aed6cd8f21cbc3307fd8132a7b6747bf206d51ed211520a99e84aed5de61b24db2c65d195325bb5cf468e366d298bbb60a1cf92b6918be9af697ce7584b2e0bcea397edd04341d3f4016a69b6dee45bc16d7c2fad358db5481ec3b60e88a01309e232d549a3b01d6819ac09fe6d3de6a6cdee1d09515b3daf4d2361bdfae53ca0d459cbfb4c0d648dfe962fb4d88e397117a64d9e1ed2f0835aaa46716c812c7d9b011a7bbb6df1305efce1da6300288de82c9f63fa627bf6b0ca8bdaca941184a8badf6da9f43fe202682ad25c851a03fec9e33fc8b7c714440e51a6b9d22f726e00485085aafca1e17ae2026351e8b7e4dbc96498204880fbd895c7330330ca71e693307609dd3239aea0796102e3e72e78af35e0c408ef573a638f44d32f712d9402cd551e2139b3bf60d1b084583955d2599440b2edcc989065d09091108ed26bfd32aae1dec64c409f2e4f7bca0d4329afb8b868ab60985c9a2f6f702d35e3e40e02a996a62082bce4187295524ae227a3fe582bd977680afd12d2d212ca1c1bf1fd566959df7d431be78d6acffbb6d4654ea0efbfb5c8e202ed2d2f220d7374460d4ff13ea28db0747a3cea34a29fd21810cd8873cd756ff15e1e171df28c8bb9f2b00ec15d724f8b85c315eda3f929f13c2b93255fbb7d0ea1e1ea2a4341455e428fb6392cc47246633092c29fed2265ba117310a8e955b6d6967115bcbebaa1bd7049c6d33b8db99ccf6d5fa6abd9a392e7a888844797492969902f712d9402cd551e2139b3bf60d1b084583955d2599440b2edcc989065d09091108ed26bfd32aae1dec64c409f2e4f7bca0d4329afb8b868ab60985c9a2f6f702d35e3e40e02a996a62082bce4187295524ae227a3fe582bd977680afd12d2d212ca1c1bf1fd566959df7d431be78d6acffbb6d4654ea0efbfb5c8e202ed2d2f220d7374460d4ff13ea28db0747a3cea34a29fd21810cd8873cd756ff15e1e171df28c8bb9f2b00ec15d724f8b85c315eda3f929f13c2b93255fbb7d0ea1e1ea2a4341455e428fb6392cc47246633092c29fed2265ba117310a8e955b6d6967115bcbebaa1bd7049c6d33b8db99ccf6d5fa6abd9a392e7a888844797492969900c8e75409cfea4dee8d5ef0552162e0956ef2a6901d74c5dc30d8531f7fd750d3d2ad1c5a84311902048eec5362fc54d0d1d9ccb0b08409046fae480f0b3a5db3770ba7500d2a77b885a6e4b3ba0df84e485d504803ed74304deff67013e092d0c0a4154e40c2e2e1c318c762a15901802af7f7c0c739541a6229a3d1de7a7f3056c76fcd7d4129f8a9b55f4dd156d58979175a140dd320ee4503c47ce211f0217b29c747f0d5edefba72ec64e6b377f9a78b5c73523d49800dbcbdc49d9c3dd2086b2eafdf76640fc5f5320e2730039d2f047b90cdd543c39fe58c2e01f06f72b6cafcd3bc4e5b8c69471cd7bca04a4f717a6e20530fc461fa526b0175e2f410cf4744978dfa55935648e4fcab96ebd33e91eef20a37884bc15fd66c82c3f0325d748e65cffce8e1cf09924474a2e4fe7a8905061b1795b5a6792092ffcf4f9286e91a8dd16f2bdc7d4ddde5a8f60f56a1109c0a449f2deec8581e4eed1b9d5313585fe94eba91719e1ac1b6b3ad4462550ff1f579e997a7fff4e750a0377ed3c00d04a622eb3a58ecfa2af7248f2720918328a9083ce966a6ddd4106c481c936caece573b0c041c38584c49fbaaa9b34c015b0fb1e1c65453ce31bf164b23516298764052ee51771df098b2afec422216fa23a2ed2553b10064b37d6c78cd029d6789bfad11ae88e20f674d5013bde00d6f6c1da7aa3e08926e5b52938733205c3ce00d97d1a64123fd5eab543eb726b16e34b10698a1142f28e38a05158063d1b533c071eff0e8560d09d97642290eb1f8fd80ddd6558bb85ac014d91d9b317990e3dbc0fc78209ca77e1163d4065477d71da19857da3953a8a5ead4d215b0bd1f93494209e2a97df9131bff86d0a9b403201f239c54d46ecf9f76761980e282fcc7090cb02c07e296905f1ce2033d981c6d9a5e03a630399e961e8034b961bab26913029cfa7e78f010ae8eea050067c35e61d7c2143f17f33319a4cbcbc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000113f533382d76fe9b3561f550a2820d6b50b60112090a31b0c4c7edfd15b8cb8d1d35f25f681f99ed0de035703de30c4b3ec6ae01f963c9c10e79f7a494d50e2b27e9acd1b3ae6588fd64e4ce72182924f8b63457fed52132cc16482f4213441f0f01dc2f9bb6f9ff8bbf55a810e7e5819b48c9ab99b3350ced5343f46d8181e624f635a2ec36c51c5bd5e3227573210372cf12944ef65d0f1b83fc1b47ef6c03070a1da9181a8d43285cbbcf5a4f888f7af3280516e4a545171525ce2b733ceb28c1cf5079357d38b2c2c991a86ee2896b36754191b6371ca1d311c7c896a73f27a925a709c59403639980a9cca6ba1954bcc46d2380c2826a10b28446e98e860440e53adaefc23bf9dd9a02f9f90af9ab819a3ed2f69ae474a776fbd5942e6f254433e80a43b166c8a89190472037a0a51072426fe640a60fae7227b77cb33237339596e9a797af1a450559f61bdee1d36ed025e3e97e92bc3b236cfbf92e8e106b056b430ba665128aaf667fc5d1065ed16c79accbd5c5a03895496371f8e83db20668f952e9e38d8285012b019dff8fddbc6eaa5fb91f04f9e823ed8bc98a11f8b023a7f205d9f47393410eb1a7cc903a2925c047b70f2938bfa9baa39ddc005bab2d1781503d88aadfa3a51b3f656415aea6882a45317d349c4fa0872d1619fd4f554b51528c8cd385ba2527f90bc5b523faae5e9ec3c3b940b850348f7b0b92bfe621bc63e6289d47309bead6ba6f769f505f92323052b325b60128edc4045302f6c0089d4b109d325db5898772d2ceb92694f56cacfadfb32e3d540bd50fab3b030e399a910420f77a6d3e1cbec6da7633b99b0a852ac771612a40b90f3054c4fcf1c6656efbdf088592c1e3415b6c22c84fb1ee966e65bf8bd5bf46f20e58270f472004d514a4d56422368fb9bffdb60696ba3b7e3cb805f8d3439d4a31a7d8f0b8dffb2aeb5b2a9bddc970466248e2f57292bd9d5c752af42cbc62b707b8c34c63a0182967382af4ab10cea09dadf524e856305b966aecef2052127138473cb39c5fe7d698c7d50b54ef315f8498a3d720f6c8c002c243fddfaded90269bd07df22078cf0418d6c7575409231465c9b889aef1c9f016a0aba19a5c3519642f820ddf8730fbe72938a8abf6dd0de0cf437f9e0751a91690415e65a3cc0fab3b030e399a910420f77a6d3e1cbec6da7633b99b0a852ac771612a40b90f3054c4fcf1c6656efbdf088592c1e3415b6c22c84fb1ee966e65bf8bd5bf46f20e58270f472004d514a4d56422368fb9bffdb60696ba3b7e3cb805f8d3439d4a31a7d8f0b8dffb2aeb5b2a9bddc970466248e2f57292bd9d5c752af42cbc62b707b8c34c63a0182967382af4ab10cea09dadf524e856305b966aecef2052127138473cb39c5fe7d698c7d50b54ef315f8498a3d720f6c8c002c243fddfaded90269bd07df22078cf0418d6c7575409231465c9b889aef1c9f016a0aba19a5c3519642f820ddf8730fbe72938a8abf6dd0de0cf437f9e0751a91690415e65a3cc1aebe5602a8f012b625ab7294163b3f936535be6d1710961e568ba8e309576381b3b6514a5e576d3bf2166ce9c7de55051cce16420aa35ea7603aa0f35bf89c43f12e6d50c19d3afe7194b499f780b8254280277f27d10a690611b5074a3acfb248677f56dd7dd830c3d4eba7dc5a9491cd36a974b3715b2c93e973495bd8702258c009b6c55c415c7005a595075d8836dee62fd6135be0aa4bb5872dd3440980945e93b1ef5f36d66097a6cc3cf18416f1c5ec2134a28f2aabbc65a15f262101c9a6bb97f8f6f3f575a6c7fc20e4386c06e282861ac391597c30727344a1ca924abb6bbda4a380c454ce8c650abe4568cac2b5f366a1885062f52ed01840cc12ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec3836c24108ce66ce68404d1ca775365e938b88362d7b8c5dab04017d645d2b471301c8cb088b9f81d172eda54f92059b1d10fe721bea267d7d2dcca484684367260133cac9572b24b68bfd8d1f244084ba11d3994eabd82ebc908bfb5ac6dcd0003e22f5ec42aba934a14a76e5bc7166b3a64d009d6bad7e59eaefa93482ef3c2e91d739d2c3ff3fd46d719864a2c7f9e6418fc4a3103fc62c4b8d00095d7be5116e28c62d3c00c02b928e679b5d38063c050937663cb9556ce1a3ecf6a2841d1984cf160c6f1dde10f4aca42699b220ff6ada0742d766f37b74b02b7889bac42a0a1100612f180662e6479f055a7b5347338eb375ae8c455f4b47ef19edd7f71637c1c467bd91285f2ea15bd7887d5987d39f02a102294a862894bd881a1810229907a1f6704af57f5f6492a221aae432d0e4f672585f6714dc8e9b431c3e91376f0c8e0f6514af8b4d4995bfc17ba38e860e90a6fcce4f1b40277252aaed2e27c596073b8b3c49cdfbba3fd83124e41c46ca2a0270603f784facce53f7330b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010821e65648a53500bf2ec40bba31e894ca58655a21ae76a4a6af8e08941d437c3caa790d9253109319ad09e5bd3fc7987a5a16e8ebd00c6da5786acd1b4909b9235e1776a2e8ee485538e431f237c62500a52ea7738a098a632fbdf0d9f20157113fd9a1ad3b8144b6473c25825223426880fb306426cf718d56b4dc26e130ce21fa4d958be07291420dd9e3656ff39041f5b32656695af083a9400ce244c3581a13e34485f3ca9f542e03349bdb9eb87908ec2e0837e98565f7b8ad5d191249032fd37a8cb0f96f6a4e314c4779389e635e372144f153bf211f878e605f4f591a8fede0e9e755c9a8a6d4508354bf9a957a5de85616f0b134d6a1407ff7094d0b69f674aec68ab86c79b4cd2ce2d3b7e9a09080d34dd3da0db023182e6c8ac9055c9250c19bc8925a253f9ebb2a758dbf332e249e48a99b0cc72be4d59bd31d07dd054c59e538ba583e08e9c706624df4eb71b58b117222c3e9fe9989eab1890d6fa932128942557374f84207668cf8bf0da47ef59ef004d91d0501ac4d1d4733a948170556d9f6d04b01181b2c1c5474d1fd98a946597c71bc58ea7a484e481c016e759bee15c6b1ab172a1e872977ab45e7fbc16116b1bc764ee32de7191e2c0c198dfeef001c890f3b36cf445420e1062c7bf5f0b087330babcbc6a00e6f3b2a134aa8b96d3ba4eb3a270340372d5e02d9b55ac3573cecf2e13433eb80ac134eabd1e0baaf3c658584fa6efbdf0d0235e8d40b00a7bb6809c4f5deb64a9524cc7e10baaa9c6fa8e1cac401adfa45dab26a8c0c93d24b9073f2e07c1df12109a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22309a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a223305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe2622cbee39cde689d2d8a050b771f7a2c3b1ba52e62b09b30c8e93c520f6ada1196338b4638e14cfd60159eba3a4b37353ad4a5d4d9e176d1f2d58b8452241f00440361a1ec224d7d8d5ea28a83a7d57f8b8b730acf476f957ec35112a3fa61608e7ffa7a6007171ca846ab5c221a555d35b9aacf9f95610076d0f3575dc681c197c72c4ccb103b028475e963f041edf0457e1b288d586454f04237818425ece26bbfed82d1828baee8720e0a208b1b44b74061ef724dd8e083522442f783e5d022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c12334659429b892780000594c3d097f40db55bed1a591791fa10890d107b17803b6eeac5e4cb11c87a80550d4b74dfa3eb8d23386b65868e6be730962988072429830108cb5a02fb92b96cc16107c2713d5b965caf18aaee85332c9caa0d94d41d6a5055453de0b1f5ee004b172161a4672b9d1ed3c3d60b5965531316d1491424c267bffeb4a92a1f9ff71e8aab92bd8fcca320299f15f903a95dc267de98681b3d9840014b56d5e06008e175546d429279f5dbdfade3229583d32a9821679a1d04c802c73bb5682da8ae046269d75e6d067a1ee1225b7c287c4b176cf2a6de32dc9e0425440fd13b49e72087bbfd0944c40d96f6411202ccae4631e46097ad10107710165bc0e1593682c1358f9dd773b9f523e8d4a9a061632ed053cc2be02a058eedbea0901751c3cb699500e5c6a9232dbca0bbf3319c64a76754fd1b940d4599ce45d427e2d631ad7a1bd61fe7e487b02b5406a1dc6f2d36652d5e606a1fe51a21e994ffe1e00a4dd29d4ffedb384f01abea3acf52bf2ea331a1a8f0dd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012baadf51c0967e82e22afe99af216599c49553ad3266faf11e98c33dbf9e89da128dfe18ca83ba51b71d807d3f39d29517c08d3d418123651e9b22f3394d426300e14e414857349d4fc03288c2355c778bb6d16474b68187f5b8a64395596e9c36633eb9d8f2850bb7cd39fd0e0b5b2309609cb0375c39f2c3be3973aa99c5c50b679b62d8dd9652581ab85f89ca2af488879b966664a1da62d7f923f398335e0d49b78ad17be3cc78167be936911e28187892bd920715bc9a8c2aa616b7557a20d5c721d5dd51fd1a17dd6e9b34eb86551e0eaf46eefefc255d6140093063cc2781031c6d2f8d3f2e4738867f390aa037f5f6d8f566eca62dc6006f27337c5c0e4b8f78e621c090866c82dcb40a0fbd9935f5d90968e9e6fe1d949ccf2fae732de77298419249ac825157b9714cd5a5719adc16a64ac75d69f8ea6726063f0b247d7fab66df23bb452507802b7a484d0c27e331576117a392e8977a39741d9d0f35170bf7b1bcf30dbb02f2ae357e426937428db2652b1ba5cbb935811ce03c3590d15e659dd2d2ce5079e2847ad2367006a11c7e5c5da5dcf61989554e61e81a19e52e3ba71ceab3a59e5fb5387395b0114477ec4b1288513c8e4452e1057e2a1047c055fb549955e70886683925272d662119c22c1135efff8899b67124e9334803f84404b90ab676dfa456b284ed80587877bf072248690682481ade24b104410a6aa4538987ca1074bb7cd7c8fc4b693aad33f0284765747bca59c57a370e823a99584cfc1d14cd8b09d1e015502fb910fb5e9bd8f0bb04d689f19e97372f712d9402cd551e2139b3bf60d1b084583955d2599440b2edcc989065d09091108ed26bfd32aae1dec64c409f2e4f7bca0d4329afb8b868ab60985c9a2f6f702d35e3e40e02a996a62082bce4187295524ae227a3fe582bd977680afd12d2d212ca1c1bf1fd566959df7d431be78d6acffbb6d4654ea0efbfb5c8e202ed2d2f220d7374460d4ff13ea28db0747a3cea34a29fd21810cd8873cd756ff15e1e171df28c8bb9f2b00ec15d724f8b85c315eda3f929f13c2b93255fbb7d0ea1e1ea2a4341455e428fb6392cc47246633092c29fed2265ba117310a8e955b6d6967115bcbebaa1bd7049c6d33b8db99ccf6d5fa6abd9a392e7a888844797492969902f712d9402cd551e2139b3bf60d1b084583955d2599440b2edcc989065d09091108ed26bfd32aae1dec64c409f2e4f7bca0d4329afb8b868ab60985c9a2f6f702d35e3e40e02a996a62082bce4187295524ae227a3fe582bd977680afd12d2d212ca1c1bf1fd566959df7d431be78d6acffbb6d4654ea0efbfb5c8e202ed2d2f220d7374460d4ff13ea28db0747a3cea34a29fd21810cd8873cd756ff15e1e171df28c8bb9f2b00ec15d724f8b85c315eda3f929f13c2b93255fbb7d0ea1e1ea2a4341455e428fb6392cc47246633092c29fed2265ba117310a8e955b6d6967115bcbebaa1bd7049c6d33b8db99ccf6d5fa6abd9a392e7a888844797492969900c8e75409cfea4dee8d5ef0552162e0956ef2a6901d74c5dc30d8531f7fd750d3d2ad1c5a84311902048eec5362fc54d0d1d9ccb0b08409046fae480f0b3a5db3770ba7500d2a77b885a6e4b3ba0df84e485d504803ed74304deff67013e092d0c0a4154e40c2e2e1c318c762a15901802af7f7c0c739541a6229a3d1de7a7f3056c76fcd7d4129f8a9b55f4dd156d58979175a140dd320ee4503c47ce211f0217b29c747f0d5edefba72ec64e6b377f9a78b5c73523d49800dbcbdc49d9c3dd2086b2eafdf76640fc5f5320e2730039d2f047b90cdd543c39fe58c2e01f06f72b6cafcd3bc4e5b8c69471cd7bca04a4f717a6e20530fc461fa526b0175e2f410cf4744978dfa55935648e4fcab96ebd33e91eef20a37884bc15fd66c82c3f0325d748e65cffce8e1cf09924474a2e4fe7a8905061b1795b5a6792092ffcf4f9286e91a8dd16f2bdc7d4ddde5a8f60f56a1109c0a449f2deec8581e4eed1b9d5313585fe94eba91719e1ac1b6b3ad4462550ff1f579e997a7fff4e750a0377ed3c00d04a622eb3a58ecfa2af7248f2720918328a9083ce966a6ddd4106c481c936caece573b0c041c38584c49fbaaa9b34c015b0fb1e1c65453ce31bf164b23516298764052ee51771df098b2afec422216fa23a2ed2553b10064b37d6c78cd029d6789bfad11ae88e20f674d5013bde00d6f6c1da7aa3e08926e5b52938733205c3ce00d97d1a64123fd5eab543eb726b16e34b10698a1142f28e38a05158063d1b533c071eff0e8560d09d97642290eb1f8fd80ddd6558bb85ac014d91d9b317990e3dbc0fc78209ca77e1163d4065477d71da19857da3953a8a5ead4d215b0bd1f93494209e2a97df9131bff86d0a9b403201f239c54d46ecf9f76761980e282fcc7090cb02c07e296905f1ce2033d981c6d9a5e03a630399e961e8034b961bab26913029cfa7e78f010ae8eea050067c35e61d7c2143f17f33319a4cbcbc0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000113f533382d76fe9b3561f550a2820d6b50b60112090a31b0c4c7edfd15b8cb8d1d35f25f681f99ed0de035703de30c4b3ec6ae01f963c9c10e79f7a494d50e2b27e9acd1b3ae6588fd64e4ce72182924f8b63457fed52132cc16482f4213441f0f01dc2f9bb6f9ff8bbf55a810e7e5819b48c9ab99b3350ced5343f46d8181e624f635a2ec36c51c5bd5e3227573210372cf12944ef65d0f1b83fc1b47ef6c03070a1da9181a8d43285cbbcf5a4f888f7af3280516e4a545171525ce2b733ceb28c1cf5079357d38b2c2c991a86ee2896b36754191b6371ca1d311c7c896a73f27a925a709c59403639980a9cca6ba1954bcc46d2380c2826a10b28446e98e860440e53adaefc23bf9dd9a02f9f90af9ab819a3ed2f69ae474a776fbd5942e6f254433e80a43b166c8a89190472037a0a51072426fe640a60fae7227b77cb33237339596e9a797af1a450559f61bdee1d36ed025e3e97e92bc3b236cfbf92e8e106b056b430ba665128aaf667fc5d1065ed16c79accbd5c5a03895496371f8e83db20668f952e9e38d8285012b019dff8fddbc6eaa5fb91f04f9e823ed8bc98a11f8b023a7f205d9f47393410eb1a7cc903a2925c047b70f2938bfa9baa39ddc005bab2d1781503d88aadfa3a51b3f656415aea6882a45317d349c4fa0872d1619fd4f554b51528c8cd385ba2527f90bc5b523faae5e9ec3c3b940b850348f7b0b92bfe621bc63e6289d47309bead6ba6f769f505f92323052b325b60128edc4045302f6c0089d4b109d325db5898772d2ceb92694f56cacfadfb32e3d540bd525f3aeef0d6c759a265348b68fe00ca73c238dcc57c917f2bb931c54fb666f361a0c5110f2938a65d9acb749701ff358e6230b2fb183e128dd9a1498049990cb3dc26aab431e4c02bfa06b90cf603f43e8249305a453858677852bcee9002c0c023d9554bce1b3fd405f946f309fc0bc3a2205f664f9739521a8051e16ffd3f534cc15584f977c0dbe2219d40ce13c52ff9c7b2c106db731f0e517568d00dc380b33eaa7b06883f241dde62bf31ec3ad22aa1dcff8df41e9a848199672ff23c907fc6ab98df56c44b6aa812440662d9e74f403ec2cf0af8b4fc4b0fcc1044d1438039546720a93bb49557edbbf99d261ad52950fdc5c499049687ff03efbb2ed25f3aeef0d6c759a265348b68fe00ca73c238dcc57c917f2bb931c54fb666f361a0c5110f2938a65d9acb749701ff358e6230b2fb183e128dd9a1498049990cb3dc26aab431e4c02bfa06b90cf603f43e8249305a453858677852bcee9002c0c023d9554bce1b3fd405f946f309fc0bc3a2205f664f9739521a8051e16ffd3f534cc15584f977c0dbe2219d40ce13c52ff9c7b2c106db731f0e517568d00dc380b33eaa7b06883f241dde62bf31ec3ad22aa1dcff8df41e9a848199672ff23c907fc6ab98df56c44b6aa812440662d9e74f403ec2cf0af8b4fc4b0fcc1044d1438039546720a93bb49557edbbf99d261ad52950fdc5c499049687ff03efbb2ed1f58081e26b71aa87374afb67ad656bae9ece3c89aa1828ad674a7ce51fc08032bf93842bf2d60223b1a98080fb866156c1f2eaba5c51d58b80b9996a54f20522c797c664f8e13589e5ead5f295b5206dee5742872158b36e1ef11847e977ecb092d97c34e376b63e44ee2fdb8edc57dd52d967f44e9ff11340a69a0945aacef03f684053292e56a23cc9aa6cf6b481f2ec93b24a323cd8de4386d69771a4f5c1fc6a3ef7a30a81709d7aa355992354fd93d1e3d53a2b055a2af3bfc2322aee71498bf37af7cfc63f445cf665c6222ca0d8e409dd2ef75ba85c41d973a7f3e993b6083e83a3101c8fe49cbe38339cea235a1335c2cfe1fdcbe3c2fb529bb46c707b0d5bcc9ec3b3519e1c387b96fd2b5b394f2a19894a21b9af910b00e9f70833756d5b8b269cb43b4e1645cd9b858f5a91fbb368bec1f0b8c14c58ce7233b7227469200a42a10d013c8970bb8dc072a21c18c0acb8810d68f2b9ba0038cab1f06cf81ca6ad3fdf4972e1d738dd85ec054785bab7d8bdbe07aefc38d83be276c342e7b7b89bad1feee2ca2ea5bce573e7bbada0705e2e47579f6a8872f6c79350ad92ff9f29b3479e09684fa3759d46ce0f9d3d11e9ddcb1ad172db5c65632c13cd7a5c2d75106bb394b3e8d8215fe48f4e1b7cc8343be85870f13e748493dc403285a3d28aef944c6b4c1727dea01b72d64e12f86093a96121e1d05b7b6c23e3c42b40afeb3ef1b6347c6729acd4a3cd495aaff1fab8fd9ef72aaabb4fef4bc38d0214fdeb7cb0264a1beaac45742ace43942bb44745fb43c2ed9544e57758501310d9836b76a993fd88bb47941a22b1b9788c69bd173b54793c3a69a3a98b728eb136d1ac9064386623e9ce16452889f356655e997236ab1145594127f140a0b54ede1bc427e685f2cab8ac8d6cabe185d621cbc4fec47b7a6fbaf8c228ac30b1dd1a0925bd1563a2880d1888b871bf6e755059c93d08c19a9f9bfbc5d21d700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001096e09d6a35890b3be549b8ce5c2fe75a88b801a1ef4328942fcdde04b95780d3fd5e81e3807316035da31b00e88c11550b10eecb8fb677531ad57ec13b80e003e8f7ad7e2bac994e673c431708d80841ac5deecb220b96ed495bd0a8163431708670622ea16e0e5b1245b0bbe73f41e3eaac492406213f648049ea1407707f935c4769c45aca470c8f1d1f9fcae5e8966f8a397c105fe249e53df09bde9b2e906780ce9b0372c2843eed12a9aba6b586266029926bf5aa3f5bd29df99743f451994556b339db76bba262455fee1b2a24444ae6f7fcc097294c55ebb1f5fd1ed087d99eb58bde72d5ac2888b922619cb67ea394925a286b4654811f6f8be02a033395ccb3a13bae335c166703be7f8be64c029dc600bef01cae91934310c1aea3e5f6f62a7333fb00d57dcba20f3f891f3bf8d8eb80957b223aa6cbc3d1df6272f440677be34675ea8ae9755e2cb79944e66a44d817c4d319db0451cc298be480b8febc38644711da3adffd6dd9f295df025b28080691fb30682cff5efbddf8d0650dbe34f5a079da6bf4da5a381dc75c230c7fb63271417142515f5ea4cdc850959daa951eae81fdb36ca9c963169563ba0849cfe3362fb80e060eabde28ae03c9f0aeaacb37e7bfe048965dad816a4edced2beee44dba57fb5cba79356552d00cdf09d509f7fad7ef2a1725382ff2d40b35b95c7e1418e7e7a6a81a1cfdf39261c01e7a93e52ce908173b508d24a43d9fd56af759facb8cfba9f19cccfbdb0027c14ed7faf62ec306439d8b0844c1e455e7b88931edfa6930eb9288e6e39c5166befb5171f47394b6710b5cbf1e0a257d568300d169b1ede64dfad66ceb1702994104ae8e0b8c6b498ef4a340e1f5dca7130cbfc365dfcbac8513f99314e91301bae89739c641e7903538cfbb9632b94e46ff438240e7ebecb2d760209772f0fe451768c639be186fcac7304469cd48d622907d128ea9cda620376fdf688d2308a68af420df4985d10a1c0ea9eefd981a264d0fccd5d26ee7050870a2f53e80f759750bdf20b67a2ef5e3f15611026a0a4342b0c7f9bf4aabce065f5d0ac1932b40b6c4a45c6f9d15328c4951aaf3f21582d20d41be66fdca9ffdc32eca3850d4bf493b5ba39062eacd73b6ae550c100ee6bdb353112abbc833110cd135c7c166befb5171f47394b6710b5cbf1e0a257d568300d169b1ede64dfad66ceb1702994104ae8e0b8c6b498ef4a340e1f5dca7130cbfc365dfcbac8513f99314e91301bae89739c641e7903538cfbb9632b94e46ff438240e7ebecb2d760209772f0fe451768c639be186fcac7304469cd48d622907d128ea9cda620376fdf688d2308a68af420df4985d10a1c0ea9eefd981a264d0fccd5d26ee7050870a2f53e80f759750bdf20b67a2ef5e3f15611026a0a4342b0c7f9bf4aabce065f5d0ac1932b40b6c4a45c6f9d15328c4951aaf3f21582d20d41be66fdca9ffdc32eca3850d4bf493b5ba39062eacd73b6ae550c100ee6bdb353112abbc833110cd135c7c1663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f216232e0e89af62d4b5e0a44b1fdae3b06376c9123be386de90ef339f6846a620c8509ae342a78dbce2f652ce83bc8df13cae92ffd4acd96c384d84b5b62829aa4c6374baf5ec512737c4b30713f1f990aee557a2b2289954c4678ebb40fec4e4b6d03c88a181de5af86bd618c7ca6d2d1c6c23247c7fb1d7c35badde3a77e53e275325f6801ed604899667b4ebb69d9690e57da2a8bdf801b1adb26780d848343d034dc26445dfc3d86f0c6ad853b8e90dc59275b991680e24ef59731a1d97c84bd0ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b22e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d57145a40e4099c34ab09aab12529be4211daaf783bee3df5d9e430c580d2149a242a2adbcd6a52d4ca8f75b25d259380a1098272a199bd1f2a1d40b13cab90e27536bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db13d9536a1756b57977f4cfff193accd1791336c49366844ba2d645ce68c53b622c26ac95e8a94a86880b3000e6c5332ea933623775e674cff656eb1e973ac4a0397f861bf30d14bc54bd10d550d6206d46fe59f94c85e2fdf4358f440c824b1a3964dcfc56c5aa7cffcebb8cd19e578dadf06b424364b3d74f499983307f128c35bd596c9b2ae909556bf04b32a63034bc8cd39fea8c460bed7ccef9520576250bb136dc421e7dc750855cf951fde0c09436e335d09bda551392f0d290e5af2930a19cdda9ef82a7008969622aa4f09a04654cafaafafa1fa28d11065ed6d1132cf159565af759e9b439f0b428958e5879faccecb3d8b95c4d92fab4a1cd9cf5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011432ca149237c258feaac194541ef39aa19ca3e5e875017a66b834c6c5caedb91e0743e56e71a36aff9f28654eeb8030d520a300414a7b5fa227d474e0035dab0dfd5efdc3f8e4c1c7f4a7cd2fdbfd0fb899e6527da664b7da4f11868ff913c33f78b0e02d9ec870de11a5217b4ff7b6b751b0d18c1504dbc32aa5eef465d1e5007f809e0872f824323290eddbf2e69e0444b475945f12f11ae1864235c0eac21b76b645d8f3b10946854658f785b108867d3b2533f44a20070cd5a8280e6c8c0e391ff2a1c7d23bfb397ea6f844315d46daefc4f03cd0c7d62fb2af7a60e0b52893620c5cd5e7adb3a0a12063bee363d7a3228a40a231612d684442d50b68ef3098508783009f3ad14f288d95a6e2d5112cfc26044296f9587ba6ce5b328ff009ee9ba9ef19816a6cb05f56974a6b200627c767b118f8764281d9427ce0cafb1904997016071d3ef5667a80c85cc7cc7fcadb4f3dc500dc9a2b16a8954ad3c8284485e6f59286f30371e61fc3fe34f835fd3bcd65af2e168acdfd48472cf4d534c68c8b10c49778bd73a31430c0de90d98892d6b78005ed8da54872e2837f661ae42a0190805844c482752e08f2673b468f52bdb3276a40a08d5f5ac5abe80039f8a32ea04060f7a60d7a5141140d7e384032298f71b53946365b6d1e7c384c1fdc5a1406be3b0a54a901eec489d4689df1ecabc7c114505106741f070a71651e55758d9bf57e390210647f4d206b1cade564ab62c3dba85fbd5b5eb82aa8782be1d91cc2806821444c578a9e45c73eaef4afeef24cd672b1466f7e98de85b50145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a6034065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f0139a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e1001fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b05202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f071720e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea0145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a6034065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f0139a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e1001fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b05202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f071720e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea31870947f95bdea9c3c192cb3bbf7effe29d0fb7bf7284c1d7e0d66acf118ab01040c9277dc8c6351fd039b70656118046072e337c872d37814fdf794ba768ca23395a400a684d94c6d78fbb9be15c3f755ec66343bd022f90dd2d33a0d5bb6d0acb6a404135136d1257fddd30a618cd231dcdf8bb21b7ee6788bc2a9fab0c8a20aff83835a5b4ccf729e3b4b253bd1f7d7324fa0ce86a7dfa7275830f1bf16423a3be95ea9f18d2ba1bdc9e20d742dd3d63c827f198de024754695b2fac8ef30f2d75830767eebf3d2ec7ab5e591790e76cd7fa3992cd0c5af72eed276f9b0d3aea6a4f9e6c98e1713851647dc952661f58279d7f9aa9ecb65c91af23d535b8328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f0e9b28b272c02d11c9386c8f3a096b2194e24ee296dde17998ff0afab4195ecc07b3c99b61e73f8c0eddc62acc9a1fce8d7809e368c4ace8b061ea854a2e59952b3f9c77fc3bd3c17566dd79285f24c0ec915bdd0f6a6b45c99c5e3b9018b9e624f3cc984102265dcdd7c86bc903d5b2b9219ccfd1a413f5b054954914ad8aae0d9535253cea21b1c3288e55a6ff883ef8e2c72bf8af28661332775036c2b547326acadac315de4e3cd771aa590077c12963d1d0109dd0b585fab99cc93d4abb2005f4f59c3c928ec3767307fe1673ed725e13a3f64d55664f83472ae6a2b5ae1a09575dfd31302f217a0aefe63ac1162caabdb0fca6292ec2bb36193d0fbdf53a117c06a995f4c30f7e58ac44e9bfa87a75d8350549f5048bcefd2e3904b99b158bc49e459984cd6f93b80394eed78f7e41df8d9670222d974ee5282991e1c0063cc7959032a8cf40b3e9d66afd820dfc06cd07462e7b298d0d20b5d59a95d43f24f74750d0897d09fcb8274e5dc71d0f1b936ad253290524ca09cf6495536c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013cae966af414e5331e7a6afbfa56f6b27efa5df2817773abda389025fa7c1a54171265f133abe509df8b4fd9ef75f5bcb580cc5ea675ab30b5874443f92c268501e58b56bfe4b07572ef008901538385ca314b57132a46121a16f9a20e3638f939f2c8bc0861192a274e64cb37fb116afd9d07ff2326a1c9a6dbb939976f11a73f2a53a1b478af01987c8f5ffd40a21ea1002247644ec903fcbe62b2903c365d040fb2dbbc62fdcac560c2f48607557952fc0de71863393ed1d6f094c1ae4f542882d96a870870d2020cd7e46c6eb71f48da99c1234bfcfe06a29cb917b66a5d26375ab7577515c6cfc8cfe88c5e068509f744352e2da3c4d7cea192a4ec44ef3c668ab7fd5a3223d9ac025aad7aeb59466e383ba603e9b9828149ba55e9c9880bab4cefead8e3a6546d7e464987b7bf4b2d0cd13e40f8a47f041ecbdef9b6ab1602976ab66fed4103f081d0af2f2a5ae7d52ccd62affe6f82fe4272b232c6113ffa60694f62a30f0525e7e590aab06ee9d4b20b10470e01e5489873e7e913892fdb96c62d0e3bdb6edb6dd7e50d145c78bb99626bf9d840470cec4ad111e3951fcf1fc67436b3e2131aaa6a54a6316fa75c4c31fead97ede725bb82d71d83d12cfefca78c25e514ee8e8d5724d3d8dbae7d272ac7bd9adbab233cbd6e80514e1b4b6c77e416f53afc5ad5d412e3eb86769b1f450fee43cbe72c6e30ca9a167328a3cc98b18385adca63ed83e0a8986ee326fe2109e0de8d0b2ebae40a1ef4103679a97f40636cf5742883dd43ae9a37da822b1773cc23ef8acbdef6100a67333aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c2c762708227d8d9d5db25342038160352c32ee7a89896b63b01e4d1acff3949914accce313f5db11d06b277e45099796f2a6b9e284bbd31bd5b1ef642a2dc7641319406bfd32611570a209b85b38e49dd7727b21099400a3c3bf232a29135eb21ffaa18c3bc1139049500403dfb0a68045256159afd6c550275472c9aa6b8c620168feb3ec5487731f5a78c05dbf2354012ffa5efe36b383af6c5d5787f595aa2368a8d9f0df500d29c787f59bee3d31a7284c876cd8b378363c8b9485c4beaf3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c082559f2d36f6e8b95cede951b4246eff9bad95367b060e060c585f8f4936c1929cb941a2f109d6af605b466d71c4c622649f3c64cc21faf9dab0468e4ca230009a39f8854fb6f435560a9d83f0a321687ecf5e3a45fa3de41751ac1b91b6b4701bdab451ade8278151aa000b6fbc7d54b1e479e66bad359e401066eba7086723e2d0dd94fea04434aae0d7c82fb70584a262f2c6419964783e8f30d08fd100c01d2f226b015fbbcb551f2837d048fa7d82069cfa53362d415443ddff702eff63c7b0f2af395ef9c3e7c5b2d86c2e0446c353379649fcb3de211a6d48dff70920dba471319cd6c8df99741293f7f59cdcc086e13965a56ac88e9c7b6f617e0513823171b6cceea4c6b397fbd2fac3cb257a690c13a3179c5ea8e50d996db174f3d4c3743bd7fef78b8474d1f56403d39ef10f74a953d58889dd7ba652d9aa226398409e28ccdc2d7e9ada0a51a4e665440c1e30a0ac2d7803f1d083d08d92521138cfe690622fccbf1a5144046b8057ef6343f2e51fb274c481c8a4ebd5f00a200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001344b9a77d753303645bb081baa70f16dcfb273f4e18f6826746332914c66b56d121925e11377999ac089e5509b9fae1e0da5d9cbf3582eefdd0f4eb3d8f67a162248dea16134e278f39ce391e6c7cbe8f9327735ffc5733abf2a31194b14f2ae2c64e9c35d4e58ca619d3b27ce853328c1e79455296a1edc6a314ee5945b5f1f36056b42c3fb5e90c2c1c280ce9ea7e1d826156cf84d5d15fa9a59e36bd1f8fb18098b58015f2ed09fc40aa58bb341d4ee6ae7923e1a3a38f471433bd98d8b1b194e0f76b211b44676abebb8ff7c34c303ce76dcdaec7712bd4699eef57a59200a0ee8b9d53acd341976d3696fb63cf1a6da2eb7b03338c452d484ca41a4f437010bb189b7abb2c1e08df8e8cf4d9a478a59546d4f4b35416cb6ffdf8af1142f23b5c0efd4ff0bd61a2094db3a90bb538ebe6724ae0144769e02100ed1653c5c0c71b917bc21d56080243e775ad3fabc8e29b9a7f3e6b67478a268e0456c14e32fd85e6375eb3f423bf8eea1b8f93476ee07ef50403135fd216f31beacd45f852ee930f00fae34f3614637d24ccf7ca651d09208d2312adad932d1cafb4b496e20c1859c9196baca20afe06fece3c925ce47538b9876455354ffd602ace41df815340ded9229034636021ff9172b181ba12f7d80e057ed96a05a53c10a90a1613726c4b3a89dc19e07ef9761b96e90ccb7c49c1480c0431cb5e2f5a2206eba831043bfeaf8891514de36def343ae15ac530d00748f805d418a7d8c2e8a9873cd37acf332e665f2900acc5ae66d661e0538aa6807ccf32511dad7585d7828fefd09423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c72488509423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c7248850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daf6eaf5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c832f25e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3c7b171c9fdff60000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001a2fa8a6252351a23c57839ced0c21237b8e32aa9312b18475b8748a1f1197f7257c914c8a32180f5abc6614acca277b409a268fb564571b618d8f21b70e0f843808080e525765ce76aa1d5b1a8780f35491d4403fb233c128e7d60c6caf7821115d30c7848f774ea165704dabf30e7779d7c549ec9cd580b1013a0a6ec9262422d722fad327c81f46409c8d58f31c1347beafeec1d9118c80ef4f47502050130a4c69165e99d98d2b7b13f23b4cf429d32b8b40ff3bc1cf8655a0d1924242d31d8fe342f713e880545448e3221f7c573c44046a194ff41d1e93c8f7e9212f6b06863210e8c92a4fe7013817682622a919dc5cf89f8ac34229f20c94e170c82a1765bbe1b9f3dc08c1021f06af4091b5a895828ac48c9a1605c72f913bd6a2f93bfd2f99cfb2bb01a8818c740aa5e04afa4a1a5bbf766e9cc1fd61f28e44c93f14057060f3deea36eae1e208e3e0b1f9658d93c174925bb17ba283ccdfd3b5ff27796db55b4c49c1793b7bf7fa6436670a29fe0096d39ea0302ae9189f341ade283148d745f8a5fc08ba9c4a3f4f0f6515ede793d3d3d18dfe07beb508fb4c880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001a677e3364ef4e0c9908bb612bb8583a9294989fb02864d43959efd6baeed170000b675caa1c2a8b9e5faec4e19c9e63f39eea051ab8e51c9d2571638445dc4b3ff498a355e3d57461a0513b1e63619c2ea7aef6ee9413fefc07bf897bba23b6003904cf528cd4ba17de69d8680f17f3c21a9219859c798f11bb36f1955d4d773fc6fb30ad732b45e821962797f0e80c602c06e283b07f8c8771f9fb6aa2b28a011d180c9cc027a27758113a084b77c2ca84da7f9c0e5fcb58a812b7ead283533ee2e7f3633fd85d88a7eec5f7b4883d57c1be7c6d3e995040851e35152d7cae0591783f0fc0c62c54b85622297956cdf498447e0c47def8bb485d97961c909f3a6e87c0f03f39d3ab47a9ddd686a9322dae547dfd051a22dde4d35569e36f62000b675caa1c2a8b9e5faec4e19c9e63f39eea051ab8e51c9d2571638445dc4b3ff498a355e3d57461a0513b1e63619c2ea7aef6ee9413fefc07bf897bba23b6003904cf528cd4ba17de69d8680f17f3c21a9219859c798f11bb36f1955d4d773fc6fb30ad732b45e821962797f0e80c602c06e283b07f8c8771f9fb6aa2b28a011d180c9cc027a27758113a084b77c2ca84da7f9c0e5fcb58a812b7ead283533ee2e7f3633fd85d88a7eec5f7b4883d57c1be7c6d3e995040851e35152d7cae0591783f0fc0c62c54b85622297956cdf498447e0c47def8bb485d97961c909f3a6e87c0f03f39d3ab47a9ddd686a9322dae547dfd051a22dde4d35569e36f6236bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d57911d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec489012509bbdf8fe995ac146b6973388bc2ed59adf49fb0089ffd8ad272064a6e75e15712aac1a59c78a2b8a13ff2c356ff5ddb259d2538cc45ce530648a90a8728eaaf0905d69e666e3b2a0d6d173f142cef7678532cc741da81bb8790348d2c293b4d08283f8b0e460d52c58913fad78e1fc4cce8aa7552f29062c225dd92e0b0220d2539ce1ab71bf03b306a3c65323082b11c9d2833d618dd553afeba6647d312751c0c545aa2bdb7106c3d18e0e089a52c307d2b53c1fd744562f39fadedfb16f52dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a2d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd60818bd7372880ed9f4866288b3a4faf8aa3496432b0a99467ec41ef0a0cce8472caeb7807c1dead5d1c662b55553c90de9bc150c9e29a6158b6474c7766da90f3f881a04691b3abed6a4ee7d6e267383a04b7313dff32acaa8364ed8f23649331b7eb1b03b2495bedad51ec49fb3026e615d58d5d5589a3e786dc083b44e142e124bbfd985642e97737691abd7fc07b7e76f8b895524aaae324bfae7421b9d5d2db440267a9bd1688c896e542803f8483ad70d72b4284e6d66e13605bde462a53c8943c0a39158f51e40680a874299163668bbd926f545d823fec0430e33f3fa1ecdca360517b11deb43d1b505cb984c70874c0706c8dc87f32ebe838006452a072eb60535474aa2f2f13e18ecf985b3f33229a46462339af7b2cbcae7898d992c2b8b5b8fe96d1aac380ba1f2cb0f5bf1410e49dc5a16bf18fbcf26d6d039a13b7c55d0dcdc793010395c95d0383e62f330a66e10312e1eb3ea52b6a85e438b0f74b0e5df43d8781959bec0dea5d93324a8746805e56f0326503eb5df812511000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011873dee48cfd8b70817d00adffbdc1b4b8827295e52c3577a70caf0d4600731e38ad415ec9c18fe54e4e4168eb6ea05cf06ad84343dfeafd40250d8f04e8157633638286688e8bf987736c296aaa897fbf3ebce653eb3fea9249e53aaa954269204f2fe0bc18ff967acfb7c5dfa16db67669c0984474bf263b6cf15cd9b4503f1f11d7466863e359b28f06abfebabe4252920c8b41028da3cd0d206f002c9ddb35d49b37add4b6b989754f74646a4985f2a2eaa7a4e69404892f7d71411252640980e634299d6811d0b8d8ec82813f4f77dafe5739bbbdfabcff1fd76cddb7a9331624ca7773667c52ab8f37f209572238e5ab1956e01da8d75d61cbb1432b332178f2aeb9bbe3a50389c048a7ed740d43c0d467b3489555a0ceb2e35c9a78f434fbbfe1fa7f08d0130e267b191065a0d3d43b57fe1add6b4293b5ced99d01c513af320705bebd6d354b9340bf9411e15c8d2578d5045720f2dd181aec53258634fdc36476b89cfc19544e611924662e5999319d28979b158296c95fba8a201e047caa7ebc1a2aefa605e46a57207cc16af48487b14a546fc4eb5ddba8fd35390b2e0c0de52ac4cddbf033d7e292c90a92dcc810b01022a2d01a1904ff32322c193409c8de3ac84a395423df4ecd699de9f0cacbc8c3f116e63d7406f22a320f281d11304e8f73d908f9afe360b96000ad83eaee1ee0e8401dfacb13c510d8f110149ce710066a3b27e340ae613a1641c740e23880a2bf029e25e97567b33a423f9ac29e6ed7b983a51a753fc3319d27dab8f1c6701dba542171124f06374de009423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c72488509423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c7248850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000daf6eaf5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c832f25e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab3c7b171c9fdff60000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001a2fa8a6252351a23c57839ced0c21237b8e32aa9312b18475b8748a1f1197f7257c914c8a32180f5abc6614acca277b409a268fb564571b618d8f21b70e0f843808080e525765ce76aa1d5b1a8780f35491d4403fb233c128e7d60c6caf7821115d30c7848f774ea165704dabf30e7779d7c549ec9cd580b1013a0a6ec9262422d722fad327c81f46409c8d58f31c1347beafeec1d9118c80ef4f47502050130a4c69165e99d98d2b7b13f23b4cf429d32b8b40ff3bc1cf8655a0d1924242d31d8fe342f713e880545448e3221f7c573c44046a194ff41d1e93c8f7e9212f6b06863210e8c92a4fe7013817682622a919dc5cf89f8ac34229f20c94e170c82a1765bbe1b9f3dc08c1021f06af4091b5a895828ac48c9a1605c72f913bd6a2f93bfd2f99cfb2bb01a8818c740aa5e04afa4a1a5bbf766e9cc1fd61f28e44c93f14057060f3deea36eae1e208e3e0b1f9658d93c174925bb17ba283ccdfd3b5ff27796db55b4c49c1793b7bf7fa6436670a29fe0096d39ea0302ae9189f341ade283148d745f8a5fc08ba9c4a3f4f0f6515ede793d3d3d18dfe07beb508fb4c880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001a677e3364ef4e0c9908bb612bb8583a9294989fb02864d43959efd6baeed17005583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee83aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a06130191191ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a882546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d579059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a63a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b1c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e23ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c305583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee83aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a06130191191ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a882546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d579059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a63a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b1c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e23ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c3299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f1002214accce313f5db11d06b277e45099796f2a6b9e284bbd31bd5b1ef642a2dc7642c762708227d8d9d5db25342038160352c32ee7a89896b63b01e4d1acff394991ffaa18c3bc1139049500403dfb0a68045256159afd6c550275472c9aa6b8c621319406bfd32611570a209b85b38e49dd7727b21099400a3c3bf232a29135eb22368a8d9f0df500d29c787f59bee3d31a7284c876cd8b378363c8b9485c4beaf0168feb3ec5487731f5a78c05dbf2354012ffa5efe36b383af6c5d5787f595aa0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d29cb941a2f109d6af605b466d71c4c622649f3c64cc21faf9dab0468e4ca2300082559f2d36f6e8b95cede951b4246eff9bad95367b060e060c585f8f4936c1901bdab451ade8278151aa000b6fbc7d54b1e479e66bad359e401066eba70867209a39f8854fb6f435560a9d83f0a321687ecf5e3a45fa3de41751ac1b91b6b4701d2f226b015fbbcb551f2837d048fa7d82069cfa53362d415443ddff702eff63e2d0dd94fea04434aae0d7c82fb70584a262f2c6419964783e8f30d08fd100c0dba471319cd6c8df99741293f7f59cdcc086e13965a56ac88e9c7b6f617e0513c7b0f2af395ef9c3e7c5b2d86c2e0446c353379649fcb3de211a6d48dff70923d4c3743bd7fef78b8474d1f56403d39ef10f74a953d58889dd7ba652d9aa2263823171b6cceea4c6b397fbd2fac3cb257a690c13a3179c5ea8e50d996db174f138cfe690622fccbf1a5144046b8057ef6343f2e51fb274c481c8a4ebd5f00a2398409e28ccdc2d7e9ada0a51a4e665440c1e30a0ac2d7803f1d083d08d9252100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001121925e11377999ac089e5509b9fae1e0da5d9cbf3582eefdd0f4eb3d8f67a16344b9a77d753303645bb081baa70f16dcfb273f4e18f6826746332914c66b56d2c64e9c35d4e58ca619d3b27ce853328c1e79455296a1edc6a314ee5945b5f1f2248dea16134e278f39ce391e6c7cbe8f9327735ffc5733abf2a31194b14f2ae18098b58015f2ed09fc40aa58bb341d4ee6ae7923e1a3a38f471433bd98d8b1b36056b42c3fb5e90c2c1c280ce9ea7e1d826156cf84d5d15fa9a59e36bd1f8fb0a0ee8b9d53acd341976d3696fb63cf1a6da2eb7b03338c452d484ca41a4f437194e0f76b211b44676abebb8ff7c34c303ce76dcdaec7712bd4699eef57a592023b5c0efd4ff0bd61a2094db3a90bb538ebe6724ae0144769e02100ed1653c5c010bb189b7abb2c1e08df8e8cf4d9a478a59546d4f4b35416cb6ffdf8af1142f2fd85e6375eb3f423bf8eea1b8f93476ee07ef50403135fd216f31beacd45f850c71b917bc21d56080243e775ad3fabc8e29b9a7f3e6b67478a268e0456c14e320c1859c9196baca20afe06fece3c925ce47538b9876455354ffd602ace41df82ee930f00fae34f3614637d24ccf7ca651d09208d2312adad932d1cafb4b496e3726c4b3a89dc19e07ef9761b96e90ccb7c49c1480c0431cb5e2f5a2206eba8315340ded9229034636021ff9172b181ba12f7d80e057ed96a05a53c10a90a16137acf332e665f2900acc5ae66d661e0538aa6807ccf32511dad7585d7828fefd1043bfeaf8891514de36def343ae15ac530d00748f805d418a7d8c2e8a9873cd00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf3cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da71320fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf236305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf3cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da71320fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf236305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb00d80c97a5ca3f42024809990a5e4078724776135e9285751f43bb068f1f5ed12ffd27410ccdcfe329ef02841829f506167fb6b8093ab9645e6cf50c6372453916333d62a0235abdc8aff9d607499a1e81a3e021fbd93c3fb572b8bbc389927d0b6a22da128b55bb8dfa6731f74ce472dd044fad974689e3e68088fc4ae05e101cc94009fbcf270de723f746d07e2efeda68937cf1a113d256df65a62e859a50398d5c01094690bd7c4a420e40d6cd7c8f80a8f22ccab459621871fe149f70ae2c90606dff9c6e5d2ff22a933995a954c97da98b194a326c1a8f273a5008353339d13b98e36f0b13bd8722d5716e70a207c38d8b94109f1b930653e4794587353ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b33b5c1466aee6177ac9a3af51be25f604d971dc66d40fdfb5bbf53058f725923b395d2767a380efd7432028fb549887e55415c934c0891b6dfa3c96803d95883828f4b605ba1266003507fc90ee5825692e5b42c6aee13766c476bd2aad570eb40498b5e4e0a6da6148169649f08926872ec2929668cbb5d3543fb2e451ad5cb93a5f08ea13c945767c77470a18da536945d1b094d5ad24e7bdcde78448295c0205a0f715ec36ba898388b8f5e725ac96dc74e867339fd433db5f4968b7d6a40003b95939f5eca67061dc7426f0275fd0df0b349ae7491187b1824f9546ffcc150278af4fb0c09b9bc0eb1e009df4b459e060e0ee115ec2b73c5a990dee811871089ba4369b421a55ddc7ba1ae7085af661e27efe87c2fb52f5030aeb227c090919a45305944254278b46eccd473ad4f6cb49d4e19b1b8dcd4e0286ff65033c350d291d9de58546a4373abb740353db34837ec7a9cf68b610bf6122dff562e1073f6d58f62d0ac08fe9eb8ca3270d63a720d67e2507c4792e77866f651bd02b6700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001163731e263a0614cf8cfba6ebf4cb68c64959f82332e161afd09621fc03b065101d98ff1b5e9780e66f8bb654b4deb10857085b94d89f5ed846818b5b2cb27a330aad9d10376bc950c9a125de6de46970723c27faca31a6c2fce020754186b7519277ca14ee34b9a95bb7f5a1da03dc3ffcf70602e49bb653e7446d5fb0abdb72ef7a6f4641b11ca35043d8e0aa778cecd69ea967a4b06448ccdb527809043a7005243cb90cc0cc23f3e4d57d072495000c8b611a29fd5d4e5fd62169d298feb32226a142640a9723129047bddb687e384494addd49d3dfd58817639fa6836f12f80e997f09ce4e7937c2ffc588b5fac719094e6a5bcd91e82f40f55eae7f2e104a54a178b98a004ce9836d66d0c63308c347a8ffc263c257cc45c4010271e98226ae18951659cafa4eba6b43db1b3aa25240bdb90638305303390bff74ea8060382b5fe6e2e045b8072331825dcff057341c5cde7a331a93bb876739e12d0d613c77f40cc24cad69cc4ae27129e5feb36a299598f80b5b307ee6c930e5e396622c3d25fec67dbad50866b37f6ba278d4902b439afd970f737c98b033c6067ca2ce6e42cb4dd1410316fad0a42f91e3ed715315abacdff36f6691cca6bceff9c3dc61ba6a2de53c1ceaebe655ff1ba32ea0a30bc9248d3667b998ca1cb50928d2d8c88754d425e5893ad51d3abe8aa458e40383519584884131a1de7167366d73cc717cc7e0ca228affd114792d31c92261671b05171c1266282414fdf31d2ff0b781d1a8c66588f4423f220ca612aef1797a8e8accadee15f5958bc4e5ffac63fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be9004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b890189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac478384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d04926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb83fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be9004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b890189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac478384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d04926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb80b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c3feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d2b13cd6d52b7a32dda0c03c427c28bba72b3b40b5a8595a3c029cfe2dfe9b15a21d8509a7454e82c6c01ee7f9d53e927b541a171fea9969f871cfc034c9763952c762708227d8d9d5db25342038160352c32ee7a89896b63b01e4d1acff3949914accce313f5db11d06b277e45099796f2a6b9e284bbd31bd5b1ef642a2dc7641e6a494cbf36abaf8b8a6a8de1165276533eb64441a7a8777834e338713e31483cc40f2563957cd02b5394bc253c4d0448f634cd65e2e2c3d47c95b581077a6214840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c8363f8f67741fafeeb2ce545cfa5eba44d303a5699b931d6c0773dd7044f906f34b34a76e6f4fb6eea219bb2b8224ba3e1737cc1b3c3492986bfd06622dd49953c60975a0e3a836f1d21b415fe01c2eb2874f85853d65345cc5824a08686ff7f36c1e3cf64720e291183435640328b4deaafa0719bb491bf1f643536c5aeffb05f13647199615cd17780a6803a4faed06170d5780e72674c5c32674deba0a522b3709b8e669ea32e887f597fc5b0512f9e914ef1814e2d8335872b85232f5add4cb285e555ab6d8ba93203502102492bd86d49972fc501592cb843a378f3aa52e542bc3108ffd0d085b814b44b3f0faf2047e4804348f99908d3cd663004bc9825b1f3163f13d85737fb86ee16339926dd220b1bd2cdd108e5400ea0618b9b872220e59681b126b5f69214be5e4f3ded147e020a5ac1cd868938d2e1cbdc2eefc9534bc4cad822d4f93dcf65f1272607b7fc1e2598364447fe8bc3209a1e85a280a35bff9de5fcaa2264c0038dc5840593451ea5f384bf256ea8cbfc33330ea5289000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012c990d111143ec5ae8b2fd5cfe95a081940e16508c8b08a4d563a88c6555cbd22af8a5358325f3aacbedcf1b3d72cd810b38f0b3c4095dba50b5b5c2c73008821d91a69904c876a50ade9cebd9c271934f6aea57cedd8c8466350b723b9f276828cacfcda714b4a19f22d244e50a13869a62ef1b931e14debca3e860da7fb66b233bc045d6e7a928423d94e101cd89c2faf5544a1c736b7643967f2827064bc52df3e2b49727d395209d3437a0aaeeda3cb20eb72a3b5dd5e8112c6f4876e38611fd8b270a22c422ee8a8d683261a29a7e500e234b662775cf3e60a165f5972214e5b4b39072d2559dd4b922f67a7405fb2a448eedee5cd9f05ac3ae8818451f27b3d19b0b60fed53f9e42bce73564005381d319d0b1ccc4e590a4ed5debb3782283975c0a2074975e5debf3eaddd50ff2300b755c1a9cebb9eadef53bf5ae18304004473fc82c196f9eeffd1e12d32f461f5e5ca5a5d7b03fd28dfba4f164103a96b78c9605bc0f9c4ca9045c565a3ce2df7f60913a93bae4cec3c8c7b225800286122f059cb238b2bf5f38ba2a0a318ba7488aefe23358a5f152c6ec78827e0d24a45d9ba83d84cf36b9097f893b9a722a040d717843b9ef142419bbb6e4e72b3d348fc27029a1f88e4122f8e229e7d56620ee4c8317ab25b08ca05680a5552b7b3d7dcf3fc0df36f08d47b2bb3bb8cc58db29f4fc1c9a4a707c1d70fa0eb61336f2f7431eccb58cebb26efbc3726c769202c009ba0d97cbaf60354b63adb9193e8c99add4c3351515044e2ca243a9c8f4a6f14d18bc47bac7391b641d42033036b4f581afee8fdf581f5a12018200388315cef6b547c023c21149500f418d0fc94b0a7e50117020a7e0a5edfe7dffe9c3832d1297b15b756b1fa3aff0be74311188cb886fa8cf5cb89cc25a078a00b3bba216b5a37b6de742c3a7904c47be0eee773477905730a347633da5f875ff6e8af6e553a97dadb1ea6d456fb3b8433557abf9aa2e4c0ccf9b0fcbc225b2031bd65f7d704a7dd2b8c63f7ed17d66b30aa8540655d1b3f33064f0343dda4dfd0670397e99027b48e066f16e2e82994e0ab65be052e77c400e074efacabc7a0f021579830c4090af372a79c61773017b3549a41fad1883bff1f8b105354385f120311f78fd0c686c6202b726e88cfe863036b4f581afee8fdf581f5a12018200388315cef6b547c023c21149500f418d0fc94b0a7e50117020a7e0a5edfe7dffe9c3832d1297b15b756b1fa3aff0be74311188cb886fa8cf5cb89cc25a078a00b3bba216b5a37b6de742c3a7904c47be0eee773477905730a347633da5f875ff6e8af6e553a97dadb1ea6d456fb3b8433557abf9aa2e4c0ccf9b0fcbc225b2031bd65f7d704a7dd2b8c63f7ed17d66b30aa8540655d1b3f33064f0343dda4dfd0670397e99027b48e066f16e2e82994e0ab65be052e77c400e074efacabc7a0f021579830c4090af372a79c61773017b3549a41fad1883bff1f8b105354385f120311f78fd0c686c6202b726e88cfe8614840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c836350c1986d63d0d76252cd4dcc0096252448ef72e67695958363393bbcb800d6809d0f28df34f89daacb5b062f76ba5e1e124926c9ceb5a5f7656919f3a5e969e21d8509a7454e82c6c01ee7f9d53e927b541a171fea9969f871cfc034c9763952b13cd6d52b7a32dda0c03c427c28bba72b3b40b5a8595a3c029cfe2dfe9b15a17dcd04956966bc87edd991719d6b3a0ba18caa2e4cd1d4bae3ffb819913f9ef0cf4d744869d6bb7ca44679edfd6ace4ee3f7c43864249b03768ed6a74a65a6a17f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e36851d7d884ac33e3c6d15fde25d80bea7e85b54836569bb5cceeb6776c52af91789f475753530cb37be57062b43ebef7ca00989dac207ebd71aec10afdd45f2366fd69bf31349f99c35c37b1c54b8ec1ae6392344ecda412b8bb3f63a32c175230086247a469bcb4270f361e752adaddcad693d24550e9e2dd444b25ffba12e34f1910671874941dca3f837f88ccdc58cb41c93083d97434adc1f2d75aac2470b0e6ef98e78b6be235c07c80773323a95927c69010f61d84e5111bf8a553dbb17af240798a5008543bfe0b9679e54225743718e9bb9930fea943816910cef970e994204c31d5f373bd9181cc0343b4e845c2fd879814d14cadf7f06b8d5a2f319bac5d70ad5f06ea847e72e97e2f7f92decd8ccea10fe0953aacb5a049ed02f0fe999ea78989dbb38d7cb5bb19f2520bcc75b371ca868d817301801e58dc1e03135cb9b5ec77506e1a03afc26ac2031ab00af04290a74ee96b1feaac8230b652fbf036e6b1dc06dcd150c7524c199a86531ae64a74c947e8a2383fba9dd9b8700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001272d21c93420d5f46428b4873508974aa0885880ffc205269e7b45224dc0f6283352e5072b72af703226597d122d7e3ed912fd5c29630e7bebff2540aabfbc7b35dec7ecb47f0dd7db45e5f19949a82a750e49db2741e41f2211301e948baa87063033d8aa11c9dd48e391c216536a01a2305942eb8740f306d4d91a22cc8a6819f1f2a66a406350310babdc82d8b81d622489434df8445b45164e6b375981d505833d6bacadce3db72f55c62f55a0f50c1a9d983797931243b45a7e1e2eac9427058410d289a478ef2b2797136e228d61e14b9715ac60f927a80fa092a18f573920b616e693037d64d5841f1e8bc3b79d66fb4f2682c7a18f08437f9ad06f7a3ec557971b5ebb941ca4de50712c07df3f8cfd70b81c2f38b720cd81f0c7ad5928fc3170dc301f12682efb78b45788db51dff36cf912497b935fdb5555376dd52d4c63a6a89a3d999bd58ecd725a0db24ad6427f472a209c0317a85fdf554dfa2ac4cca44f3ba7a63abdbb3c785332bcfffbcca03ed6f29b1d34bf0e4ef4354f2ea2f3f7c5860af81a6fc5e864f1460fec0156d027c29d096abaa2021d56d32b2107c294dbbee4c567865259d4c1ffbc34168ec442e4d324c37805cb8ad8943b1a88f9b8568304a23418262de497712874cbb06e680171e55faa41d5409c1cd727df4264fee92b01e032e312d1dfc91aa6b438ba51735ca196c074b33b9586203af4271eaf61619994d793c93f7791eabda217ca0a238eedffccfdd9410e6e7004e5af2b8bf3062c5d8a3809a489c7203588a718a1bde21c52f2d13584eee29e3ff498a355e3d57461a0513b1e63619c2ea7aef6ee9413fefc07bf897bba23b6000b675caa1c2a8b9e5faec4e19c9e63f39eea051ab8e51c9d2571638445dc4b3fc6fb30ad732b45e821962797f0e80c602c06e283b07f8c8771f9fb6aa2b28a003904cf528cd4ba17de69d8680f17f3c21a9219859c798f11bb36f1955d4d773ee2e7f3633fd85d88a7eec5f7b4883d57c1be7c6d3e995040851e35152d7cae011d180c9cc027a27758113a084b77c2ca84da7f9c0e5fcb58a812b7ead283533a6e87c0f03f39d3ab47a9ddd686a9322dae547dfd051a22dde4d35569e36f620591783f0fc0c62c54b85622297956cdf498447e0c47def8bb485d97961c909f3ff498a355e3d57461a0513b1e63619c2ea7aef6ee9413fefc07bf897bba23b6000b675caa1c2a8b9e5faec4e19c9e63f39eea051ab8e51c9d2571638445dc4b3fc6fb30ad732b45e821962797f0e80c602c06e283b07f8c8771f9fb6aa2b28a003904cf528cd4ba17de69d8680f17f3c21a9219859c798f11bb36f1955d4d773ee2e7f3633fd85d88a7eec5f7b4883d57c1be7c6d3e995040851e35152d7cae011d180c9cc027a27758113a084b77c2ca84da7f9c0e5fcb58a812b7ead283533a6e87c0f03f39d3ab47a9ddd686a9322dae547dfd051a22dde4d35569e36f620591783f0fc0c62c54b85622297956cdf498447e0c47def8bb485d97961c909f11d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec489012536bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d57912aac1a59c78a2b8a13ff2c356ff5ddb259d2538cc45ce530648a90a8728eaaf09bbdf8fe995ac146b6973388bc2ed59adf49fb0089ffd8ad272064a6e75e15708283f8b0e460d52c58913fad78e1fc4cce8aa7552f29062c225dd92e0b0220d0905d69e666e3b2a0d6d173f142cef7678532cc741da81bb8790348d2c293b4d1c0c545aa2bdb7106c3d18e0e089a52c307d2b53c1fd744562f39fadedfb16f52539ce1ab71bf03b306a3c65323082b11c9d2833d618dd553afeba6647d312752d3c5a2ae3b70c27632e5cd1962a6bcbb8dbe78a8ace801c75ea53f1b01aabd62dca7189c088c4564e4bb07077af0a2648cce45f2a7d44ecaab9bb6af669b18a2caeb7807c1dead5d1c662b55553c90de9bc150c9e29a6158b6474c7766da90f0818bd7372880ed9f4866288b3a4faf8aa3496432b0a99467ec41ef0a0cce8471b7eb1b03b2495bedad51ec49fb3026e615d58d5d5589a3e786dc083b44e142e3f881a04691b3abed6a4ee7d6e267383a04b7313dff32acaa8364ed8f23649332db440267a9bd1688c896e542803f8483ad70d72b4284e6d66e13605bde462a5124bbfd985642e97737691abd7fc07b7e76f8b895524aaae324bfae7421b9d5d1ecdca360517b11deb43d1b505cb984c70874c0706c8dc87f32ebe838006452a3c8943c0a39158f51e40680a874299163668bbd926f545d823fec0430e33f3fa2c2b8b5b8fe96d1aac380ba1f2cb0f5bf1410e49dc5a16bf18fbcf26d6d039a1072eb60535474aa2f2f13e18ecf985b3f33229a46462339af7b2cbcae7898d990f74b0e5df43d8781959bec0dea5d93324a8746805e56f0326503eb5df8125113b7c55d0dcdc793010395c95d0383e62f330a66e10312e1eb3ea52b6a85e438b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000138ad415ec9c18fe54e4e4168eb6ea05cf06ad84343dfeafd40250d8f04e815761873dee48cfd8b70817d00adffbdc1b4b8827295e52c3577a70caf0d4600731e204f2fe0bc18ff967acfb7c5dfa16db67669c0984474bf263b6cf15cd9b4503f33638286688e8bf987736c296aaa897fbf3ebce653eb3fea9249e53aaa95426935d49b37add4b6b989754f74646a4985f2a2eaa7a4e69404892f7d71411252641f11d7466863e359b28f06abfebabe4252920c8b41028da3cd0d206f002c9ddb331624ca7773667c52ab8f37f209572238e5ab1956e01da8d75d61cbb1432b330980e634299d6811d0b8d8ec82813f4f77dafe5739bbbdfabcff1fd76cddb7a934fbbfe1fa7f08d0130e267b191065a0d3d43b57fe1add6b4293b5ced99d01c52178f2aeb9bbe3a50389c048a7ed740d43c0d467b3489555a0ceb2e35c9a78f434fdc36476b89cfc19544e611924662e5999319d28979b158296c95fba8a201e13af320705bebd6d354b9340bf9411e15c8d2578d5045720f2dd181aec5325860b2e0c0de52ac4cddbf033d7e292c90a92dcc810b01022a2d01a1904ff32322c047caa7ebc1a2aefa605e46a57207cc16af48487b14a546fc4eb5ddba8fd3539281d11304e8f73d908f9afe360b96000ad83eaee1ee0e8401dfacb13c510d8f1193409c8de3ac84a395423df4ecd699de9f0cacbc8c3f116e63d7406f22a320f3f9ac29e6ed7b983a51a753fc3319d27dab8f1c6701dba542171124f06374de010149ce710066a3b27e340ae613a1641c740e23880a2bf029e25e97567b33a4224fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a6021551b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a707121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a1ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec20f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f0463930c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c824fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a6021551b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a707121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a1ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec20f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f0463930c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c817f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e1ffaa18c3bc1139049500403dfb0a68045256159afd6c550275472c9aa6b8c621319406bfd32611570a209b85b38e49dd7727b21099400a3c3bf232a29135eb209d0f28df34f89daacb5b062f76ba5e1e124926c9ceb5a5f7656919f3a5e969e350c1986d63d0d76252cd4dcc0096252448ef72e67695958363393bbcb800d681d14c0bd1af0dd795dc65f20deb61a24d29b51f0237079f79c9c23abdc96c8583e1997b507db4b065917a029279c8555c9999921841a1143b015554215aee35209e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c34e4bffb46072d0886c1b4271f2e319c53d84677f770f003368061821a4847f816e46a214a91f5a2912ec35c5d5d4b79d789ffa45cc5f6dc24235ed2181770fc08134748d8710762979b1062406fde0c96064ace3630870592558b307fee102d2b6879fe81419e32cfcc2b0480ff303bbca2014ac309b579f4be78fa1264a2221e7dbf71074564ec7d20d7e13c753d78d3cb4c4f21a72d7b4c088103648c5e022182408ef8ba9b1382df281ec38ac2874e7b4cace7a5cba04d24afe99b73a20021810827b881382fa38336b463fdbb493f6b7d10e52182be3e8fe3fcced72ae419dfd5a32a7348fb034fed5a985fcba8e2f02cba502e3c4844a51f7fb7b72bfb100493bc57946c399e195bf4e34d92349c5cda8dadf5c3a3fa910f29dd35e332235cf216aabd58ee838b5d5c1fd297abba7f6a79a72cf0b2e8caa319bfb354f6170b6807f02ae0e609779920124e5fad52aad2512ae5a87b0955b401a7855b3f10727a16d10738474389d29a769ca5f1fdc0f23e264f5602aec7d9af239d3d7b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010a8c5e16f11be1aaf0bb54894087215a2886947714fb26bcdfb258eba14163e10fabbf07ce7538aca453c17e5199822c7c7bc1381aacd0136ec558b3baf763551b655d8f6263ec503517f9dccfed5f6cbbb27cc985da1af4616b83d1b9f0f3f02b52cc2c5dbd90ae8f8ed5a52c8e1793c920a5083e23bb6f07c81d9dcd5ce87a227f9cb0b2b7d2032e9f6197bf196c8bfb24ec7b599a8d3c8aa14a0f2026b07829c84dfec82c16b10ad951f0132ea26e5e8ef0dc0feac9d246a95b5eee3bc0ab1fb314d47f28efd85c6c0db0eb44678fb7b1fb36a5249ac2b98cda615f899ae23a34494f9ce152d5a7de06f6dad7f3ef6786fd04cba702b6ad4699f05f8aad5722ca6115f5f49c3634e239b687a38ee7dd2869053f8d8ca70cae4ce2450505f60502a4bd769f005711d7e3cb0923b3df654a749be153dc25788ef1a91315d8e80f937caf006f229348a407e881138d19c3b8d964472b2c81b82dcdd35aa525c3204abc35e0316397e362f41dfe745f70bca599c8da042e545bde1bbf931109731c0317b4efe7daa63b91770089aebd1e3561b73106c001f3d71632a36346473f33a79ed7b15d15174664a141b00488adeab62e6363e76e3a571c752a44e920271a3083818a528ec374d9f8811f1b7f1333d0d539b149a085cdb13f51dd90237135382b8920f95f55e0915979cd896ed934bce489fbc10b29e0b84a7ab89c6a0d0f2b7d2a92cc0d796a948feacf6a18945d52ed0ee834882c2985b71e7c0ba6440c298cac9683d206cecfbf049d45be11bfc1f7a2c000a8366eeb323e9d322dd73f8f1cc60c6da729d26301123de65ed9c73bfb511bf223ac1d15074e708ac5ae0070e339f39258d62d9cfeedc219a1265b0a9daaed5ad56f7c18299e8f753a533dcb8fde3e2443d11bef055b357fda405b1184a56686cdee2cb460d432b5dc6202347021c1dbbc2ee410faa4ca8025bfc7351456a2c62b2d6c78d018cd4a239f34f9cf5736b553158bab1ac80b7f43413e3d334adb6e21387ad12070fd8d4de60b0630a8c94aacea7454e537f480bcbee40965b12dded7e31e5c107c0272b21b08e10cb4118a9f6bba5785e8397c5045ae179c8623f2c1ac0160de80f3c2857a371ef34bee75609445a87a17c683afba742efc75e55a376f97cc526c0c3d7a873f8f1cc60c6da729d26301123de65ed9c73bfb511bf223ac1d15074e708ac5ae0070e339f39258d62d9cfeedc219a1265b0a9daaed5ad56f7c18299e8f753a533dcb8fde3e2443d11bef055b357fda405b1184a56686cdee2cb460d432b5dc6202347021c1dbbc2ee410faa4ca8025bfc7351456a2c62b2d6c78d018cd4a239f34f9cf5736b553158bab1ac80b7f43413e3d334adb6e21387ad12070fd8d4de60b0630a8c94aacea7454e537f480bcbee40965b12dded7e31e5c107c0272b21b08e10cb4118a9f6bba5785e8397c5045ae179c8623f2c1ac0160de80f3c2857a371ef34bee75609445a87a17c683afba742efc75e55a376f97cc526c0c3d7a870000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000127b506f940454ee116cd3e673a6fbd5e9b594e942d0b9e3d34ba603a4ea7272f1950ed6469e3d0559a6d82bcbac5c65cb3c5d645cfe9368bb2cdffe0cb74de5a37f75c16263a61e91d42ea8571474d853ff66720e6755b85f4502d35e3c7ecb12607cfd5cbe0b5989f87e48dd4e786a84fc879167792598b09c19ca0292ee2b40b3618d4492e0cc466bef6d5fa197b6b7e927087007cbe57864a0c7c2e4209313954d86d20e575f6774640b9234960999b488e0f56a151ee2412f73556d26af22c798b91a8fba19c4c33fe0122817c88430c766587e3bfef9bd4188adac71d4c2c4f3844c63f2befb1874043e24560fed279166505a0eb482d279ab5e7c4b55d3c7415c5a40827ce02ebc98c1693c910f2e02d2ff24ca032d8a8f1f37f574af510af8a9dc687a1f46442416e13853bb47a4a088adc0a2cd4c5ce224844ca31f50e080b5e097551ff105fc1efd56ffb220778fd76aa6e1b0e6e639227c3a848b801a2ab2e97cf9dbe7196565264434aa9f6584f21b6ec5c0426a1e4b8e4871ead2d630b34b554215e425c4a4b695d3481ca06f5c34edf956de58d92d70dcff267000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002d630b34b554215e425c4a4b695d3481ca06f5c34edf956de58d92d70dcff2670a3c6892c6708b8cc90155c7c0c8ec5cc902a5371b9647667e34fc70bac3ed0c35c3976d398f747336feaa383f3713a35943f3c4edb6b1b51af8347c453c12f5332e0adde032b9bfed06ace6c3ec9dcfed0d3a1389ef65007708ee33a5d3a13c0cd1f5221fcd464012f953193c13623035395ee87f5d941b222442b95a2c5ec53fe6365560fda0bfa1216081d39f150f3a6e576d95c60daf87a5143b3d2226290019c9aa9f025f405ede9f7e2c60eaf0e7d8418e7386eb6c11881cb1c2ddd9d83f7f0faae4f423be25a6e289221b694b9b0d5133c7aa5fff4184a17431aabec90080f0551b0bdc41da591d76dde496b4873947c841a2991c57a88f78ce5541380a3c6892c6708b8cc90155c7c0c8ec5cc902a5371b9647667e34fc70bac3ed0c35c3976d398f747336feaa383f3713a35943f3c4edb6b1b51af8347c453c12f5332e0adde032b9bfed06ace6c3ec9dcfed0d3a1389ef65007708ee33a5d3a13c0cd1f5221fcd464012f953193c13623035395ee87f5d941b222442b95a2c5ec53fe6365560fda0bfa1216081d39f150f3a6e576d95c60daf87a5143b3d2226290019c9aa9f025f405ede9f7e2c60eaf0e7d8418e7386eb6c11881cb1c2ddd9d83f7f0faae4f423be25a6e289221b694b9b0d5133c7aa5fff4184a17431aabec90080f0551b0bdc41da591d76dde496b4873947c841a2991c57a88f78ce5541381de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb085725edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e030be7cf60e14728754091d3ce47d168eba3688ee70a16bc363f93b55af74c3ab09ba3ec16ce4e3b577c673d5f779617b91117c21acc708f2cb129044f137bc672a7c19e1842800e85905f612572842c62a7869d09b2a8f491c6a78a63a3db0cf35c4f222383df8ba75e56080ea6c3bbe92a6a3621535d756546676d5e78b52b717fc8f74b8d0ce7f16db6861c1b227711d06bf7f513dc311e352313df4a2358b059ee4ca5843ca9dd6348d8a2d2f4192dade01a821d47e6e944b73d7a99b6e763c5f354a6809f5d8fc0d754f10b0845dec5a231524772141e6eba5461ed414fa0552acfb4136a8687c086867198f336159a70e0de3347500c25c57abf0d8fec115bc9f53006d4875c19a4c92d21a6e49e2c14f7a8c0932ebfd974bffe7f2136f100bb0f940ff5af0418178ed938398308f15b8a806eebefd442dd7e1992a70063159f97d5134211bdc683fa5831c115d35b484e0c21ccdd7932b08e4bdc034011057e8c8580c7d259bad9e10a723a662104cac42458ec86b161cf40d51ecdfbb2c074c820ffd78b3605fd73e698cddfbdc0d76d2dee858d6d0ceb138cce7354013f8b37df002874c9fa028c196732204463922292a64a044c85e7fb43318cac21ab571582f0b95eace8e89a07d2164578639d9fa3e39169cf92cc3c0f7907d0708dcc8da67a621bd0038dad289b63e37aa61f3416453030716aa83a1b6b8b36134501473f241539987e2b402d32886733acf22c3296486a9fac834a42f77a836371a8eabdebe84d44f0e4ee58d15197b86a5507756816003446216fd7034bbba2896641f9bdd12a5e0b4478950d44af83006eda7970aee892c8483c9f84d4b712541a4ccbf464e3be0445246b929717f1f725b686fc986091bad3d6e6fd732050000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000116c4fe50f946b01fd1f8568483274b911647681bba178f4fb8b640ec9974af7d00b43d62dddb164c97c0559162982883324caede7042366b632e56afad4d31c80cbad5f23a5c4bfeb9c0594d8637322ee7c758009cd1fa6a486dc46de3eb47cd0a91b0fca2dc813793df839b6645d2e6c6e1acdc7448b2d28addd490e78f3b3527a554463e7929aa715138f165b41de22e53201577014226e628c2d874837f213655a2e65e398ef86cc4342406c4b10c247beb09f94c5426bd4b0d315a22122c1e1e8d8aa9b2d530e0264dd7116965c3c0b86402c6d99e98d60e6a2c2fc4d23011f7ed28b9c83e37687475500a9e3d7985242ce72c5dcb2c703bc16a282cfad135d876a8aa90a889fd622872cb605c8d7500b4ed254003aaae4d9d6f56d6f8513a3b8de7926a10f17eeb252b5a01195f931fb44773c4c3c6f3f91f8f9dfe2eac3850b91bc2fbebcd3ab8d5bbbddc148fff6bacd8fd935fba0ef0bd83a54ac8c20d317c76e842e929ef03492c955c19f49aec07474c79d0acd47e93fdf80547c307a2a85c2c37ee0309e65302fe5a0245ce2246d3f4ae4208904e20a7dd2fd90308080e30750d01ba780fc53f3b5943862faf05c46cac350a04b75638caff8e6206257433b31858032e253dbb077d0048cf48eea725fa4e14458c72dfac69a4b4301347759a05701c7372efb9e6d90ad33178ec56ccb4a3950c83cef1c279c849047cc7133c7169c2f452e23bb107a3f1cd35e4fdc94eb168ef3d61a01065c4f7189e8a055e1ac7bdbf13a629a9bd94d0e763aa4c831e3e5c4ade129bd94e4d54142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1872bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a21b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f38a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c628075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d91b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec424af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1872bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a21b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f38a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c628075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d91b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec424af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d2ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec08283f8b0e460d52c58913fad78e1fc4cce8aa7552f29062c225dd92e0b0220d0905d69e666e3b2a0d6d173f142cef7678532cc741da81bb8790348d2c293b4d248677f56dd7dd830c3d4eba7dc5a9491cd36a974b3715b2c93e973495bd87023f12e6d50c19d3afe7194b499f780b8254280277f27d10a690611b5074a3acfb11f76b80533490007d130518a294847325d3679c416406b0948885d8d5135f3c2cc2720a52f1c8b3e645a5a14ab153afd19f76d4391f99ebffdf81ecf51e775d36bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d57911d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec48901252dcc61308ccdd0f07246c9274194c18a8befc9595e813ea573fa5d8eabafe912249ee770786f97c5ae19a5a2efede4059fcfcc794a65d5959bef42d651d7ed920907c64532b347c431682ff5de12a6dabb7611c175de7b7450d0d6b0e16f72d53f8accd0a2fe98f110745ccc315197fed62328601bd6def78157fd64826d63ca3731399b0a50803bad7d417dd4c5072442708fd0177ce405cf87403f1ce671b108cec664f5af7fc45282be822b3af8dbdfd6092bf1d01515c9a5f0ade3198e511a9f5752226a546c94c74f74504497574c58734b471215c882ca0664875b0210179f18f4efb54da6f69117ab24cb085fe3e17331c405e0e6366678c7e80231513c6faa9f6dd6652a222e877eb1b1dde117cb58f0ae22b84f44b0b00ed111f57c3e4b2492adf430a0e8a7a7195af426787038a07bb7fcfcc341310f29e13c28a51b8922ca8d5b7349006921bd3fa0c8999805bbbb209eaf81c6394ccfe6ced9520ef5d56097aacb5c3b09a0db63ef313f4a044b16b67dec81e6c650a89abf1ac70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000113bd2d46074d2c4ef0b7388c8e89bd3b1513427629edcea4f56ef30c2b01067d3d95323c72ba34a7f1516223cf2cbf9109f1d9882d13d1c8d182552b65cdd177345ca7c49ac97f393e1c356c2be180db02941a2377d948bb499e87c79d2fc16820756fca380009aa9c71630f3a9cd58b2d1b7636f8f629f01b22474dcd8d2296213a7f63819d0dc4af4a49c9b742416605e86549c3c182a847e0fa2f3a48483c0486fce4d180aa85666e1106bddc4a8dc6bec2bb764a211d25438c9ba9186a6d0271ac5c3ae8f6a2c6a0a836257501a6305aca175e28b9d54bec63effaad7c4c03167d790bcf08a9e1f4fd88a83dabb3ffcd47287ae2d9e85c9793843933a7c8352d51f9d8788577206b2db2467dda613679306b3a6b4889d1c6591f170d488414b4cc37ebd8f1e886f6b6ca23d96bc348707f917fe703606fba0b6341aeec97336c222f33bd6b9f84a2035f192a293dd63b30bd584482b65aee8b69d373d4e6001c45ea3de1326c146f30ccd93c6e707908733e8170d5279b03ee768a2214d513444133402089027bec05e81b98217b123b9dda83bdb591598cc3a75daefd7e3c667559612466bb060a125a1e1b24510ddc47b9e6e9ba9cd4a5e4264a8069e8394c36e878ceb56350cf5363179a4214ddef89720697b57ac1d87ad06fb278e617664c998bd5235fe71ebfb64def298a47abfcfbe4a54edd55ce62bf4d86d2181d7a349cc00528ceed5cbcd0d70d8d7ae1f809d31fcd4f3ebb1f5caf8e2aa6110f6112a588513e482de5872e938c5f3cd186d3d747baa9d8edd41910ee5d99b4004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be90189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac4783e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b8907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb8198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d049004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be90189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac4783e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b8907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb8198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d0493feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c21d8509a7454e82c6c01ee7f9d53e927b541a171fea9969f871cfc034c9763952b13cd6d52b7a32dda0c03c427c28bba72b3b40b5a8595a3c029cfe2dfe9b15a14accce313f5db11d06b277e45099796f2a6b9e284bbd31bd5b1ef642a2dc7642c762708227d8d9d5db25342038160352c32ee7a89896b63b01e4d1acff394993cc40f2563957cd02b5394bc253c4d0448f634cd65e2e2c3d47c95b581077a621e6a494cbf36abaf8b8a6a8de1165276533eb64441a7a8777834e338713e3148132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c83614840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d312634a76e6f4fb6eea219bb2b8224ba3e1737cc1b3c3492986bfd06622dd49953c63f8f67741fafeeb2ce545cfa5eba44d303a5699b931d6c0773dd7044f906f34b1e3cf64720e291183435640328b4deaafa0719bb491bf1f643536c5aeffb05f10975a0e3a836f1d21b415fe01c2eb2874f85853d65345cc5824a08686ff7f36c09b8e669ea32e887f597fc5b0512f9e914ef1814e2d8335872b85232f5add4cb3647199615cd17780a6803a4faed06170d5780e72674c5c32674deba0a522b372bc3108ffd0d085b814b44b3f0faf2047e4804348f99908d3cd663004bc9825b285e555ab6d8ba93203502102492bd86d49972fc501592cb843a378f3aa52e540e59681b126b5f69214be5e4f3ded147e020a5ac1cd868938d2e1cbdc2eefc951f3163f13d85737fb86ee16339926dd220b1bd2cdd108e5400ea0618b9b8722235bff9de5fcaa2264c0038dc5840593451ea5f384bf256ea8cbfc33330ea528934bc4cad822d4f93dcf65f1272607b7fc1e2598364447fe8bc3209a1e85a280a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012af8a5358325f3aacbedcf1b3d72cd810b38f0b3c4095dba50b5b5c2c73008822c990d111143ec5ae8b2fd5cfe95a081940e16508c8b08a4d563a88c6555cbd228cacfcda714b4a19f22d244e50a13869a62ef1b931e14debca3e860da7fb66b1d91a69904c876a50ade9cebd9c271934f6aea57cedd8c8466350b723b9f27682df3e2b49727d395209d3437a0aaeeda3cb20eb72a3b5dd5e8112c6f4876e386233bc045d6e7a928423d94e101cd89c2faf5544a1c736b7643967f2827064bc514e5b4b39072d2559dd4b922f67a7405fb2a448eedee5cd9f05ac3ae8818451f11fd8b270a22c422ee8a8d683261a29a7e500e234b662775cf3e60a165f597222283975c0a2074975e5debf3eaddd50ff2300b755c1a9cebb9eadef53bf5ae1827b3d19b0b60fed53f9e42bce73564005381d319d0b1ccc4e590a4ed5debb3783a96b78c9605bc0f9c4ca9045c565a3ce2df7f60913a93bae4cec3c8c7b22580304004473fc82c196f9eeffd1e12d32f461f5e5ca5a5d7b03fd28dfba4f164100d24a45d9ba83d84cf36b9097f893b9a722a040d717843b9ef142419bbb6e4e70286122f059cb238b2bf5f38ba2a0a318ba7488aefe23358a5f152c6ec78827e2b7b3d7dcf3fc0df36f08d47b2bb3bb8cc58db29f4fc1c9a4a707c1d70fa0eb62b3d348fc27029a1f88e4122f8e229e7d56620ee4c8317ab25b08ca05680a555193e8c99add4c3351515044e2ca243a9c8f4a6f14d18bc47bac7391b641d42031336f2f7431eccb58cebb26efbc3726c769202c009ba0d97cbaf60354b63adb909a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22309a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a223305a3308fad8167a9a6df2ede78645ec437fe1487d563d95a098a17834fbbd8e093276f657340a7e3410a5c94539eae8676db17fe7eb0ba3209a8521a40c74fe2622cbee39cde689d2d8a050b771f7a2c3b1ba52e62b09b30c8e93c520f6ada1196338b4638e14cfd60159eba3a4b37353ad4a5d4d9e176d1f2d58b8452241f00440361a1ec224d7d8d5ea28a83a7d57f8b8b730acf476f957ec35112a3fa61608e7ffa7a6007171ca846ab5c221a555d35b9aacf9f95610076d0f3575dc681c197c72c4ccb103b028475e963f041edf0457e1b288d586454f04237818425ece26bbfed82d1828baee8720e0a208b1b44b74061ef724dd8e083522442f783e5d022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c12334659429b892780000594c3d097f40db55bed1a591791fa10890d107b17803b6eeac5e4cb11c87a80550d4b74dfa3eb8d23386b65868e6be730962988072429830108cb5a02fb92b96cc16107c2713d5b965caf18aaee85332c9caa0d94d41d6a5055453de0b1f5ee004b172161a4672b9d1ed3c3d60b5965531316d1491424c267bffeb4a92a1f9ff71e8aab92bd8fcca320299f15f903a95dc267de98681b3d9840014b56d5e06008e175546d429279f5dbdfade3229583d32a9821679a1d04c802c73bb5682da8ae046269d75e6d067a1ee1225b7c287c4b176cf2a6de32dc9e0425440fd13b49e72087bbfd0944c40d96f6411202ccae4631e46097ad10107710165bc0e1593682c1358f9dd773b9f523e8d4a9a061632ed053cc2be02a058eedbea0901751c3cb699500e5c6a9232dbca0bbf3319c64a76754fd1b940d4599ce45d427e2d631ad7a1bd61fe7e487b02b5406a1dc6f2d36652d5e606a1fe51a21e994ffe1e00a4dd29d4ffedb384f01abea3acf52bf2ea331a1a8f0dd000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000012baadf51c0967e82e22afe99af216599c49553ad3266faf11e98c33dbf9e89da128dfe18ca83ba51b71d807d3f39d29517c08d3d418123651e9b22f3394d426300e14e414857349d4fc03288c2355c778bb6d16474b68187f5b8a64395596e9c36633eb9d8f2850bb7cd39fd0e0b5b2309609cb0375c39f2c3be3973aa99c5c50b679b62d8dd9652581ab85f89ca2af488879b966664a1da62d7f923f398335e0d49b78ad17be3cc78167be936911e28187892bd920715bc9a8c2aa616b7557a20d5c721d5dd51fd1a17dd6e9b34eb86551e0eaf46eefefc255d6140093063cc2781031c6d2f8d3f2e4738867f390aa037f5f6d8f566eca62dc6006f27337c5c0e4b8f78e621c090866c82dcb40a0fbd9935f5d90968e9e6fe1d949ccf2fae732de77298419249ac825157b9714cd5a5719adc16a64ac75d69f8ea6726063f0b247d7fab66df23bb452507802b7a484d0c27e331576117a392e8977a39741d9d0f35170bf7b1bcf30dbb02f2ae357e426937428db2652b1ba5cbb935811ce03c3590d15e659dd2d2ce5079e2847ad2367006a11c7e5c5da5dcf61989554e61e81a19e52e3ba71ceab3a59e5fb5387395b0114477ec4b1288513c8e4452e1057e2a1047c055fb549955e70886683925272d662119c22c1135efff8899b67124e9334803f84404b90ab676dfa456b284ed80587877bf072248690682481ade24b104410a6aa4538987ca1074bb7cd7c8fc4b693aad33f0284765747bca59c57a370e823a99584cfc1d14cd8b09d1e015502fb910fb5e9bd8f0bb04d689f19e973703ef5f8f7ebe290e27042e3444a34da933f7ab21213fb3c9a65b93152f15687d3c10a0708141d6f1d8fbd1cbbb5cb256ee4eeddae80d4551f2d19dd7d0ea978413acddcd79b6cd46c314e7055730844e03d657a5a63e82f03fc9df69eb6b0a712c532232864932b93ceb18faa8cf7bb21e704156630e762b596351831494f5902260550360920261cf68831ab3f29585f0e91d4035eb9595a5c42c24991734341d9faafc9f6dfd9e30977ce54c0d6a7a315d7bbbd3616385f36904c866e8cbcd2be1a910e2da0be90d0a8f8583bceb9d70006048fafff9b50a7a7adcfd740502141e56ef1d25f416f2f5707a7c431462b24638b30e4cff668eb2b610028bfaff03ef5f8f7ebe290e27042e3444a34da933f7ab21213fb3c9a65b93152f15687d3c10a0708141d6f1d8fbd1cbbb5cb256ee4eeddae80d4551f2d19dd7d0ea978413acddcd79b6cd46c314e7055730844e03d657a5a63e82f03fc9df69eb6b0a712c532232864932b93ceb18faa8cf7bb21e704156630e762b596351831494f5902260550360920261cf68831ab3f29585f0e91d4035eb9595a5c42c24991734341d9faafc9f6dfd9e30977ce54c0d6a7a315d7bbbd3616385f36904c866e8cbcd2be1a910e2da0be90d0a8f8583bceb9d70006048fafff9b50a7a7adcfd740502141e56ef1d25f416f2f5707a7c431462b24638b30e4cff668eb2b610028bfaff3fa1f2a2d0b4cce733cb9590433d6813522b16e9db2173a58e4bcaea7364b2a414cda1b9433fb43ff84e3aab6e2756c437f9c72677fb7a3897b566ae006fdb5500def3c798623305e3bde40c330bc212eb2a37209efcc5dd23bc28e0fddc535c10ba3b497946b8354436b36b51cf41e4ead546ea6e0434895375ccb17bec7e61112ff4370160fa8ee47f429587d17f09bf124d723699f4d1743af3e63c540fdd328d97abecc9fba594cc5b6a957df4c8ffa3554a419a966a7d7522a71d2380cc0964ba54afaca6f3ebf02d833d35bc5e45aa020758b4baa3d6e8a96aa514596a386561ff2896754e1a9bfc8dbdd64e28bcb81dfcaa5cc1877214dbe5a002284504ed39a11be374a6c61c5e56b99bfcc18cf3844790a53d75fbd6e84fb2bdf573150a02f1be7f1ef6e5d539f61024406f5775519521d6cc7c9950525f5fa4aada3b0798e2031fcdc5c2a2b737061d163d4e81662dd06c3b86a540acf39c68960c371cc3efd9623d338eb44f519257599dbc7b577fa4144e6a6e6aa4f4434628e23f7f199596e90012e876866389b6d5da0737e3ed987bb8b480526e0e8ebefa031a7822fd4379938ac37b11e940096756ff778aeb234d4a59ae01fd8d83a3a64c2a7516a3d869e11c02a14c6d7992956aafc2925876a4ec37e7021baf2f1a4f29158ae95c27961ee3fd5eb392866d6a95728406a392a80ce3b22b153dd0e5b0d904434dc9619f3394aa0ecd6f8d6e4ebaaced7a336f03cded2128c8f19a33ad71231f3907049791f551a95c9df8fbee2e89a97e9454868a43994240195e19d8b51ee0b1f5d14bf78f536e3324f2c9924f46e6c0d9c967651a28a8ab8916ed0d8f268a7bdcd32887a8fa0d72f3d21ac157c394647eea250c62d3990d621e94379c110a769eac5d72cda6bdb4cd4590283039c5c5d674e57e313e3348bf7b6e23460d7135a36b344163aa853d266c8382e1a58d76c2df9149ca1cd1c23003925edc000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013355bafa976cca4b782e3bae3d9491f279df8ae93f4a2c1b3945a22c7410a8ba133a774a19ab61b8109f64814c51f34780235fc7fd842509d94be8a4d2a68ee81590677d410af07d8896b9c8903d0884ce8ec7ea23f1ebc08dc870acd2c30d223dd1f3e49f7e113609009ddbc3a561d934e75ba083633d6b80f88c884182995115c54222a532bd9b8e79e3bb2788f09f19b4f41f839babf9a34d90507c22d0f3315b49d6ff2526ec4fd9cae7f30cc356436612577e020848692920fd9085260006e7b4b94a9bcfc9be4a742840db35d30c82d686d248548c74ede204dc8150371d1a7a866d049bd0f02a39b96d04d460ea19c69dbdc07833b06900d80da5233d1b9be59407de6536533ff0e414ea4500b9dfe4d4e090b7077d257df5e05b52e122c9045498d573a52b887db4c342e20ef2961a2837bd158ff054c033f73ae6930b36900480c46fe47dbdf8fdddfb85778d0b04ee35554e178ba05057c0742037200eb020a2be2dc001fa7c1bcf8a07b2a950d809e29eee449310ca02bb28c9bf321bd871b27f6e5fd7e378bcafc6f5175c8d04e5e246efb882fdf1abc4cb1b931d8ede1aeec5815daa129f8589ec50b4c38ae0ae88608075ab34b621e3644bd3177e1db765a9cfe132cabee8141f26a9554c8bce64f153286328811a1b97ceb5363735a35595151b34e047f8e4c7673734dad13558ee078841673efe6223ba26138d96a4a8209a27d0dd78d8a9c868e3e765da3629738e76d9ef1f071981bdf122a2b0e7e95ea5247188b6c05063a52007110f5a4485de2a2c613a971c7f418c142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1872bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a21b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f38a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c628075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d91b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec424af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d142fbfa54ba90f415cce321fb844d3edc8fccd375fc0fbbaf04d1f5e9689a1872bd0405ab456f0bea331cde047bb2c125949cbc4a98bfd60a8e0118e69765e7a24eebe3a7a4d4c46d006fa9e995823a4caa96918d577f18b18546bebf0b027a21b1141c585b2b3b92ff9056166a7dc5b579d2fe333d5079080d8c5010f4fd85f38a9b72463827d621022e518feb8b237b0c1db8418bdc580474bb9c1b370c628075648db9c7d829defdd1ae701474dc87184bd77f08f339b51e1772b4c8f39d91b5093b5f18c72ea50ae797cf99b7b15eaaee5a45680f712ffc5dd148133dec424af6c4a0e738d15af518683066484ea3797b357b2cc0208996753d87ecc213d2ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec08283f8b0e460d52c58913fad78e1fc4cce8aa7552f29062c225dd92e0b0220d0905d69e666e3b2a0d6d173f142cef7678532cc741da81bb8790348d2c293b4d248677f56dd7dd830c3d4eba7dc5a9491cd36a974b3715b2c93e973495bd87023f12e6d50c19d3afe7194b499f780b8254280277f27d10a690611b5074a3acfb11f76b80533490007d130518a294847325d3679c416406b0948885d8d5135f3c2cc2720a52f1c8b3e645a5a14ab153afd19f76d4391f99ebffdf81ecf51e775d36bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d57911d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec48901252dcc61308ccdd0f07246c9274194c18a8befc9595e813ea573fa5d8eabafe912249ee770786f97c5ae19a5a2efede4059fcfcc794a65d5959bef42d651d7ed920907c64532b347c431682ff5de12a6dabb7611c175de7b7450d0d6b0e16f72d53f8accd0a2fe98f110745ccc315197fed62328601bd6def78157fd64826d63ca3731399b0a50803bad7d417dd4c5072442708fd0177ce405cf87403f1ce671b108cec664f5af7fc45282be822b3af8dbdfd6092bf1d01515c9a5f0ade3198e511a9f5752226a546c94c74f74504497574c58734b471215c882ca0664875b0210179f18f4efb54da6f69117ab24cb085fe3e17331c405e0e6366678c7e80231513c6faa9f6dd6652a222e877eb1b1dde117cb58f0ae22b84f44b0b00ed111f57c3e4b2492adf430a0e8a7a7195af426787038a07bb7fcfcc341310f29e13c28a51b8922ca8d5b7349006921bd3fa0c8999805bbbb209eaf81c6394ccfe6ced9520ef5d56097aacb5c3b09a0db63ef313f4a044b16b67dec81e6c650a89abf1ac70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000113bd2d46074d2c4ef0b7388c8e89bd3b1513427629edcea4f56ef30c2b01067d3d95323c72ba34a7f1516223cf2cbf9109f1d9882d13d1c8d182552b65cdd177345ca7c49ac97f393e1c356c2be180db02941a2377d948bb499e87c79d2fc16820756fca380009aa9c71630f3a9cd58b2d1b7636f8f629f01b22474dcd8d2296213a7f63819d0dc4af4a49c9b742416605e86549c3c182a847e0fa2f3a48483c0486fce4d180aa85666e1106bddc4a8dc6bec2bb764a211d25438c9ba9186a6d0271ac5c3ae8f6a2c6a0a836257501a6305aca175e28b9d54bec63effaad7c4c03167d790bcf08a9e1f4fd88a83dabb3ffcd47287ae2d9e85c9793843933a7c8352d51f9d8788577206b2db2467dda613679306b3a6b4889d1c6591f170d488414b4cc37ebd8f1e886f6b6ca23d96bc348707f917fe703606fba0b6341aeec97336c222f33bd6b9f84a2035f192a293dd63b30bd584482b65aee8b69d373d4e6001c45ea3de1326c146f30ccd93c6e707908733e8170d5279b03ee768a2214d513444133402089027bec05e81b98217b123b9dda83bdb591598cc3a75daefd7e3c667559612466bb060a125a1e1b24510ddc47b9e6e9ba9cd4a5e4264a8069e8394c36e878ceb56350cf5363179a4214ddef89720697b57ac1d87ad06fb278e617664c998bd5235fe71ebfb64def298a47abfcfbe4a54edd55ce62bf4d86d2181d7a349cc00528ceed5cbcd0d70d8d7ae1f809d31fcd4f3ebb1f5caf8e2aa6110f6112a588513e482de5872e938c5f3cd186d3d747baa9d8edd41910ee5d99b40145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a6034065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f0139a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e1001fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b05202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f071720e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea0145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a6034065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f0139a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e1001fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b05202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f071720e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea31870947f95bdea9c3c192cb3bbf7effe29d0fb7bf7284c1d7e0d66acf118ab01040c9277dc8c6351fd039b70656118046072e337c872d37814fdf794ba768ca23395a400a684d94c6d78fbb9be15c3f755ec66343bd022f90dd2d33a0d5bb6d0acb6a404135136d1257fddd30a618cd231dcdf8bb21b7ee6788bc2a9fab0c8a20aff83835a5b4ccf729e3b4b253bd1f7d7324fa0ce86a7dfa7275830f1bf16423a3be95ea9f18d2ba1bdc9e20d742dd3d63c827f198de024754695b2fac8ef30f2d75830767eebf3d2ec7ab5e591790e76cd7fa3992cd0c5af72eed276f9b0d3aea6a4f9e6c98e1713851647dc952661f58279d7f9aa9ecb65c91af23d535b8328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f0e9b28b272c02d11c9386c8f3a096b2194e24ee296dde17998ff0afab4195ecc07b3c99b61e73f8c0eddc62acc9a1fce8d7809e368c4ace8b061ea854a2e59952b3f9c77fc3bd3c17566dd79285f24c0ec915bdd0f6a6b45c99c5e3b9018b9e624f3cc984102265dcdd7c86bc903d5b2b9219ccfd1a413f5b054954914ad8aae0d9535253cea21b1c3288e55a6ff883ef8e2c72bf8af28661332775036c2b547326acadac315de4e3cd771aa590077c12963d1d0109dd0b585fab99cc93d4abb2005f4f59c3c928ec3767307fe1673ed725e13a3f64d55664f83472ae6a2b5ae1a09575dfd31302f217a0aefe63ac1162caabdb0fca6292ec2bb36193d0fbdf53a117c06a995f4c30f7e58ac44e9bfa87a75d8350549f5048bcefd2e3904b99b158bc49e459984cd6f93b80394eed78f7e41df8d9670222d974ee5282991e1c0063cc7959032a8cf40b3e9d66afd820dfc06cd07462e7b298d0d20b5d59a95d43f24f74750d0897d09fcb8274e5dc71d0f1b936ad253290524ca09cf6495536c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013cae966af414e5331e7a6afbfa56f6b27efa5df2817773abda389025fa7c1a54171265f133abe509df8b4fd9ef75f5bcb580cc5ea675ab30b5874443f92c268501e58b56bfe4b07572ef008901538385ca314b57132a46121a16f9a20e3638f939f2c8bc0861192a274e64cb37fb116afd9d07ff2326a1c9a6dbb939976f11a73f2a53a1b478af01987c8f5ffd40a21ea1002247644ec903fcbe62b2903c365d040fb2dbbc62fdcac560c2f48607557952fc0de71863393ed1d6f094c1ae4f542882d96a870870d2020cd7e46c6eb71f48da99c1234bfcfe06a29cb917b66a5d26375ab7577515c6cfc8cfe88c5e068509f744352e2da3c4d7cea192a4ec44ef3c668ab7fd5a3223d9ac025aad7aeb59466e383ba603e9b9828149ba55e9c9880bab4cefead8e3a6546d7e464987b7bf4b2d0cd13e40f8a47f041ecbdef9b6ab1602976ab66fed4103f081d0af2f2a5ae7d52ccd62affe6f82fe4272b232c6113ffa60694f62a30f0525e7e590aab06ee9d4b20b10470e01e5489873e7e913892fdb96c62d0e3bdb6edb6dd7e50d145c78bb99626bf9d840470cec4ad111e3951fcf1fc67436b3e2131aaa6a54a6316fa75c4c31fead97ede725bb82d71d83d12cfefca78c25e514ee8e8d5724d3d8dbae7d272ac7bd9adbab233cbd6e80514e1b4b6c77e416f53afc5ad5d412e3eb86769b1f450fee43cbe72c6e30ca9a167328a3cc98b18385adca63ed83e0a8986ee326fe2109e0de8d0b2ebae40a1ef4103679a97f40636cf5742883dd43ae9a37da822b1773cc23ef8acbdef6100a673311e1bb53348f5c861f5584405a79ecff3b80f28d8e1ea9b0b74450a59280f4c62e1e44accb70a379e0aa7bbfa5861300e6c5a66e7b2e4f6ae1e8e0476d7f0b3b1968a8a006ccce9e9cab9541c461a0fc073e23c7bd4c5757fb28624edc84c7dd2697575ff933316163546abe3b9e5f041b0875344c00a1c39e04ce9e237b38243f0b4b20220009190f59ea48d5e824ec01f019eaa930bb9c4e9cba9d4e97e75000f4b4dfddfff6e6f0a615b72a17db1420567f11601c3d7f4a90764fb16818b13b3877a0aa002d7d4cc1936c2d88b89b80961da528bfc59f245ae15e88f7848c04c7885f55ffd282b33e6c93d2774764a1b07b56e08d337c74d24f8e77087b7511e1bb53348f5c861f5584405a79ecff3b80f28d8e1ea9b0b74450a59280f4c62e1e44accb70a379e0aa7bbfa5861300e6c5a66e7b2e4f6ae1e8e0476d7f0b3b1968a8a006ccce9e9cab9541c461a0fc073e23c7bd4c5757fb28624edc84c7dd2697575ff933316163546abe3b9e5f041b0875344c00a1c39e04ce9e237b38243f0b4b20220009190f59ea48d5e824ec01f019eaa930bb9c4e9cba9d4e97e75000f4b4dfddfff6e6f0a615b72a17db1420567f11601c3d7f4a90764fb16818b13b3877a0aa002d7d4cc1936c2d88b89b80961da528bfc59f245ae15e88f7848c04c7885f55ffd282b33e6c93d2774764a1b07b56e08d337c74d24f8e77087b750ce7e97ae590c12eda640bdea2f2501459f94dfc3a5ad39eeacb0ce72bdfce160409ae2f87c7368549686786a98175ac8c817825a11200d132276a2842980b5503f684053292e56a23cc9aa6cf6b481f2ec93b24a323cd8de4386d69771a4f5c1fc6a3ef7a30a81709d7aa355992354fd93d1e3d53a2b055a2af3bfc2322aee723500dfb71972b65effbfc64e970bf0af2f850e628644348aaf32e368c725bc32708dddaf0a355dd8d56733e344629709d81d66a333624a6716db87e609b78861469067986f43cf59010dde08f92426f9c3c91b26d7baea2cea61005e14e93c71b9db6668f5dc4dd7d5f86d590d1cc2465212c4ba530adfd1fb40487ba76e6dc2bf93842bf2d60223b1a98080fb866156c1f2eaba5c51d58b80b9996a54f20521f58081e26b71aa87374afb67ad656bae9ece3c89aa1828ad674a7ce51fc080306b1c44920157c93acd913a20dc88b72472013d85acacd891a620f4021066f1a1fe9ff989561772ea2d51724e6f0df9a4153ba160a091c827b172e0f31ca66ed2f21927fe7dc596701cf597a8da267cc99840fdb2bce57eeca29b69c5d05e2901c2fade0fe082163acbfee43fcec5503bc880299149847f4c4568ac89a4545c60fc98a61c1253ebe8e5aa9c412cc1111af972c12912cd563f3b50ece0b09da8d3036759e3edac14171a5563bed33eeee72af6ce9782023b7a578221ef4f6257517a3747acf162f38a350354b39b09b18f6969dcddaf1d26e479160ab64a296a73b9199cadd3d03ff6c78305d3da09035ed9eb38046286aca90940c7d19bf964820cd90831b33111a1207e29516e0656e61c6ac921f597591eff35fe8041867c3292500858dc4cbf6cb392ae7c2afbcb026857c51d3784ac80aa2f9f4c9b1fad0003b2eb2f19bfe5599844db38336b74f919697253931b2425d1bb448e236d72621e8a79e1070bde4bc84e52025781872e9e57793af63dbdb77f231a6510597200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000125c363702d64ba5e934715df57ab4bba2cb17d8662b239dca50584d80cf020d4223b2428aca3ddca50a4e6cee67482fa0dd86bd9d1689768254f10c1adc0312d1a1595d143d11b47d4db164ef10250c5d5096d3e08ffb1154a9304d164264ffd16e2d9fba42d3bd37a7834156e6e061c5c722c6f31b3d5df1de40f4f25935bdd11e4861e7721f0331eacb134490c8141a111c9743d4df9de32c207bce8f901e833efa315b6cc8b92350e01630da2b8016db6fb7a889f1385c11651682123480635a61c3890b22c6ffa43121ea2f855a10defbcd01efc2353bef2c02588beb8cc19b7c497da5170d91bfef97b0abcdd53ccc38762ac4ede70ce748a02151cf92a38a5122dfd46182e42b471bbbc1157af1570e94cf3c8d2e4219be3c748b448850bca143dc161946546b4c2709d5e5bf134f9c804146ce05df6f16f051be82a8317c3a72ca2fec863ef5e78199a7b0668d878c01937ad35106e22804583b2b6c12d9083f6e76122159ae39261b4ad5a642c7d8243079553b2ec6ba0e45b06b68e079779984949174d271ce893b9744893dc1ef2b3351df090f709fbc0af31be3d08133cf457fbd8705ad92fae803efd3821b259e52c3c86819dfb7b1ff8fda92822295aea8e501ce4880020c2e1cd5409cd7d326d89a681ca6e3758d3dc1eb571386ef43105df9a355dbd5622ab5c9d99cc0ab7772aa434c9be44b3ec9e21089319621aebe16f83b61f83047b7054e7fb3cf59cb5bd55c3d684930f3888e14c643e0b1cbeed6a6f988f6636f8a2d09d07332ce9fc52adbe806ccc2598f6cb534d00000000000000a0080f7de0bf31efb5b2c47eee5c937f66267b3811844a38824360cc21f390788636c3618a72da13ff78c21263b11fcdccae1e905f7203685e4a438cb11a318e2639b2bc6443979398a1707858c3fe594b4ffc9121a292564e5283683faa06eabd14fcb27b64b49484b55c21ce0d67fd3f9b8eef9d5565bd9900e33e36cf38009109cc41b5d14677db1dd6d5a6a5481057ccb807e75ff51f42c20095adfc4caa7d1f69cb56fd602cd503de374800d867d9f4878db487fb15669a38af13194b083b13cca270e3d859c3da00bb667c50d304818dd53f8e046b781f8477186b3f89593ae2cc6ec473ce597ccbdec05515838669fdab7f69f3a86f33e22f5e0dff61f53155d65a050f3d72c89f16a33dcaf2cbd1eb015e31bf45d61a81f751224a04081eba45bc79c878a10d25ea7cef2c2f2ce21ea9e17e131dafcaa323854ba0e8793067a0c4d6422ad8f2d599559bedd16d4f31a208fb26fb1a7fdf6165f8dc9cd11e47ce1ad209fd4463f700d13578851d9c59deb5fcd118ccd387451080624e7d1eba45bc79c878a10d25ea7cef2c2f2ce21ea9e17e131dafcaa323854ba0e8793155d65a050f3d72c89f16a33dcaf2cbd1eb015e31bf45d61a81f751224a04083067a0c4d6422ad8f2d599559bedd16d4f31a208fb26fb1a7fdf6165f8dc9cd11e47ce1ad209fd4463f700d13578851d9c59deb5fcd118ccd387451080624e7d34e1b0233be43daee5774e87712211513f82e4ef7041c041b91652e56970806637513f0eddda4eecf7a9d90b386dfff60a9d9df211d757713fbec0fd2624f20414fcb27b64b49484b55c21ce0d67fd3f9b8eef9d5565bd9900e33e36cf38009139b2bc6443979398a1707858c3fe594b4ffc9121a292564e5283683faa06eabd3df03998d083123372b5e5daf8ae3a1f69aa41b3fbe9a32e1ce6e6ee3b767c7428a4503a7e4cc009eb49fb6b8f9a90978bbfb8343effdbb4324e19e2e52295720e14ccda13a6fc58ee21044d250708cd32c5f8ba46485795c4c95bdce9283bc9009aa20594a52bc468ab95d9ac5f4dbd967eef08a862c335f57019ac9016af84340817c89d0d2cfb42596a584474c06cdd62bd80bd47859f8443957f9ee525e41f891c34602e760f56f02eb7457e7c8b72cded12729e441d90758b078d564695347caec906d89a88e030021b49512c91440f57e1fa4b4c6138efccbe596eeb591a32c016a1738d94769c980b881529f9a77c28dcfdacc7861a76d9b81fcffff504ae4cdf7f6bbcbf19d0978df15ba099a70674c5020c4f44e0b9654ddb271cac2afdf7d18e598c1a2359b72732af16c3fda6ab2d29816357b0955313ee87a2a7246e1a4ccd1537b0719e20849545a35a9b75e008d815ddb4c2d4ba3f1bc3a4092a415492db36f06ce52e79a23c20b3305015a0b61fe236329091ec375d7b47452e5501dfb8a233993a5b9044aa7e48da1167d7d0856d15f4104012353bb000e60f6235fa1185ec86900b13793bc1f553106d6540720a70d596b16cfa17e8d6bd0764e1225e874bb71999c6c8b4abf2c32af3355b960c7b8999f2cbe249f938dd074a8dbd49c4dc663d32d35e1cba63c79e51b267589e9f422046a9a72f45b27037513f0eddda4eecf7a9d90b386dfff60a9d9df211d757713fbec0fd2624f20434e1b0233be43daee5774e87712211513f82e4ef7041c041b91652e56970806614fcb27b64b49484b55c21ce0d67fd3f9b8eef9d5565bd9900e33e36cf38009139b2bc6443979398a1707858c3fe594b4ffc9121a292564e5283683faa06eabd1f891c34602e760f56f02eb7457e7c8b72cded12729e441d90758b078d564695340817c89d0d2cfb42596a584474c06cdd62bd80bd47859f8443957f9ee525e4347caec906d89a88e030021b49512c91440f57e1fa4b4c6138efccbe596eeb591a32c016a1738d94769c980b881529f9a77c28dcfdacc7861a76d9b81fcffff508743953edb311b595689246441fe46ef38fb2120a62984f49105fbc19b2e9af15b77f6407ecfb6767fcb5126e4f1db6af5a6aed840e017190d995a064a564633e2f42b5423ec9391883bb95e1113bffef09b0d32cd42ba62821a02d8d91e13710802c2a660d5ee43e48de90f0551a8afc81cfebcb23e8412b450648ebad0a1725fb2f35aa98ed806d3747982aaaeda77cb3f37245276a9c92cc382cffc49eb01c86f9487f4ac7d5b61debeb360253f212ace98fad0e97ab4f69b9ba52c5f8bb234b8212245f6496613b13d142576492a0ab668af2955631332705af4dc7345e2b63eccd83ecc386f59186558f0ef1f84ae01a340562bdb6203fa0c72b77b6f031181ae950d805780cc06eb7c812fb65bed68da9f7bbf5cc48363ff2d4b511b9135929e0ac22b89b9de768e666e7985d6a79c3c045c143e4ef0e2bf1a8095577009aa20594a52bc468ab95d9ac5f4dbd967eef08a862c335f57019ac9016af840e14ccda13a6fc58ee21044d250708cd32c5f8ba46485795c4c95bdce9283bc9078f880b3456ff651c74854b64ef466b0619f3c6b49c681f77e3e6a87cb8a7882c5ba14eea04152173475bf8777f3f91c06ce100794a995f40dca9eade2384910ff669ece8e5c627515165efe3870f347b3b928c56f84a8964ccd14023b963543eb904f2bf6661f6057b3436eddf4756704fee32a0ffc95dee99d536558587fa05c97e722889f9589e729bd5db37fd0ee749e725aff8f7085572983a12d62bf222ba27acf95ce1a246dfe98b7b5e1fd185c8ee2ecceac627b5a3b1a737f6b5b82b63eccd83ecc386f59186558f0ef1f84ae01a340562bdb6203fa0c72b77b6f0234b8212245f6496613b13d142576492a0ab668af2955631332705af4dc7345e08743953edb311b595689246441fe46ef38fb2120a62984f49105fbc19b2e9af15b77f6407ecfb6767fcb5126e4f1db6af5a6aed840e017190d995a064a564633e2f42b5423ec9391883bb95e1113bffef09b0d32cd42ba62821a02d8d91e13710802c2a660d5ee43e48de90f0551a8afc81cfebcb23e8412b450648ebad0a17078f880b3456ff651c74854b64ef466b0619f3c6b49c681f77e3e6a87cb8a7882c5ba14eea04152173475bf8777f3f91c06ce100794a995f40dca9eade2384910ff669ece8e5c627515165efe3870f347b3b928c56f84a8964ccd14023b963543eb904f2bf6661f6057b3436eddf4756704fee32a0ffc95dee99d536558587fa36c3618a72da13ff78c21263b11fcdccae1e905f7203685e4a438cb11a318e26080f7de0bf31efb5b2c47eee5c937f66267b3811844a38824360cc21f390788639b2bc6443979398a1707858c3fe594b4ffc9121a292564e5283683faa06eabd14fcb27b64b49484b55c21ce0d67fd3f9b8eef9d5565bd9900e33e36cf3800913df03998d083123372b5e5daf8ae3a1f69aa41b3fbe9a32e1ce6e6ee3b767c7428a4503a7e4cc009eb49fb6b8f9a90978bbfb8343effdbb4324e19e2e52295720e14ccda13a6fc58ee21044d250708cd32c5f8ba46485795c4c95bdce9283bc9009aa20594a52bc468ab95d9ac5f4dbd967eef08a862c335f57019ac9016af8439404db96b2d063952714c0a1072c6ba86fff42772cdfb4b18505bddc4a86346340e490a167569f7ebcfc91cc090599275e51a1a0e21367ec73791a885163e2d074a8dbd49c4dc663d32d35e1cba63c79e51b267589e9f422046a9a72f45b2700764e1225e874bb71999c6c8b4abf2c32af3355b960c7b8999f2cbe249f938dd38d55f89a15228409151f05e1d31132c0615d2d112aebbb2790fdd8b3a2605db0555da5dc0d41e4c8f86e3df1b4929eb9c992c8d24939e67e9c8437fb46c9efd02ffdd96f41087d3b97defc40610b76205b9437f3e73753241984be3f5f296040baf9148b43ba0499d4eaa62cb559f28c38ba443b037a59978a129a5834c55493e44354ea97499886a57d38a1c74840a7e9d3d0ab276a7f610b6030bf0bf90a50491db5c99ac710733bfaea8a36eb5e68bc6a93c553c012ffd8c280a64aabf17193528d7ad90a89f635d890a2433e0bd1f7755b800775568f51304ef1da9bbab357a4607fabb7f7df36f111cad3275cdcc142b06f780be7e5e53a1875b952fa322ba27acf95ce1a246dfe98b7b5e1fd185c8ee2ecceac627b5a3b1a737f6b5b805c97e722889f9589e729bd5db37fd0ee749e725aff8f7085572983a12d62bf22b63eccd83ecc386f59186558f0ef1f84ae01a340562bdb6203fa0c72b77b6f0234b8212245f6496613b13d142576492a0ab668af2955631332705af4dc7345e3e44354ea97499886a57d38a1c74840a7e9d3d0ab276a7f610b6030bf0bf90a50491db5c99ac710733bfaea8a36eb5e68bc6a93c553c012ffd8c280a64aabf17193528d7ad90a89f635d890a2433e0bd1f7755b800775568f51304ef1da9bbab357a4607fabb7f7df36f111cad3275cdcc142b06f780be7e5e53a1875b952fa338d55f89a15228409151f05e1d31132c0615d2d112aebbb2790fdd8b3a2605db0555da5dc0d41e4c8f86e3df1b4929eb9c992c8d24939e67e9c8437fb46c9efd02ffdd96f41087d3b97defc40610b76205b9437f3e73753241984be3f5f296040baf9148b43ba0499d4eaa62cb559f28c38ba443b037a59978a129a5834c5549397b26960faa188c976677e7a40ba19d90cd78a02b0bc94ca9279292ca3fb631160fa5a1b83d7743ec1200f9a85f18898812ef5c0498799a440c0fb6175f478a35e6da25cdf86ed8814dc01565f3f3a2f9109ff9c531b73c6f5840c5958aa6e818c894b9da53b944d57eda116b7262e7f27ae0c532c65caae40e65b0e3b444662701c32720667fe0a79592b975b6cd5932570163dc57cbf99ed9688cd37d836905d8d18ec93dc9e3403951ee09125409276db1945b7f9963eb9ab230db4750d40baf9148b43ba0499d4eaa62cb559f28c38ba443b037a59978a129a5834c554902ffdd96f41087d3b97defc40610b76205b9437f3e73753241984be3f5f296040555da5dc0d41e4c8f86e3df1b4929eb9c992c8d24939e67e9c8437fb46c9efd38d55f89a15228409151f05e1d31132c0615d2d112aebbb2790fdd8b3a2605db02ffdd96f41087d3b97defc40610b76205b9437f3e73753241984be3f5f296040baf9148b43ba0499d4eaa62cb559f28c38ba443b037a59978a129a5834c554922ba27acf95ce1a246dfe98b7b5e1fd185c8ee2ecceac627b5a3b1a737f6b5b805c97e722889f9589e729bd5db37fd0ee749e725aff8f7085572983a12d62bf22b63eccd83ecc386f59186558f0ef1f84ae01a340562bdb6203fa0c72b77b6f0234b8212245f6496613b13d142576492a0ab668af2955631332705af4dc7345e05d8d18ec93dc9e3403951ee09125409276db1945b7f9963eb9ab230db4750d42701c32720667fe0a79592b975b6cd5932570163dc57cbf99ed9688cd37d83690baf9148b43ba0499d4eaa62cb559f28c38ba443b037a59978a129a5834c554902ffdd96f41087d3b97defc40610b76205b9437f3e73753241984be3f5f296040a7b062400dbc05bb8eaff9a8e368e74532b5a9ed496fac05ea49d2f62492cbc1db4b7ce07cdc565b1a53717692996149ee4717092d01b9180657382e5a3fc9d357a4607fabb7f7df36f111cad3275cdcc142b06f780be7e5e53a1875b952fa3193528d7ad90a89f635d890a2433e0bd1f7755b800775568f51304ef1da9bbab20212d1586fd6d0693fc885b11407aeeefa1bd44e32a35894c147adc5c68c4161b385cd6b707da713780e1d481f82c2d6824d51f6061d7520fe9088a773ff5ac2a415492db36f06ce52e79a23c20b3305015a0b61fe236329091ec375d7b4745246e1a4ccd1537b0719e20849545a35a9b75e008d815ddb4c2d4ba3f1bc3a40925fb2f35aa98ed806d3747982aaaeda77cb3f37245276a9c92cc382cffc49eb01c86f9487f4ac7d5b61debeb360253f212ace98fad0e97ab4f69b9ba52c5f8bb234b8212245f6496613b13d142576492a0ab668af2955631332705af4dc7345e2b63eccd83ecc386f59186558f0ef1f84ae01a340562bdb6203fa0c72b77b6f02701c32720667fe0a79592b975b6cd5932570163dc57cbf99ed9688cd37d836905d8d18ec93dc9e3403951ee09125409276db1945b7f9963eb9ab230db4750d40baf9148b43ba0499d4eaa62cb559f28c38ba443b037a59978a129a5834c554902ffdd96f41087d3b97defc40610b76205b9437f3e73753241984be3f5f2960408743953edb311b595689246441fe46ef38fb2120a62984f49105fbc19b2e9af15b77f6407ecfb6767fcb5126e4f1db6af5a6aed840e017190d995a064a564633e2f42b5423ec9391883bb95e1113bffef09b0d32cd42ba62821a02d8d91e13710802c2a660d5ee43e48de90f0551a8afc81cfebcb23e8412b450648ebad0a17340817c89d0d2cfb42596a584474c06cdd62bd80bd47859f8443957f9ee525e41f891c34602e760f56f02eb7457e7c8b72cded12729e441d90758b078d564695347caec906d89a88e030021b49512c91440f57e1fa4b4c6138efccbe596eeb591a32c016a1738d94769c980b881529f9a77c28dcfdacc7861a76d9b81fcffff525fb2f35aa98ed806d3747982aaaeda77cb3f37245276a9c92cc382cffc49eb01c86f9487f4ac7d5b61debeb360253f212ace98fad0e97ab4f69b9ba52c5f8bb234b8212245f6496613b13d142576492a0ab668af2955631332705af4dc7345e2b63eccd83ecc386f59186558f0ef1f84ae01a340562bdb6203fa0c72b77b6f039404db96b2d063952714c0a1072c6ba86fff42772cdfb4b18505bddc4a86346340e490a167569f7ebcfc91cc090599275e51a1a0e21367ec73791a885163e2d074a8dbd49c4dc663d32d35e1cba63c79e51b267589e9f422046a9a72f45b2700764e1225e874bb71999c6c8b4abf2c32af3355b960c7b8999f2cbe249f938dd34e1b0233be43daee5774e87712211513f82e4ef7041c041b91652e56970806637513f0eddda4eecf7a9d90b386dfff60a9d9df211d757713fbec0fd2624f20414fcb27b64b49484b55c21ce0d67fd3f9b8eef9d5565bd9900e33e36cf38009139b2bc6443979398a1707858c3fe594b4ffc9121a292564e5283683faa06eabd00000000000000c800000000000000220000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020edbe94d8e8de5db41d18ad91301afefc3b3b6d97bf6925be6996ce1550d25f9f0000000000000001000000000000000000000000000000204b06bb483c21112f9cdd7eff56256a5630233353d836a5d668685bfdc6a4041e000000000000000100000000000000010000000000000020d80cc5cdbb0ec297cddfda4fd988de76b705f83576117fb5ed10b48a9b959bb0000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000220000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e000000000000000600000000000000010000000000000001000000000000002031207018e5337547011f31a2cb9b9576fae9ef496ac1f65b332c737338573b5f000000000000000100000000000000000000000000000020393cccd066625747c7bb15e378554916665b267344c9bf3a1f1e239b4d3166fc00000000000000010000000000000001000000000000002072ecff12c730f10ff239ae5d5ec6e0ecd7a93d7c6f58e48faaf9efc69af68a03000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002200000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020a502afaa3bdb59ad846d02004e3f49dd5a5e428cdc9767660dbcc0195391e24a000000000000000100000000000000000000000000000020d2096ab2fdbc4ed9fcb3f176b5554a872f0e907766b3c2d7a358a3e01f8fde260000000000000001000000000000000100000000000000209636be1e4b8abd68cb43b0274502fefa81dd44893b457dcd361701b81c119a5b00000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002200000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020aaad17ed1dd803084c7e03d910bbe8a35e8d602a26609351bdf66100a23794cb000000000000000100000000000000000000000000000020fc18f1981d845ff496938d740e8859186fa60708758e2c4966cc30321ee5af9700000000000000010000000000000001000000000000002034d606e528ae97ba399a8765a39ca8182a9abb6191e6065fb37a87dffc92f9880000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000220000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d000000000000000600000000000000010000000000000001000000000000002063f325f5186e10e6614bb85c0bcb3ba848415c8cb1225f99c8929543d82f2c90000000000000000100000000000000000000000000000020a58adfd2e024e06c922fbd6f0c6e29c0aa467b652272a9cd35196719e496cfd60000000000000001000000000000000100000000000000200df38a45fc387ce7388d7edbd245b965091614cd5a7aa1118bcbb22942e4bb9300000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000270000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020d2177cff3370731150de6ddcf6c893f5aec7252d0b7bd68caa69cf0af92a8edb000000000000000100000000000000000000000000000020ea0130bd476a2e99ed6edb948b6cb09cfecc8dd59caba4fc389609df359d15860000000000000001000000000000000000000000000000204cb7b4fa816710180675ddbc955531f8a709d427faf5200cdc6737874e060a55000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000270000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020b48dc2c77a67d852a5a1c89e57e8fa3cd275bd8e13e6fad63330fc34b32b72980000000000000001000000000000000000000000000000201e9235801c669c50c2b370f79c4c01eedac2bd811e7882f3c3ae07b72c66516100000000000000010000000000000000000000000000002037a9c624bdb25b1ee261b13411e9d6acc0d0e8c738496cff14dc43abe65c9d1f000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002700000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000208e708d32664cf9e3acd55714e1ebba48f1e2bbafa51332d5569992c483fc341e000000000000000100000000000000000000000000000020437286cce94ee481fb2d34b75a26a24d22661f691749677c792af071c156ccba0000000000000001000000000000000000000000000000205d6c3e37441823be85bdf046e1379fc5587812c68dc08d8750f2f6bd76bf08a100000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002700000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000205c177f2a7c5dd4a10967804e5cecdbe2a45b4f4b85c94574c66961249b750199000000000000000100000000000000000000000000000020c53bcd46d6bd106eb9fd8a01d0376b114ad193213375dc742f10e3d1c5de5dc4000000000000000100000000000000000000000000000020a3d9e1ced1896a9083f68bbabe3bb9574542b5eb5d38128a466f4b97c8a833410000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000270000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000000000000000000200d223b5973ad045189a955bfd2f2dee5836de27b52beef52524919504211e9f40000000000000001000000000000000000000000000000207fc92ac8e569eed4ff8e3c4f82dd4cde5b6e4918cc3e7ab8884fb26fd7b0080e0000000000000001000000000000000000000000000000207f46e4b2eb51c53f78fb1f6b5310d84183eb4d3898e8ddf3b3eb940fc2ad8f4400000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000080000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000001000000000000002042339e5d10b0a87ad4fe4a5593bdc05cee398a4a18ea7f97778781f69ff9d23900000000000000010000000000000001000000000000002014aa8e29f77d6a5fb881904df608256632c6604fbfb5192158e0932c0baf514500000000000000010000000000000001000000000000002093c99af014a3514bdcc84cdf0e72d42f20038a64dcba4071efdcce4cf6a76949000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000080000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020993982938287a52eaa295a8259c93c48d22125e67d985917441309ed46f8d051000000000000000100000000000000010000000000000020ff5c9eed6e4075d1dc3dad1312c9f0e4bcc23270345f8eea8c11a5b3619b24aa000000000000000100000000000000010000000000000020e23783733f2d245e0738ed8503ab8c6aef3aa526888e6b8dc670bfe0e224b8ff000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000800000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb626512000000000000000600000000000000010000000000000001000000000000002019898700bf26a87ccaa60ae2e22476343b05ba5277b4aabd5310269c5066b3a000000000000000010000000000000001000000000000002025a5c0035306c82abd392465404dd2a5af6ad78f6c662e811fb28ddd99a85857000000000000000100000000000000010000000000000020f0fde6ec22a87dce3563e4a3872da6fb65e744b1d395bcb2f83911d9ac21f1af00000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000800000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020b34deae4f55a4304383d1815b4b246037a6d5665c7dc3a6d049f37b7e6ed110100000000000000010000000000000001000000000000002043cf5ab0e85678ac1f5e9bc7f073456a624fb85b0ed8a97a19debe99aee3ef3b0000000000000001000000000000000100000000000000204f1d90aecc22386cf8bd2d60c6a2d6d6c43c1918619306fffdbd5f5dfb68cd920000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000080000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000209b2ceda6345229ee35c8f1d1ec5f70384bb152c4b78dd25b3534efa444f07101000000000000000100000000000000010000000000000020f9459a5f7f85273cda341000cf6866270e90827995d041cbba1ac42de920723c00000000000000010000000000000001000000000000002045bb9d506f74a19123d41a442d1de0fdfbaca183dfb2af0cc5027621a991b2b2000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000280000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000100000000000000203fc4f8175b9c92350566386ba4636deeb2ec6d4187f6d0d3208c3db577ee4c1a000000000000000100000000000000010000000000000020c600a084e5647679dce1e61667cd049aa01cd0b29e54cfef6b28350be80914810000000000000001000000000000000100000000000000200ebe305ff48b2729427a6d3d9c605f9d8749d8a7f371875c0845a2841f05d610000000000000000100000000000000000000000000000020c5955793ab286002e2bc4ea091ab49e689f85a1a02effe9360301649450f713e0000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000280000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020c6f1cc07680dcd75a8f53c63f310a6d897c61d167e7cf74e0c15cd99fc146e0f0000000000000001000000000000000100000000000000209fb59ccf252a0568bd152caf34d3269d3a2b9a39857511b0bd86c4af33ce8dee0000000000000001000000000000000100000000000000201cef524c4bbd4352e55a822f72b50f13a0d37a3b4bd840b09474319d06e88b350000000000000001000000000000000000000000000000204c549c0a06011a5b940afdd9c949f7c54668b0449c63f74f64a3a00d1cc2a37800000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002800000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000200669822d3814118c5bf694c1ff7d0ed5355d049614d73f0cd41e47c2ba90a4ec000000000000000100000000000000010000000000000020e967db82093a838375e88444bf31c8b9602b5b9abee7d1014d9faa70e9e2ee07000000000000000100000000000000010000000000000020b65635b650f7751f683d4fdd6f77a7bbbf3914c331798f8c0a5e9b5bdd294ca9000000000000000100000000000000000000000000000020d880ce6b358a2b77330b5a0f9481e98d6528b9d0ad6b480d03501c04a93a647f00000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002800000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020e5e45ef37559cefd4b7b859b43c99f93dea0082583489479c963bbe6850b6c72000000000000000100000000000000010000000000000020036e7df247ef476c62b0c60d8c733502d9c99e42211e6505526e56ba4d0eb688000000000000000100000000000000010000000000000020ec081a9e95c70f0fa23f8f9f16c399792701d8ccb5c6c2bd2fec49153d27321100000000000000010000000000000000000000000000002080b4067bde5f3114a4b55274822cf920b2a4ae2379db5763e4a3dabbb5558faf0000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000280000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d000000000000000600000000000000010000000000000001000000000000002029df8d814e6ad33e7598df99f56ae5a9d1e95069c3ba023194079a911304b748000000000000000100000000000000010000000000000020eb547fc519df191930772af4c7f9a223f448ea9b096d6bb0615a7ccf53da66a3000000000000000100000000000000010000000000000020a9fa262c6bfaa50ee132d4609ab35f935bfd510e97d33e942458c27041a0083a000000000000000100000000000000000000000000000020896402e4d3f17887d11d2154920c6bff134c98834a80f987cc702496ef09c196000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000320000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020cead2a72fa7974c8cd84b21e2362159483af9bb8274514838dfb974484a1575000000000000000010000000000000000000000000000002005bd0da2469f2c21b3a29c3fb9805e1c169b17d94f8f17fb27b467cf42de28db0000000000000001000000000000000100000000000000205f3c867463c166fd9c0125885c51251e20c9b8d44030db7f8c699a0f747c2522000000000000000100000000000000010000000000000020f006cf8352bbf180ccb81999dec2d0377abf32ec1a119242758d07bf00181499000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000320000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000205171129cc905c8d4a2a5e72692fa2146a126401361ba92ac1f21e9fc301a8f5600000000000000010000000000000000000000000000002065f01400d8c5267b0c9e1b41ef2836adc1616da98100daa5b32b8ba39b374ee10000000000000001000000000000000100000000000000201005d0456ea86f38d81d86687e8f11923a23456f3c2f3ff55d7c8acb9de64d690000000000000001000000000000000100000000000000208d5b321bbfd951f9cb7659d22f534c96ff102f4c76a497617e5abb9dfa82d388000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003200000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000208f12edd561d40b61d3d50b9d6b8679c0a5358ccf17fef9bd9448e821759aae630000000000000001000000000000000000000000000000204c94dd0a0f2cb0cb59dcc9b4beb35fd98efaa2cc92cf08466d21549d33875f98000000000000000100000000000000010000000000000020c777ac306a941e7299543eb8e965674fbfd21d8db21d4e6efb2f426e941de1bf00000000000000010000000000000001000000000000002077140c9519235b46e9281299155f5f67e417ff114e7ade36dfc35a5d9cd2e2d700000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003200000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000201cf667c93218461cd715e63b61f883b6ac7ff0f91a4b86acc95ef8c3296717ec000000000000000100000000000000000000000000000020ed96c4ea6aa26447890bc48910f7d9f42a4fb3d8af08a3a74346b72167154a40000000000000000100000000000000010000000000000020390db850e000e33e00c0ae3ae80c19561aeab2d6f4dd64e8c024820f8d12d8d50000000000000001000000000000000100000000000000206e7dc7fda7866ca355c1f89e48853a86a9d9b363159deb6fb5ef53aeda9b1c2400000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000320000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000205158bbe04522354f51ba354a6cc863746e521e6d494de5fa79dfe2a4e0a2524b0000000000000001000000000000000000000000000000204214f1b616812c5b41ff45c0d2acddfd991317d68de3ff1ed1900ce663f1230e0000000000000001000000000000000100000000000000200c26f3577db6f6fc8ca13505100d7c1f5e90088ce53af1ae45ddb54d2ffe746d00000000000000010000000000000001000000000000002072bbfd71e002ce04de2fac87c41cdb38dc917d8c5386b1ebdd6e02865da280340000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000050000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020df632d8f7473aa2a266c94e0516913189d640957a4f03bdfca986886fba478de000000000000000100000000000000010000000000000020358c6702aa7ce3c8bdcd46a395295b533449972ac93e65796c809d3843af3e0a0000000000000001000000000000000000000000000000205653a7aef6c658c2fe00a9e102931ec0732cfb210b3c0f9786685131d83170b8000000000000000100000000000000010000000000000020a901868ca86673679ffebd60291109f11d3ce9b29c0651f0236ea581bf3b3e75000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000050000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000208b5e31b3b9693fd99f4af22f146c47a96be5f96f6e2d1de7723eb81b05ab4517000000000000000100000000000000010000000000000020d8a894c95f18b89fc6b1966cca0468fb346cb33bd7ed5949846cd49fadfb28c5000000000000000100000000000000000000000000000020dbb74f6060a2f8daea889924e7610165d94588183449ef4022cf18b3bdaaf8d4000000000000000100000000000000010000000000000020a5ba1e43e43faaed55a5a360b6818e780f5c7442a5977ec37c50292584a00e03000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000500000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020a56fecf58a1a4c072cb8cf67dd9e508770f735536f8cd2a7c1e1ef73333f32730000000000000001000000000000000100000000000000203d0c857c0178a4e206fc089efb3766ddb437e7a682bbeb9802198aa092a8cc08000000000000000100000000000000000000000000000020c358e6ecb6ab0ba0349b872be0aacb00d8660c507286f1680572dd7de7bbdb46000000000000000100000000000000010000000000000020dc0369b2684d24cbf4274ce023a89e3478b29bfaee34efd0a4da1dc660ba45de00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000500000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde5612000000000000000600000000000000010000000000000000000000000000002096f094a6602bd56e3fdd7454ff1de6f239ff9ba2160ed7e7dbd581c07e7298b3000000000000000100000000000000010000000000000020abfab965e1bf6cc3bfa115844249f4e149ced0f88305f6e235d5b0b6f7398198000000000000000100000000000000000000000000000020c62d3f9397d25d4182cc5fa403188738101f5716278eb7fc0fc099f997828801000000000000000100000000000000010000000000000020c688afd14b4c37a8a8e28ec89af67123a3f9061af3bde671dc85b8ea75d9c04d000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000050000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020686d0a06f4ae390f0f7c009a298fc5272f1d751bfc23c567191f5f4bf85d9d6f0000000000000001000000000000000100000000000000202ed66359469b6c278e6162debbe51b6122cbf7aa0d285a925131c0f1651813ad000000000000000100000000000000000000000000000020dea113f87fef53166cf17cc40d78ddf07d9d08926378c792877f7ff4d200a8ed0000000000000001000000000000000100000000000000205a4b48d2d5c0deec9a967d4659defb7f8c12de581186bfae2c710f30835d378c000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb81659000000000000000b0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000000000000000000002039b919da8460a7ced2f434d93e191c2e5f3ed6c16c5a563dde2d4088fe06329200000000000000010000000000000000000000000000002077631bed7d662ca95d374bb50963259dbae6fd85816b13bb5b057a5a051aa21b00000000000000010000000000000001000000000000002093c99af014a3514bdcc84cdf0e72d42f20038a64dcba4071efdcce4cf6a76949000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000000b0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000205927b440119d91d39c3733f63f01775abc00426dddfe05736c43d2ec0905363a000000000000000100000000000000000000000000000020e36620d473cd1c4b96249370e894999a209a749fa70fb571d7cdc8d7dd5f2e54000000000000000100000000000000010000000000000020e23783733f2d245e0738ed8503ab8c6aef3aa526888e6b8dc670bfe0e224b8ff000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000b00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000204882930d8658cd73eb924ef4d6ae5265e5f946d6d6e4198a4fa473b0c46262050000000000000001000000000000000000000000000000207ef9b1eced9bdd4e378e5106730b3ce6e1a70306d54252b4b0f320e029c8e300000000000000000100000000000000010000000000000020f0fde6ec22a87dce3563e4a3872da6fb65e744b1d395bcb2f83911d9ac21f1af00000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000b00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000206491a91ff0421451f2ef7fbe94620ba91944038a61de6868fa0a84fd19f722510000000000000001000000000000000000000000000000205dfcd91798a2e45492d1e43f02db0987d2a4638e5cf53f99282d826f22e208180000000000000001000000000000000100000000000000204f1d90aecc22386cf8bd2d60c6a2d6d6c43c1918619306fffdbd5f5dfb68cd920000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000000b0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020dbe2f7949c2848e292bebf1a30a4e72f4262acd55370a4d9815d9aa7bcaa012000000000000000010000000000000000000000000000002016c3a237b73b54311219f282ce47e3b5a782e5274e048bda1d6866b9819192e300000000000000010000000000000001000000000000002045bb9d506f74a19123d41a442d1de0fdfbaca183dfb2af0cc5027621a991b2b2000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000260000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000100000000000000205ad883312aa88562cf385178730267043900694b0b01c2234e202a67c428abaf000000000000000100000000000000000000000000000020ea0130bd476a2e99ed6edb948b6cb09cfecc8dd59caba4fc389609df359d15860000000000000001000000000000000000000000000000204cb7b4fa816710180675ddbc955531f8a709d427faf5200cdc6737874e060a55000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000260000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020414865cf4023e03fb5c98fc94f1afd26c3a460aca077222e25d930a4220f4db90000000000000001000000000000000000000000000000201e9235801c669c50c2b370f79c4c01eedac2bd811e7882f3c3ae07b72c66516100000000000000010000000000000000000000000000002037a9c624bdb25b1ee261b13411e9d6acc0d0e8c738496cff14dc43abe65c9d1f000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002600000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020cc2e00785e9824e205b01768c83ffa5c02315f61334fe0670ce06b07eae698d3000000000000000100000000000000000000000000000020437286cce94ee481fb2d34b75a26a24d22661f691749677c792af071c156ccba0000000000000001000000000000000000000000000000205d6c3e37441823be85bdf046e1379fc5587812c68dc08d8750f2f6bd76bf08a100000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002600000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000208fab59761e6aa7f43f44320108dd08532623f57759c14680b08b6ba696e7fcb5000000000000000100000000000000000000000000000020c53bcd46d6bd106eb9fd8a01d0376b114ad193213375dc742f10e3d1c5de5dc4000000000000000100000000000000000000000000000020a3d9e1ced1896a9083f68bbabe3bb9574542b5eb5d38128a466f4b97c8a833410000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000260000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020dceccd7648b46c6136ae8027593d0005d441a51e50114030e8b908e8accac7100000000000000001000000000000000000000000000000207fc92ac8e569eed4ff8e3c4f82dd4cde5b6e4918cc3e7ab8884fb26fd7b0080e0000000000000001000000000000000000000000000000207f46e4b2eb51c53f78fb1f6b5310d84183eb4d3898e8ddf3b3eb940fc2ad8f4400000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000330000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000000000000000000207344f3e7f6af9883c597d6e1f3a288c3ffc6aceb35435477812a31e3317c741900000000000000010000000000000000000000000000002005bd0da2469f2c21b3a29c3fb9805e1c169b17d94f8f17fb27b467cf42de28db0000000000000001000000000000000100000000000000205f3c867463c166fd9c0125885c51251e20c9b8d44030db7f8c699a0f747c2522000000000000000100000000000000010000000000000020f006cf8352bbf180ccb81999dec2d0377abf32ec1a119242758d07bf00181499000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000330000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020e531ed69121bdf5b18ac52087e7e317b94e4f8c8b4269cef4cc727a80b662a5500000000000000010000000000000000000000000000002065f01400d8c5267b0c9e1b41ef2836adc1616da98100daa5b32b8ba39b374ee10000000000000001000000000000000100000000000000201005d0456ea86f38d81d86687e8f11923a23456f3c2f3ff55d7c8acb9de64d690000000000000001000000000000000100000000000000208d5b321bbfd951f9cb7659d22f534c96ff102f4c76a497617e5abb9dfa82d388000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003300000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000206c87f4016feeab616e7bf0a7df62142470188914fe59e59df595763e4d47b9fe0000000000000001000000000000000000000000000000204c94dd0a0f2cb0cb59dcc9b4beb35fd98efaa2cc92cf08466d21549d33875f98000000000000000100000000000000010000000000000020c777ac306a941e7299543eb8e965674fbfd21d8db21d4e6efb2f426e941de1bf00000000000000010000000000000001000000000000002077140c9519235b46e9281299155f5f67e417ff114e7ade36dfc35a5d9cd2e2d700000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003300000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde5612000000000000000600000000000000010000000000000000000000000000002016aa670cb9c392a24457f41794374ee6da1e53744962cc0c6acbd050eb58bbe6000000000000000100000000000000000000000000000020ed96c4ea6aa26447890bc48910f7d9f42a4fb3d8af08a3a74346b72167154a40000000000000000100000000000000010000000000000020390db850e000e33e00c0ae3ae80c19561aeab2d6f4dd64e8c024820f8d12d8d50000000000000001000000000000000100000000000000206e7dc7fda7866ca355c1f89e48853a86a9d9b363159deb6fb5ef53aeda9b1c2400000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000330000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000000000000000000209b701f655210684798519c7d21d381389c5327f76961549a9e47317288332b210000000000000001000000000000000000000000000000204214f1b616812c5b41ff45c0d2acddfd991317d68de3ff1ed1900ce663f1230e0000000000000001000000000000000100000000000000200c26f3577db6f6fc8ca13505100d7c1f5e90088ce53af1ae45ddb54d2ffe746d00000000000000010000000000000001000000000000002072bbfd71e002ce04de2fac87c41cdb38dc917d8c5386b1ebdd6e02865da280340000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000120000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020ab63dfd21d91db64c30c6ff03a0ac64ef7387ace22e915709bee4b1cce4734ac00000000000000010000000000000000000000000000002077c77d7b993f04ae31fa6b6da7dff3c353004c11a049302a478e5dac04d508cf00000000000000010000000000000001000000000000002038c257c4acc7ae148c5c9b4409c82130df8554a30c1e722962697197980c56fb000000000000000100000000000000010000000000000020f158609c6b12d3609bdf1c7797edb538f985fe8ac4171f066b1d7b9c43c7bc3b0000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000120000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e000000000000000600000000000000010000000000000001000000000000002046817fed75d4f02d731e97cf463418460dc149d4119eb395174cdc29bc56e05c000000000000000100000000000000000000000000000020410a9806148029c00be1c6575ce39cab980947f62d7b8c905215b520e160aa17000000000000000100000000000000010000000000000020d42e2ebd255e4349a7739a43dd3c719944636248abdb0bced6a610501e96e1b50000000000000001000000000000000100000000000000204dffb3cd723081a5601c700b71267e003c6301f69868c0143c1c7fb7f95e7282000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001200000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020e494797516182db07045c44685dc909e4d27f6cb9bb45a2bd77f46ca3361da950000000000000001000000000000000000000000000000200d8eb352cc26ae30ac8e735bd07c4afc629f8b935a6281b4a5d795206646f134000000000000000100000000000000010000000000000020fe4fd380a7b985c22fbf7e428d0522af491d32b3707fdee9600cc7816056f1200000000000000001000000000000000100000000000000205d9455d420eacea118c8dd606eeb03972280069211e33523e74b32b8a0a96ea70000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001200000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde5612000000000000000600000000000000010000000000000001000000000000002026e17b5593d9c9ab8c323e2573cf348fa9f24688ab28f6987794d8cb47cf2cbd0000000000000001000000000000000000000000000000208b2c6fb284495361570ac35906987ec69aac6f52d77a3365b4f5bb2c461481e5000000000000000100000000000000010000000000000020b1f416af255af2c4c5d556e92ec09f445ddc4c0c1d4ce617e48781cc7fbb0859000000000000000100000000000000010000000000000020edddd053de62a5ab03c84705265b32ce7f3371bbb58bce16ef49c97190097e6400000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000120000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020ace56f983bb3454baa46bf315ca6356b2478c79693612cba0ec17f56ab0277cd0000000000000001000000000000000000000000000000201cc2cb225f6ceb4dc0af62c3e4cdbff8b47664cb0876a05b70204156dc6ba240000000000000000100000000000000010000000000000020113e52f83563f3c9a8ca73087daed63db6e020f9b1908dae270f2d864860470b0000000000000001000000000000000100000000000000207558d367d7cb8046d18c333db9b72e09bb6459368f028b50b23b205b8ad03c430000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb81659000000000000002b0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000000000000000000202cc0a05107243620d3b647e265e82b8acebe905524da6da10e8bac593830a70900000000000000010000000000000000000000000000002064f12c9571923baec5fcc14481a7dfea3e02c1bfc8c062111edc34018395b7160000000000000001000000000000000100000000000000200ebe305ff48b2729427a6d3d9c605f9d8749d8a7f371875c0845a2841f05d610000000000000000100000000000000000000000000000020c5955793ab286002e2bc4ea091ab49e689f85a1a02effe9360301649450f713e0000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c7000000000000002b0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020449a30f4fedf230c522be5fd070605f8c9841aa6e05ecc8c29e9c0fdcb6e0734000000000000000100000000000000000000000000000020372b730b0fbf5e9e53c6d82f9ea174dfa93e2b45f3d0604b1487c24ff8cbe32c0000000000000001000000000000000100000000000000201cef524c4bbd4352e55a822f72b50f13a0d37a3b4bd840b09474319d06e88b350000000000000001000000000000000000000000000000204c549c0a06011a5b940afdd9c949f7c54668b0449c63f74f64a3a00d1cc2a37800000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002b00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020949208691c206267cc3f83f0c03ce97b7123fb6e5291ad80e84b0246ebcd7ca0000000000000000100000000000000000000000000000020c08b6a80530ce28ab631eb2d126ffb2acdf90182e03c3ef66853b7e4fb457d93000000000000000100000000000000010000000000000020b65635b650f7751f683d4fdd6f77a7bbbf3914c331798f8c0a5e9b5bdd294ca9000000000000000100000000000000000000000000000020d880ce6b358a2b77330b5a0f9481e98d6528b9d0ad6b480d03501c04a93a647f00000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002b00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000204a132d7cc07f5134489ab1f268a0a0fcb03923e8a54c3c8bc45ca30c35d8f53a000000000000000100000000000000000000000000000020a7ba13d535a98ec1b3455d6255386df5189a1072df21c71309d40ee1bf4c4b18000000000000000100000000000000010000000000000020ec081a9e95c70f0fa23f8f9f16c399792701d8ccb5c6c2bd2fec49153d27321100000000000000010000000000000000000000000000002080b4067bde5f3114a4b55274822cf920b2a4ae2379db5763e4a3dabbb5558faf0000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e000000000000002b0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000000000000000000206e80d8e8df8fcc98c25ad548d5465c15309cc9d0d3e0bd25f4378ce44b8b29570000000000000001000000000000000000000000000000200892a3f42888ca3862bea9ccf078bd63e0266f46f3fe49a9cca5cb8700d0934d000000000000000100000000000000010000000000000020a9fa262c6bfaa50ee132d4609ab35f935bfd510e97d33e942458c27041a0083a000000000000000100000000000000000000000000000020896402e4d3f17887d11d2154920c6bff134c98834a80f987cc702496ef09c196000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000240000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020c24fc0a3e994aa4053143723d1ff953730e09d80308264f57f5e25286c7dcad00000000000000001000000000000000100000000000000204f58496d9785dbfafadd8f41e3167831200b5d8065731cf35b12e0f683eb6aba0000000000000001000000000000000000000000000000204cb7b4fa816710180675ddbc955531f8a709d427faf5200cdc6737874e060a55000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000240000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020a92607495561c9eeccd26d9cc9dfab304f5bdec362795340e1d8d93b162ff7f5000000000000000100000000000000010000000000000020056c9a4c4349cd5028c19714d82d2521d603233c99689f9551773f4c5a1bb87400000000000000010000000000000000000000000000002037a9c624bdb25b1ee261b13411e9d6acc0d0e8c738496cff14dc43abe65c9d1f000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002400000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000204be0b5c554d14ed3ecb1a4698c54f322ec73fcaf89c1a0d0f2287a93c2b4d62b0000000000000001000000000000000100000000000000203decfa57715a83c44aa9af101d28b91339338f8855c0070ab1a2c91f7f429ec30000000000000001000000000000000000000000000000205d6c3e37441823be85bdf046e1379fc5587812c68dc08d8750f2f6bd76bf08a100000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002400000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000200370955e846619f8053e6518604dd4a3a3876d31542c70a179b9e62113e70de20000000000000001000000000000000100000000000000203b43d69496b15a1de8d88791e245f0f4c9ce3d08e47827d61f0ae96ed0fb8464000000000000000100000000000000000000000000000020a3d9e1ced1896a9083f68bbabe3bb9574542b5eb5d38128a466f4b97c8a833410000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000240000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000201dd42fc16aa12a31fa90168725c897d861f7e36b8c27441380a55b1025146bcc000000000000000100000000000000010000000000000020a80602202c5ebf9b0347c9106ef91bf2c358dd05edffa7aa90f9b9bd47fd10500000000000000001000000000000000000000000000000207f46e4b2eb51c53f78fb1f6b5310d84183eb4d3898e8ddf3b3eb940fc2ad8f4400000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000000c0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020724ffd0f25aa4e243d2c307552ed37381703107372320593eb3a4d313b319f910000000000000001000000000000000100000000000000207632194eaa79882c73a99557dd547ccd6fd120c5b43667fce4768d60ee466a6d000000000000000100000000000000000000000000000020266533c386eaecf62505c82a33fc748ed3dfb0dd1f1c3b6ef1c350f30907840f000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000000c0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000202ac7747cd68e0e8f386445c4b73e691738da5997681898b63d8a1fdd2f7318d500000000000000010000000000000001000000000000002048f8483f7e54318f5880730aa74c25c4d947a419c1457363fa11f33292ddacb10000000000000001000000000000000000000000000000203e730a9762014a0bc462be90ae606e5d47c72eb18f70e7e52e6fdbf0e6f0ca51000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000c00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000204ac156fe78cb66cc11b0523329bdc9822cfc7ef36d86d1a58cac556bedacedaf00000000000000010000000000000001000000000000002010b0493443555dc67ee87c1bd8063b9e36aa14d724f309f7e8809f3a39a534e30000000000000001000000000000000000000000000000200f6629916e8ea9140c1e5fe82516b014e06c6a7ffb9a27dbe8073629cf7bcfd300000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000c00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000201376c8ebc60bc7ac345e110600c578a9251d294fde213df2b39d2d10af7b72ab0000000000000001000000000000000100000000000000202278c1169f697b84d00147af89a2646538a6511cffad2faa7b319e55d636471d000000000000000100000000000000000000000000000020366469e7d59d6bc640bafe4261eac135e7f403c7d83905ecb45477e3f080df680000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000000c0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020547e4936c71929988cb4f1df9bc7e773529a27708006dacd48b89d487eac4d8b00000000000000010000000000000001000000000000002021bc05aef3a17c8a1d63eb499367fa51cd6c2c3b2716d1cd6b8c11c4a3b3722a0000000000000001000000000000000000000000000000204b3a8c95985e02c1091d8b74e359262a94d60b3baac08c1afc3d4c34b039a42b000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000350000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000000000000000000207c94017f1fb6147ba3e921f88be16fe2b5cefa8f7a8b23bc85945becaf18382a000000000000000100000000000000010000000000000020c362cab2e6c4dc6ea82bb6f4ded48e2f8eb7e24ef0fa0baea7e88c5951f51ecf000000000000000100000000000000000000000000000020cacc7d788bbdb1c4d5dbf47f8afd9ed9b975d2203ba1769a80caa833f3fbb946000000000000000100000000000000010000000000000020f006cf8352bbf180ccb81999dec2d0377abf32ec1a119242758d07bf00181499000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000350000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000203e110ccc27f78d2053b055f013cd3746e7bb8e9db6260646682e83a67cf2080f0000000000000001000000000000000100000000000000204f8481d122e0655a5260d7d5ac27ab8f58be0e674599e596783b978e063f1e4d00000000000000010000000000000000000000000000002073a7127e76a6c5c3b45234b5814ccbf96b9d757a279114bbd33a663bd26d006e0000000000000001000000000000000100000000000000208d5b321bbfd951f9cb7659d22f534c96ff102f4c76a497617e5abb9dfa82d388000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003500000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000205c174de57ccd50a28402e5fe1ac358f81a0f7ae683941bf6d81ef41e7caf2cef000000000000000100000000000000010000000000000020121197ec56ab41beb7a2f051161dd268ccd5ab29e7d0b6fef8b7e1c7c912753d000000000000000100000000000000000000000000000020f4ad74e02cc77efb94d4fc24ec0d3cf9f818ea30d8cf64bbb281e90b63c46a2e00000000000000010000000000000001000000000000002077140c9519235b46e9281299155f5f67e417ff114e7ade36dfc35a5d9cd2e2d700000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003500000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000202fa4ac550529035814628c9da6d34b854e2a5083328271a82f751f264dbf6c1400000000000000010000000000000001000000000000002067226b90193009f7118b9957cd1068f23619b6391626b22bf9e3e5fb65d6de0c000000000000000100000000000000000000000000000020d768ed1004f4f79b0247ea83ba442c3f53078cd77f5117de4e9c23b0093631e50000000000000001000000000000000100000000000000206e7dc7fda7866ca355c1f89e48853a86a9d9b363159deb6fb5ef53aeda9b1c2400000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000350000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000000000000000000208bfdca08db4332963e4f3e7a1f79f20c4c20d76672a80052bd13acab15a38546000000000000000100000000000000010000000000000020423d33b2be9113539696ac1ed9a134a1d7a1b4932f513b45a8fe1547e6621966000000000000000100000000000000000000000000000020f8cfa931b1b7944fb737694c4d6fc033dc405917f38330a742d6f02d503c8a1b00000000000000010000000000000001000000000000002072bbfd71e002ce04de2fac87c41cdb38dc917d8c5386b1ebdd6e02865da280340000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000001a0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000001000000000000002009cefee4d021530099af80f0676e54eff00d072d7fd616fcdb2288ae33ddb24800000000000000010000000000000000000000000000002025869b3bfc83d2ac9e22b0435bc7b9eecebd9af67bb1ab70c73af73bbfb82aaa00000000000000010000000000000001000000000000002041b447898ab19c91b1dbde93ea50c40354c2647926dd2df1d267edeeb4fa5b900000000000000001000000000000000000000000000000207a1424d413417eb28a018fd1d76958181366ee57c4d59ae0034a29ddbb1d2b590000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000001a0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020f3e9b72a0041d0c66a3e6f6625fc04c5539313c511cdd6a586989afac9a1b0af00000000000000010000000000000000000000000000002041147c76c450b91332ff9d973d13a33037d91aaaca22c1d66385e4ed40e50191000000000000000100000000000000010000000000000020376d244ad38898e5a2d4a5d1596faa89190bb6be0021523a316dc31147bdabe8000000000000000100000000000000000000000000000020938375cf40ac56222ab4d00edc1add4f0c4d45658ef352f9c39d534a9202dcf7000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001a00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020ee12792c269ee62c96fd33207133457b00d6b8b273d00b455a63626a68f21e1d00000000000000010000000000000000000000000000002042f268227dd51fd9f23092f150e7151ec9f12d0eaf3f3116352ac137f19736370000000000000001000000000000000100000000000000202b1f2b796b4b368a82c2fd19089c52aa941915742b1944326d6efc9a8bedb715000000000000000100000000000000000000000000000020a084e70b3f9ebf137fa0b89422463d8a968230d1e0fbcf139db6e018b78315170000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001a00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020b55d267cfca83131fe62aa2caa4c0f53b0956f986c71ac1ecba8812f52def2dc000000000000000100000000000000000000000000000020d0711370d762ff69055e61e27a89196d1938f24b806ff70c0bad0e85936448ca000000000000000100000000000000010000000000000020fc8359a37b14fb43c09c48b566d14f74e47c7a14a37d07ece74a19f83c2fb3d90000000000000001000000000000000000000000000000201b22228829ef8466b89319e35bebfd9d707cdce2b965fa152aa852ec7bc0550b00000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000001a0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020d4660d76c35c4c72ab942a343819d591a48890954c928b6afccd50470030149600000000000000010000000000000000000000000000002041ef9ef075bee5105dc3e8a7900702252e6ad08065d22b9ab3ca5355dd98330a000000000000000100000000000000010000000000000020b669e28a8c8f93a11d50fc751d11cbd5c19eef7f4f73ab6849b9e5fb805ced8b0000000000000001000000000000000000000000000000205ef7704fa3778b449f726e5d0a98cf0942526fc336765751838fd6cbb761fb270000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb81659000000000000003c0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020273f7475a15fd0396c47b30cd7561abb6e08ae76b45a1e0e408916144079e75d000000000000000100000000000000010000000000000020fa95b871dc336a316326fbcb301108e4f714f2bd6e602d361ed24b034855b7490000000000000001000000000000000000000000000000206d638b48c620681d9ca1f3ca0b9269a4c587a473d6a7f7a9b87cd38c6b341a88000000000000000100000000000000000000000000000020228ad46578c60a8ae293c5203eb65e05045bb3651cc7f9dca5fdd52a9c021f9f000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c7000000000000003c0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e000000000000000600000000000000010000000000000001000000000000002036962f5977ea5541488032e1cce4f44180c5480829010190ba9ae66a9ca2cd2d000000000000000100000000000000010000000000000020be85ed65a5a68087be9d2be76ba091a1b670d33ace117026a041765c69a90fda00000000000000010000000000000000000000000000002066f2ddc800c59423dc3e6cb06ec895471d3ffafc6e3140cc34d397e66f29e633000000000000000100000000000000000000000000000020d3fe0ac3f0592a168395476738f2d379d0581dd02807271399e479432d094ace000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003c00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000205a2fe717ccd1a37afc920d1f76fdde9b00b03821e87637dbc7ab2e32c4eb78da00000000000000010000000000000001000000000000002008aa7b0ca169d528158edb0c24743f0b68eacab6edcaa15ac970d1c5072772c3000000000000000100000000000000000000000000000020a72b7e194afd50ecaf1e33d2066f71486bac78d487b7fa0426a92e4a9ea310c9000000000000000100000000000000000000000000000020762aa6b8eaa622a60e5d82075304926867e1bfd72e6c9bc93d7ed5c083f0de9d00000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003c00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde5612000000000000000600000000000000010000000000000001000000000000002033adac059474496d2f133c020b27a85a28c5b0ca697ba8f2839ec080abed8abf000000000000000100000000000000010000000000000020a433453c38c702abb120c533f3465b6a6b7e1db6d13e7092fc619f5c3419a92d000000000000000100000000000000000000000000000020a0b752832853381428dd39d3c505f530ad3b788eb8fb6bfbbd02830255826a670000000000000001000000000000000000000000000000204c0b855bed07188b0ec696adf334ba750b253be49e0d11744e67c1884683e5e500000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e000000000000003c0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000205b792c7369f97b8891deb0e8d0dbf32280fd9125a35c3bf0b3c02cb3b6090b630000000000000001000000000000000100000000000000200b795fddac1038a433c2c495ff393bde6b796f79e6ab17e827c1139be158bd2f000000000000000100000000000000000000000000000020a85d79547366d8e08f2cd889f73768075efa9a82bdcfd8eca2a0d03ec1c600af000000000000000100000000000000000000000000000020e275f0cac8a965b7c2d52bccf2fc2a08ba897eccce8ac56d94090bd934b9477a0000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000240000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020c24fc0a3e994aa4053143723d1ff953730e09d80308264f57f5e25286c7dcad00000000000000001000000000000000100000000000000204f58496d9785dbfafadd8f41e3167831200b5d8065731cf35b12e0f683eb6aba0000000000000001000000000000000000000000000000204cb7b4fa816710180675ddbc955531f8a709d427faf5200cdc6737874e060a55000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000240000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020a92607495561c9eeccd26d9cc9dfab304f5bdec362795340e1d8d93b162ff7f5000000000000000100000000000000010000000000000020056c9a4c4349cd5028c19714d82d2521d603233c99689f9551773f4c5a1bb87400000000000000010000000000000000000000000000002037a9c624bdb25b1ee261b13411e9d6acc0d0e8c738496cff14dc43abe65c9d1f000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002400000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000204be0b5c554d14ed3ecb1a4698c54f322ec73fcaf89c1a0d0f2287a93c2b4d62b0000000000000001000000000000000100000000000000203decfa57715a83c44aa9af101d28b91339338f8855c0070ab1a2c91f7f429ec30000000000000001000000000000000000000000000000205d6c3e37441823be85bdf046e1379fc5587812c68dc08d8750f2f6bd76bf08a100000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002400000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000200370955e846619f8053e6518604dd4a3a3876d31542c70a179b9e62113e70de20000000000000001000000000000000100000000000000203b43d69496b15a1de8d88791e245f0f4c9ce3d08e47827d61f0ae96ed0fb8464000000000000000100000000000000000000000000000020a3d9e1ced1896a9083f68bbabe3bb9574542b5eb5d38128a466f4b97c8a833410000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000240000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000201dd42fc16aa12a31fa90168725c897d861f7e36b8c27441380a55b1025146bcc000000000000000100000000000000010000000000000020a80602202c5ebf9b0347c9106ef91bf2c358dd05edffa7aa90f9b9bd47fd10500000000000000001000000000000000000000000000000207f46e4b2eb51c53f78fb1f6b5310d84183eb4d3898e8ddf3b3eb940fc2ad8f4400000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000001a0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000001000000000000002009cefee4d021530099af80f0676e54eff00d072d7fd616fcdb2288ae33ddb24800000000000000010000000000000000000000000000002025869b3bfc83d2ac9e22b0435bc7b9eecebd9af67bb1ab70c73af73bbfb82aaa00000000000000010000000000000001000000000000002041b447898ab19c91b1dbde93ea50c40354c2647926dd2df1d267edeeb4fa5b900000000000000001000000000000000000000000000000207a1424d413417eb28a018fd1d76958181366ee57c4d59ae0034a29ddbb1d2b590000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000001a0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020f3e9b72a0041d0c66a3e6f6625fc04c5539313c511cdd6a586989afac9a1b0af00000000000000010000000000000000000000000000002041147c76c450b91332ff9d973d13a33037d91aaaca22c1d66385e4ed40e50191000000000000000100000000000000010000000000000020376d244ad38898e5a2d4a5d1596faa89190bb6be0021523a316dc31147bdabe8000000000000000100000000000000000000000000000020938375cf40ac56222ab4d00edc1add4f0c4d45658ef352f9c39d534a9202dcf7000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001a00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020ee12792c269ee62c96fd33207133457b00d6b8b273d00b455a63626a68f21e1d00000000000000010000000000000000000000000000002042f268227dd51fd9f23092f150e7151ec9f12d0eaf3f3116352ac137f19736370000000000000001000000000000000100000000000000202b1f2b796b4b368a82c2fd19089c52aa941915742b1944326d6efc9a8bedb715000000000000000100000000000000000000000000000020a084e70b3f9ebf137fa0b89422463d8a968230d1e0fbcf139db6e018b78315170000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001a00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020b55d267cfca83131fe62aa2caa4c0f53b0956f986c71ac1ecba8812f52def2dc000000000000000100000000000000000000000000000020d0711370d762ff69055e61e27a89196d1938f24b806ff70c0bad0e85936448ca000000000000000100000000000000010000000000000020fc8359a37b14fb43c09c48b566d14f74e47c7a14a37d07ece74a19f83c2fb3d90000000000000001000000000000000000000000000000201b22228829ef8466b89319e35bebfd9d707cdce2b965fa152aa852ec7bc0550b00000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000001a0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020d4660d76c35c4c72ab942a343819d591a48890954c928b6afccd50470030149600000000000000010000000000000000000000000000002041ef9ef075bee5105dc3e8a7900702252e6ad08065d22b9ab3ca5355dd98330a000000000000000100000000000000010000000000000020b669e28a8c8f93a11d50fc751d11cbd5c19eef7f4f73ab6849b9e5fb805ced8b0000000000000001000000000000000000000000000000205ef7704fa3778b449f726e5d0a98cf0942526fc336765751838fd6cbb761fb270000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000020000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000100000000000000204c4213b8ed6ea438e76fb7a3f0ddfebfefa23ab51e70c6c91df1ad3848bb66df000000000000000100000000000000000000000000000020bc0e1e4d069a85667d831c6131bf23b47a10f808276f2d639351a2b29c6601f100000000000000010000000000000001000000000000002049b18f4c7c36a3e31f7aea5854ff3a4295357e9b4683efeb0cc263602c4cd838000000000000000100000000000000010000000000000020a901868ca86673679ffebd60291109f11d3ce9b29c0651f0236ea581bf3b3e75000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000020000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000200e21bfcc5f0a260057485e5692c12e5a0fbaaa2135ceb2978d8b4a7e338a0a5b000000000000000100000000000000000000000000000020dd758e7e903cea5d2b8d56cb7ec81903a5d208516bc65446aaab10a4c88881f6000000000000000100000000000000010000000000000020c8ae564fce614307d01ae4e7ca514b4d438c025236d2f7c225df0916122c407a000000000000000100000000000000010000000000000020a5ba1e43e43faaed55a5a360b6818e780f5c7442a5977ec37c50292584a00e03000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000200000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000206b5e3dab572cbb0a42ab168e22bc95bd8355ba8b9677f3eb46a5b40933009120000000000000000100000000000000000000000000000020e921a3304310ce0c4ea3ff193bc2b8d3e37939557d88c4c9d8d9aa74dade5fce0000000000000001000000000000000100000000000000202d7e532bdad475f87cde4c2f0d86dfd080e22978cd3c4c8658c88cec2b0257b1000000000000000100000000000000010000000000000020dc0369b2684d24cbf4274ce023a89e3478b29bfaee34efd0a4da1dc660ba45de00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000200000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020284c5ff80fb9809a8df3fcb0151023fd481b626d8191c2faf3cfde0c2b7cd375000000000000000100000000000000000000000000000020b744282bcca0328fe4d2e9489a2c025b97f14330407434a34cb1a2c08a12db6700000000000000010000000000000001000000000000002022908e8aa5e7ee0ba596d402b9b3acde0a7b078dd75472fcee67d43eac809840000000000000000100000000000000010000000000000020c688afd14b4c37a8a8e28ec89af67123a3f9061af3bde671dc85b8ea75d9c04d000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000020000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000203c541654bc7b4627cfdb4febfef2e5c2d1ed3307ff77376b78ab5b907fb199a6000000000000000100000000000000000000000000000020898c87da14d35ffd206c40c659830a17aafcb7a087947604f6abe545e28b58840000000000000001000000000000000100000000000000206ba2588cc21b5cda24b2aa86f1ea326163ccc1d7e3f79cd11177546b0f9520e80000000000000001000000000000000100000000000000205a4b48d2d5c0deec9a967d4659defb7f8c12de581186bfae2c710f30835d378c000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000050000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020df632d8f7473aa2a266c94e0516913189d640957a4f03bdfca986886fba478de000000000000000100000000000000010000000000000020358c6702aa7ce3c8bdcd46a395295b533449972ac93e65796c809d3843af3e0a0000000000000001000000000000000000000000000000205653a7aef6c658c2fe00a9e102931ec0732cfb210b3c0f9786685131d83170b8000000000000000100000000000000010000000000000020a901868ca86673679ffebd60291109f11d3ce9b29c0651f0236ea581bf3b3e75000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000050000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000208b5e31b3b9693fd99f4af22f146c47a96be5f96f6e2d1de7723eb81b05ab4517000000000000000100000000000000010000000000000020d8a894c95f18b89fc6b1966cca0468fb346cb33bd7ed5949846cd49fadfb28c5000000000000000100000000000000000000000000000020dbb74f6060a2f8daea889924e7610165d94588183449ef4022cf18b3bdaaf8d4000000000000000100000000000000010000000000000020a5ba1e43e43faaed55a5a360b6818e780f5c7442a5977ec37c50292584a00e03000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000500000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020a56fecf58a1a4c072cb8cf67dd9e508770f735536f8cd2a7c1e1ef73333f32730000000000000001000000000000000100000000000000203d0c857c0178a4e206fc089efb3766ddb437e7a682bbeb9802198aa092a8cc08000000000000000100000000000000000000000000000020c358e6ecb6ab0ba0349b872be0aacb00d8660c507286f1680572dd7de7bbdb46000000000000000100000000000000010000000000000020dc0369b2684d24cbf4274ce023a89e3478b29bfaee34efd0a4da1dc660ba45de00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000500000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde5612000000000000000600000000000000010000000000000000000000000000002096f094a6602bd56e3fdd7454ff1de6f239ff9ba2160ed7e7dbd581c07e7298b3000000000000000100000000000000010000000000000020abfab965e1bf6cc3bfa115844249f4e149ced0f88305f6e235d5b0b6f7398198000000000000000100000000000000000000000000000020c62d3f9397d25d4182cc5fa403188738101f5716278eb7fc0fc099f997828801000000000000000100000000000000010000000000000020c688afd14b4c37a8a8e28ec89af67123a3f9061af3bde671dc85b8ea75d9c04d000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000050000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020686d0a06f4ae390f0f7c009a298fc5272f1d751bfc23c567191f5f4bf85d9d6f0000000000000001000000000000000100000000000000202ed66359469b6c278e6162debbe51b6122cbf7aa0d285a925131c0f1651813ad000000000000000100000000000000000000000000000020dea113f87fef53166cf17cc40d78ddf07d9d08926378c792877f7ff4d200a8ed0000000000000001000000000000000100000000000000205a4b48d2d5c0deec9a967d4659defb7f8c12de581186bfae2c710f30835d378c000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000230000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000000000000000000002024f3af1b1647bb312c015a48502bdcba582529e56718776c1cf05694f83b3cf10000000000000001000000000000000000000000000000204b06bb483c21112f9cdd7eff56256a5630233353d836a5d668685bfdc6a4041e000000000000000100000000000000010000000000000020d80cc5cdbb0ec297cddfda4fd988de76b705f83576117fb5ed10b48a9b959bb0000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000230000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e000000000000000600000000000000010000000000000000000000000000002026d903d0be54bf22c5189d1118bd93f6a98c383d8d88d66724bfe911e82b2b74000000000000000100000000000000000000000000000020393cccd066625747c7bb15e378554916665b267344c9bf3a1f1e239b4d3166fc00000000000000010000000000000001000000000000002072ecff12c730f10ff239ae5d5ec6e0ecd7a93d7c6f58e48faaf9efc69af68a03000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002300000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020315f848ff4d7d38fb384ae430ef99536792647667ccb2454dc022ec7a768aaf4000000000000000100000000000000000000000000000020d2096ab2fdbc4ed9fcb3f176b5554a872f0e907766b3c2d7a358a3e01f8fde260000000000000001000000000000000100000000000000209636be1e4b8abd68cb43b0274502fefa81dd44893b457dcd361701b81c119a5b00000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002300000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000000000000000000020afe781427da25b2656f4afe658d7b09fdf74224657f244abf61f9cdedf9390a0000000000000000100000000000000000000000000000020fc18f1981d845ff496938d740e8859186fa60708758e2c4966cc30321ee5af9700000000000000010000000000000001000000000000002034d606e528ae97ba399a8765a39ca8182a9abb6191e6065fb37a87dffc92f9880000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000230000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000000000000000000209622e98ec4df3449c67d9e48114f130f446fae93b72f4bf53789536c86b6d631000000000000000100000000000000000000000000000020a58adfd2e024e06c922fbd6f0c6e29c0aa467b652272a9cd35196719e496cfd60000000000000001000000000000000100000000000000200df38a45fc387ce7388d7edbd245b965091614cd5a7aa1118bcbb22942e4bb9300000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000390000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020f5f51df4455ffd83739dfaccef923a70df7a7cf5ea75b0be8ac453ab1ea59cd8000000000000000100000000000000010000000000000020314e9a848ea1d25911258d74b19f092dd444faf4da08b8c00a4f09adb9d4c623000000000000000100000000000000010000000000000020f8aa5e6a5b89d4a39d02bfe4f6c3c38deda3ec6df5ade3707863ea2453f03b73000000000000000100000000000000000000000000000020228ad46578c60a8ae293c5203eb65e05045bb3651cc7f9dca5fdd52a9c021f9f000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000390000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020c0be60ecb9302afcaf7e0974c2439749f493468a83262da26a96f1cc4c55cc73000000000000000100000000000000010000000000000020d409436a38cce955294f3fbb27f4d65e7100e98f4d77022a741a6e99195a3afd0000000000000001000000000000000100000000000000206d13fd38b84ca4e30cf7ae1f472014bbebd3d7449bae674ad6a36fae582015a8000000000000000100000000000000000000000000000020d3fe0ac3f0592a168395476738f2d379d0581dd02807271399e479432d094ace000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003900000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000205ac05e975b42062c31f9ed21b3fe8a6ddc0b04176c23fbf2924ac02c9a0be9e70000000000000001000000000000000100000000000000206140589f65135d68e263ae292fc0c763647ece71ba96e1bb1950b05093e479eb000000000000000100000000000000010000000000000020b6e03aa8283e3b21b7e5347673309cfecce4aa3d8d546f0c5e5fbac4333ddb46000000000000000100000000000000000000000000000020762aa6b8eaa622a60e5d82075304926867e1bfd72e6c9bc93d7ed5c083f0de9d00000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003900000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000000000000000000020e35931219220590a59bcee5876c03a6d196dcd2db916ac8849d2a47e2a944d28000000000000000100000000000000010000000000000020b051864d1fbbff3990891ab949959bd602b0a56a571c9cc3731d5e6835b3e8fc000000000000000100000000000000010000000000000020e043ae0a6c793f91b6358e54bb8a4503bac61afdc008fbd23a04dea0c72211de0000000000000001000000000000000000000000000000204c0b855bed07188b0ec696adf334ba750b253be49e0d11744e67c1884683e5e500000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000390000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020741795e4cfecca0b0fcd745a3aa59aa1b3c46d8f74bb8a06128fbf82dc802df80000000000000001000000000000000100000000000000204759d348b50c669646f5f52d2f8caba0a0a3c3f6941e016904bddc6b141451910000000000000001000000000000000100000000000000200e45b6073a5229fe074383c2f531128eda5ffeefe8fde89eb48d7aa45a77a0f5000000000000000100000000000000000000000000000020e275f0cac8a965b7c2d52bccf2fc2a08ba897eccce8ac56d94090bd934b9477a0000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000200000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000001000000000000002099c439552bc012b331f78711afcc02ab45f65be8ef9aef37b56c34fe5ec62561000000000000000100000000000000010000000000000020d3a8480b820bd6c782f5a7d8bc820d929996e9b8ab64d37789aa88140ba71654000000000000000100000000000000010000000000000020d80cc5cdbb0ec297cddfda4fd988de76b705f83576117fb5ed10b48a9b959bb0000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000200000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020c5aada7333905262bd985fbc023814f24628710fde74d7d1291fa54ca5cb94ba0000000000000001000000000000000100000000000000200c04f15905ef31c5e7f95badee6ef48214fcec9a48dff3643ba924349c73daaf00000000000000010000000000000001000000000000002072ecff12c730f10ff239ae5d5ec6e0ecd7a93d7c6f58e48faaf9efc69af68a03000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002000000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000201b07870ebb742c3884ed4ecbc4e8996b04e58ac19af265c1cfa8cb933bcc8d7f000000000000000100000000000000010000000000000020730dfd755e8bc4f3764cb6605b45ef36f2bf687e9a26d67efca88040d92455b70000000000000001000000000000000100000000000000209636be1e4b8abd68cb43b0274502fefa81dd44893b457dcd361701b81c119a5b00000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002000000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000209ea210402882794759c806907eb44d870d40a8cbf48f31d67ffc256650b6880b000000000000000100000000000000010000000000000020433d109a852edefe2a2d84010186cc783e15b0643ca68c917b680ea949a633e400000000000000010000000000000001000000000000002034d606e528ae97ba399a8765a39ca8182a9abb6191e6065fb37a87dffc92f9880000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000200000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020f51957a1ed7316fb19166bc621acef4f5f5368cd4eb556d050dbd81c88fa917b00000000000000010000000000000001000000000000002053d45841276f047a813d87d7cc211dcf1d7057a623db3785c133608ed6d4499b0000000000000001000000000000000100000000000000200df38a45fc387ce7388d7edbd245b965091614cd5a7aa1118bcbb22942e4bb9300000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000001c0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020dc473fbc2982536b3551210ff22dbfb86908bbdebdf4f9fcee59b94ae742f3e7000000000000000100000000000000010000000000000020f09e0551c369e8794e51f609fb64bc262c407f13317ebef64c17a4fb128e2b29000000000000000100000000000000000000000000000020cd05d024922075f0d2191dff6b6b8977913542096c687b1aa6a6880a30f4f1780000000000000001000000000000000000000000000000207a1424d413417eb28a018fd1d76958181366ee57c4d59ae0034a29ddbb1d2b590000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000001c0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020e326c18eb9bc5c22eeb0104ad67db5825445f27758a763e7a15c98afa3c60ee90000000000000001000000000000000100000000000000206f5361d60e69e71d110471fa559e5f9e4f0cacff5c4d21eefb041e57495d1c6b000000000000000100000000000000000000000000000020e216681d6f38da8409d5c77334f0f51de756720aaa028880c59d6a832095ad4f000000000000000100000000000000000000000000000020938375cf40ac56222ab4d00edc1add4f0c4d45658ef352f9c39d534a9202dcf7000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001c00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020b78c2786fd393a8a189ea69596d8d08620268eb4bee8ba8309a80def966a7437000000000000000100000000000000010000000000000020a3471994e86c3ff9f0b757f440b5ded70f1e167a40e6eff28a571f2a79e14df600000000000000010000000000000000000000000000002053b3233efca5252e2055e75028fefee3391d25eb106840c102b53e90d3d1fdf6000000000000000100000000000000000000000000000020a084e70b3f9ebf137fa0b89422463d8a968230d1e0fbcf139db6e018b78315170000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001c00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020cf4b99e5ddb7e9be43b53fd47fd6465b0b294da885c48f18999f18c508f50a63000000000000000100000000000000010000000000000020c39555378222a23b74a8ea5f1a947f7767b6678dc4c45b8391294e15f7096fa3000000000000000100000000000000000000000000000020c250999b34e17251431e337195cc0230ba7e98bff5e62a85f6fafeafe15fba4b0000000000000001000000000000000000000000000000201b22228829ef8466b89319e35bebfd9d707cdce2b965fa152aa852ec7bc0550b00000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000001c0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020b2669c955a48dabaf2c213befede7e967ab990f1c9b03bd7a65450003d408508000000000000000100000000000000010000000000000020fb06fb7152ac1f9d2222ce222624aa555ffa17371dfad3a80a1bf178befe1e6b0000000000000001000000000000000000000000000000207fe3562c7d01ca88eef4c66c817964ae9239a6df889ab475368bf430de96cdb20000000000000001000000000000000000000000000000205ef7704fa3778b449f726e5d0a98cf0942526fc336765751838fd6cbb761fb270000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000200000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000001000000000000002099c439552bc012b331f78711afcc02ab45f65be8ef9aef37b56c34fe5ec62561000000000000000100000000000000010000000000000020d3a8480b820bd6c782f5a7d8bc820d929996e9b8ab64d37789aa88140ba71654000000000000000100000000000000010000000000000020d80cc5cdbb0ec297cddfda4fd988de76b705f83576117fb5ed10b48a9b959bb0000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000200000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020c5aada7333905262bd985fbc023814f24628710fde74d7d1291fa54ca5cb94ba0000000000000001000000000000000100000000000000200c04f15905ef31c5e7f95badee6ef48214fcec9a48dff3643ba924349c73daaf00000000000000010000000000000001000000000000002072ecff12c730f10ff239ae5d5ec6e0ecd7a93d7c6f58e48faaf9efc69af68a03000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002000000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000201b07870ebb742c3884ed4ecbc4e8996b04e58ac19af265c1cfa8cb933bcc8d7f000000000000000100000000000000010000000000000020730dfd755e8bc4f3764cb6605b45ef36f2bf687e9a26d67efca88040d92455b70000000000000001000000000000000100000000000000209636be1e4b8abd68cb43b0274502fefa81dd44893b457dcd361701b81c119a5b00000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002000000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000209ea210402882794759c806907eb44d870d40a8cbf48f31d67ffc256650b6880b000000000000000100000000000000010000000000000020433d109a852edefe2a2d84010186cc783e15b0643ca68c917b680ea949a633e400000000000000010000000000000001000000000000002034d606e528ae97ba399a8765a39ca8182a9abb6191e6065fb37a87dffc92f9880000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000200000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020f51957a1ed7316fb19166bc621acef4f5f5368cd4eb556d050dbd81c88fa917b00000000000000010000000000000001000000000000002053d45841276f047a813d87d7cc211dcf1d7057a623db3785c133608ed6d4499b0000000000000001000000000000000100000000000000200df38a45fc387ce7388d7edbd245b965091614cd5a7aa1118bcbb22942e4bb9300000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000390000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020f5f51df4455ffd83739dfaccef923a70df7a7cf5ea75b0be8ac453ab1ea59cd8000000000000000100000000000000010000000000000020314e9a848ea1d25911258d74b19f092dd444faf4da08b8c00a4f09adb9d4c623000000000000000100000000000000010000000000000020f8aa5e6a5b89d4a39d02bfe4f6c3c38deda3ec6df5ade3707863ea2453f03b73000000000000000100000000000000000000000000000020228ad46578c60a8ae293c5203eb65e05045bb3651cc7f9dca5fdd52a9c021f9f000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000390000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020c0be60ecb9302afcaf7e0974c2439749f493468a83262da26a96f1cc4c55cc73000000000000000100000000000000010000000000000020d409436a38cce955294f3fbb27f4d65e7100e98f4d77022a741a6e99195a3afd0000000000000001000000000000000100000000000000206d13fd38b84ca4e30cf7ae1f472014bbebd3d7449bae674ad6a36fae582015a8000000000000000100000000000000000000000000000020d3fe0ac3f0592a168395476738f2d379d0581dd02807271399e479432d094ace000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003900000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000205ac05e975b42062c31f9ed21b3fe8a6ddc0b04176c23fbf2924ac02c9a0be9e70000000000000001000000000000000100000000000000206140589f65135d68e263ae292fc0c763647ece71ba96e1bb1950b05093e479eb000000000000000100000000000000010000000000000020b6e03aa8283e3b21b7e5347673309cfecce4aa3d8d546f0c5e5fbac4333ddb46000000000000000100000000000000000000000000000020762aa6b8eaa622a60e5d82075304926867e1bfd72e6c9bc93d7ed5c083f0de9d00000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003900000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000000000000000000020e35931219220590a59bcee5876c03a6d196dcd2db916ac8849d2a47e2a944d28000000000000000100000000000000010000000000000020b051864d1fbbff3990891ab949959bd602b0a56a571c9cc3731d5e6835b3e8fc000000000000000100000000000000010000000000000020e043ae0a6c793f91b6358e54bb8a4503bac61afdc008fbd23a04dea0c72211de0000000000000001000000000000000000000000000000204c0b855bed07188b0ec696adf334ba750b253be49e0d11744e67c1884683e5e500000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000390000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020741795e4cfecca0b0fcd745a3aa59aa1b3c46d8f74bb8a06128fbf82dc802df80000000000000001000000000000000100000000000000204759d348b50c669646f5f52d2f8caba0a0a3c3f6941e016904bddc6b141451910000000000000001000000000000000100000000000000200e45b6073a5229fe074383c2f531128eda5ffeefe8fde89eb48d7aa45a77a0f5000000000000000100000000000000000000000000000020e275f0cac8a965b7c2d52bccf2fc2a08ba897eccce8ac56d94090bd934b9477a0000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000001d0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020c4ad1c6b77c38ccc45ff77c9a8d5af9c4401f987cecb2e061e9eddea1ae5abbc000000000000000100000000000000010000000000000020f09e0551c369e8794e51f609fb64bc262c407f13317ebef64c17a4fb128e2b29000000000000000100000000000000000000000000000020cd05d024922075f0d2191dff6b6b8977913542096c687b1aa6a6880a30f4f1780000000000000001000000000000000000000000000000207a1424d413417eb28a018fd1d76958181366ee57c4d59ae0034a29ddbb1d2b590000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000001d0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020e11de5b7f53111e778a56c72b01943849250cec0287b81018024c2d4c11d4d440000000000000001000000000000000100000000000000206f5361d60e69e71d110471fa559e5f9e4f0cacff5c4d21eefb041e57495d1c6b000000000000000100000000000000000000000000000020e216681d6f38da8409d5c77334f0f51de756720aaa028880c59d6a832095ad4f000000000000000100000000000000000000000000000020938375cf40ac56222ab4d00edc1add4f0c4d45658ef352f9c39d534a9202dcf7000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001d00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020a6362c89f99c1de735f87b87b4c2e91fef646162673c89f7a019ece7064a1425000000000000000100000000000000010000000000000020a3471994e86c3ff9f0b757f440b5ded70f1e167a40e6eff28a571f2a79e14df600000000000000010000000000000000000000000000002053b3233efca5252e2055e75028fefee3391d25eb106840c102b53e90d3d1fdf6000000000000000100000000000000000000000000000020a084e70b3f9ebf137fa0b89422463d8a968230d1e0fbcf139db6e018b78315170000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001d00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000000000000000000020c76cc230b8a042e130db9b9fe0260fab0f7020e16834b7373421ba7d43ef8565000000000000000100000000000000010000000000000020c39555378222a23b74a8ea5f1a947f7767b6678dc4c45b8391294e15f7096fa3000000000000000100000000000000000000000000000020c250999b34e17251431e337195cc0230ba7e98bff5e62a85f6fafeafe15fba4b0000000000000001000000000000000000000000000000201b22228829ef8466b89319e35bebfd9d707cdce2b965fa152aa852ec7bc0550b00000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000001d0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020892a40df077de4ee7e7cf311374ce4464f3aeab8b2258871c3d163b037953e5a000000000000000100000000000000010000000000000020fb06fb7152ac1f9d2222ce222624aa555ffa17371dfad3a80a1bf178befe1e6b0000000000000001000000000000000000000000000000207fe3562c7d01ca88eef4c66c817964ae9239a6df889ab475368bf430de96cdb20000000000000001000000000000000000000000000000205ef7704fa3778b449f726e5d0a98cf0942526fc336765751838fd6cbb761fb270000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000090000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000000000000000000208e04b4c723612b4d1e333accc4e24a04d69c173578faf07c8d2b973c0be9fb4100000000000000010000000000000001000000000000002014aa8e29f77d6a5fb881904df608256632c6604fbfb5192158e0932c0baf514500000000000000010000000000000001000000000000002093c99af014a3514bdcc84cdf0e72d42f20038a64dcba4071efdcce4cf6a76949000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000090000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000201e1426bc22e09b48e2f3902ae15397de929e0b50905519518b2ffd6ff87b0f8d000000000000000100000000000000010000000000000020ff5c9eed6e4075d1dc3dad1312c9f0e4bcc23270345f8eea8c11a5b3619b24aa000000000000000100000000000000010000000000000020e23783733f2d245e0738ed8503ab8c6aef3aa526888e6b8dc670bfe0e224b8ff000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000900000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb626512000000000000000600000000000000010000000000000000000000000000002009e66b718cc1244864884c2e809453b63f5bdb1357b3b4cc341fe71f437dca2e00000000000000010000000000000001000000000000002025a5c0035306c82abd392465404dd2a5af6ad78f6c662e811fb28ddd99a85857000000000000000100000000000000010000000000000020f0fde6ec22a87dce3563e4a3872da6fb65e744b1d395bcb2f83911d9ac21f1af00000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000900000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000200c84c33aa3ce019e2e9d8903cf8b2964b89fc01e164b954befc76a705e3620f100000000000000010000000000000001000000000000002043cf5ab0e85678ac1f5e9bc7f073456a624fb85b0ed8a97a19debe99aee3ef3b0000000000000001000000000000000100000000000000204f1d90aecc22386cf8bd2d60c6a2d6d6c43c1918619306fffdbd5f5dfb68cd920000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000090000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020e6608d6b21e9b4d6fdacc91ba204748c8cdadde68638156e633ef52ca68d58a6000000000000000100000000000000010000000000000020f9459a5f7f85273cda341000cf6866270e90827995d041cbba1ac42de920723c00000000000000010000000000000001000000000000002045bb9d506f74a19123d41a442d1de0fdfbaca183dfb2af0cc5027621a991b2b2000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000190000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020f878c3196a2404bcd842121562576c7d651583fe9d63c1aaa1b869d205e345230000000000000001000000000000000100000000000000204536f7493e46af7ae74c52f21d137b781ab41b8d1503fa4f2492f216257d0e4700000000000000010000000000000001000000000000002041b447898ab19c91b1dbde93ea50c40354c2647926dd2df1d267edeeb4fa5b900000000000000001000000000000000000000000000000207a1424d413417eb28a018fd1d76958181366ee57c4d59ae0034a29ddbb1d2b590000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000190000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020c4c0ee0f8712b96d147ac05da64c1b99a740846e9a50722ac61b17649b751bff0000000000000001000000000000000100000000000000202aede3564ebfa30e74b8e2011d40a14f2a016492169b85c1f9415a281dbc49f7000000000000000100000000000000010000000000000020376d244ad38898e5a2d4a5d1596faa89190bb6be0021523a316dc31147bdabe8000000000000000100000000000000000000000000000020938375cf40ac56222ab4d00edc1add4f0c4d45658ef352f9c39d534a9202dcf7000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001900000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020c7d221511f5b0778a109fa2e3c1c884ec175c20abd2d834b083b1c7c07e139ce0000000000000001000000000000000100000000000000200b06c28f51eebefba1b90a051ee1ef7a91769619ad2533abf955ef50586e382c0000000000000001000000000000000100000000000000202b1f2b796b4b368a82c2fd19089c52aa941915742b1944326d6efc9a8bedb715000000000000000100000000000000000000000000000020a084e70b3f9ebf137fa0b89422463d8a968230d1e0fbcf139db6e018b78315170000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001900000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000208daf272c6a70af9b7b24ff8d36e5d28a5d61732ec6e5636a0cb174a11d76a79b00000000000000010000000000000001000000000000002000edd1136e3510a3d32537ab78ff753398636f0818095c7cc213fa7098d55ea6000000000000000100000000000000010000000000000020fc8359a37b14fb43c09c48b566d14f74e47c7a14a37d07ece74a19f83c2fb3d90000000000000001000000000000000000000000000000201b22228829ef8466b89319e35bebfd9d707cdce2b965fa152aa852ec7bc0550b00000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000190000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020dfaa7a61177963231160e33a42fb89948d6fa2b6cda193578f1607317576bd7900000000000000010000000000000001000000000000002004230d91f96402c0e2b32b8591b01d0bf15a0337d50562837b09d42f470657ea000000000000000100000000000000010000000000000020b669e28a8c8f93a11d50fc751d11cbd5c19eef7f4f73ab6849b9e5fb805ced8b0000000000000001000000000000000000000000000000205ef7704fa3778b449f726e5d0a98cf0942526fc336765751838fd6cbb761fb270000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb81659000000000000001c0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020dc473fbc2982536b3551210ff22dbfb86908bbdebdf4f9fcee59b94ae742f3e7000000000000000100000000000000010000000000000020f09e0551c369e8794e51f609fb64bc262c407f13317ebef64c17a4fb128e2b29000000000000000100000000000000000000000000000020cd05d024922075f0d2191dff6b6b8977913542096c687b1aa6a6880a30f4f1780000000000000001000000000000000000000000000000207a1424d413417eb28a018fd1d76958181366ee57c4d59ae0034a29ddbb1d2b590000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000001c0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020e326c18eb9bc5c22eeb0104ad67db5825445f27758a763e7a15c98afa3c60ee90000000000000001000000000000000100000000000000206f5361d60e69e71d110471fa559e5f9e4f0cacff5c4d21eefb041e57495d1c6b000000000000000100000000000000000000000000000020e216681d6f38da8409d5c77334f0f51de756720aaa028880c59d6a832095ad4f000000000000000100000000000000000000000000000020938375cf40ac56222ab4d00edc1add4f0c4d45658ef352f9c39d534a9202dcf7000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001c00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000010000000000000020b78c2786fd393a8a189ea69596d8d08620268eb4bee8ba8309a80def966a7437000000000000000100000000000000010000000000000020a3471994e86c3ff9f0b757f440b5ded70f1e167a40e6eff28a571f2a79e14df600000000000000010000000000000000000000000000002053b3233efca5252e2055e75028fefee3391d25eb106840c102b53e90d3d1fdf6000000000000000100000000000000000000000000000020a084e70b3f9ebf137fa0b89422463d8a968230d1e0fbcf139db6e018b78315170000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001c00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000010000000000000020cf4b99e5ddb7e9be43b53fd47fd6465b0b294da885c48f18999f18c508f50a63000000000000000100000000000000010000000000000020c39555378222a23b74a8ea5f1a947f7767b6678dc4c45b8391294e15f7096fa3000000000000000100000000000000000000000000000020c250999b34e17251431e337195cc0230ba7e98bff5e62a85f6fafeafe15fba4b0000000000000001000000000000000000000000000000201b22228829ef8466b89319e35bebfd9d707cdce2b965fa152aa852ec7bc0550b00000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000001c0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020b2669c955a48dabaf2c213befede7e967ab990f1c9b03bd7a65450003d408508000000000000000100000000000000010000000000000020fb06fb7152ac1f9d2222ce222624aa555ffa17371dfad3a80a1bf178befe1e6b0000000000000001000000000000000000000000000000207fe3562c7d01ca88eef4c66c817964ae9239a6df889ab475368bf430de96cdb20000000000000001000000000000000000000000000000205ef7704fa3778b449f726e5d0a98cf0942526fc336765751838fd6cbb761fb270000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000290000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000000000000000000020afda8f08f851e66f41a25326acc738e8538b2349a3b415bc8993aee72bcbde67000000000000000100000000000000010000000000000020c600a084e5647679dce1e61667cd049aa01cd0b29e54cfef6b28350be80914810000000000000001000000000000000100000000000000200ebe305ff48b2729427a6d3d9c605f9d8749d8a7f371875c0845a2841f05d610000000000000000100000000000000000000000000000020c5955793ab286002e2bc4ea091ab49e689f85a1a02effe9360301649450f713e0000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000290000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000000000000000000020ecb8fd0e3ff2c7994cd3f64eef857e523c5ad14a898efd04c68f4135120556030000000000000001000000000000000100000000000000209fb59ccf252a0568bd152caf34d3269d3a2b9a39857511b0bd86c4af33ce8dee0000000000000001000000000000000100000000000000201cef524c4bbd4352e55a822f72b50f13a0d37a3b4bd840b09474319d06e88b350000000000000001000000000000000000000000000000204c549c0a06011a5b940afdd9c949f7c54668b0449c63f74f64a3a00d1cc2a37800000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002900000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb626512000000000000000600000000000000010000000000000000000000000000002020a00217cf3c264736d6e57dc9ab3c182332796d1200da093356d79a4fbe3aa5000000000000000100000000000000010000000000000020e967db82093a838375e88444bf31c8b9602b5b9abee7d1014d9faa70e9e2ee07000000000000000100000000000000010000000000000020b65635b650f7751f683d4fdd6f77a7bbbf3914c331798f8c0a5e9b5bdd294ca9000000000000000100000000000000000000000000000020d880ce6b358a2b77330b5a0f9481e98d6528b9d0ad6b480d03501c04a93a647f00000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002900000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000000000000000000020a0dd56e572e5076899043cf745b32bdeaabbdbe5dda885fed13b8cb026fc3360000000000000000100000000000000010000000000000020036e7df247ef476c62b0c60d8c733502d9c99e42211e6505526e56ba4d0eb688000000000000000100000000000000010000000000000020ec081a9e95c70f0fa23f8f9f16c399792701d8ccb5c6c2bd2fec49153d27321100000000000000010000000000000000000000000000002080b4067bde5f3114a4b55274822cf920b2a4ae2379db5763e4a3dabbb5558faf0000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000290000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020546e8b9d3b8728dc2d9d345f9669a89da25d3aea625522d6a9d5f5029f00410f000000000000000100000000000000010000000000000020eb547fc519df191930772af4c7f9a223f448ea9b096d6bb0615a7ccf53da66a3000000000000000100000000000000010000000000000020a9fa262c6bfaa50ee132d4609ab35f935bfd510e97d33e942458c27041a0083a000000000000000100000000000000000000000000000020896402e4d3f17887d11d2154920c6bff134c98834a80f987cc702496ef09c196000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000100000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020c47d7bebc8c15f325d831bf339e2d3309c7c8d22969ec6186bc0568046427bd7000000000000000100000000000000010000000000000020640867ed08a3ecabe4859b1b36a9e35eed961ff22f4ecb3f19f23eafd153979300000000000000010000000000000001000000000000002038c257c4acc7ae148c5c9b4409c82130df8554a30c1e722962697197980c56fb000000000000000100000000000000010000000000000020f158609c6b12d3609bdf1c7797edb538f985fe8ac4171f066b1d7b9c43c7bc3b0000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000100000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000201ca4130b1b432206425cd549ec0a36397fe25e3902fc83e4fc886cd6f1950e7b000000000000000100000000000000010000000000000020630811e108ea35a320a27dbd41803a687d15b60a29050aeca50361d2714bf518000000000000000100000000000000010000000000000020d42e2ebd255e4349a7739a43dd3c719944636248abdb0bced6a610501e96e1b50000000000000001000000000000000100000000000000204dffb3cd723081a5601c700b71267e003c6301f69868c0143c1c7fb7f95e7282000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001000000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000202c428c9c3fa1a53d1b0e7ee50f01da261b77bab05c5f15d68ca27e3ad48349d5000000000000000100000000000000010000000000000020183a34534d82250369c5f2847e701d9341b41f119f4bfea1eb963c8a45731168000000000000000100000000000000010000000000000020fe4fd380a7b985c22fbf7e428d0522af491d32b3707fdee9600cc7816056f1200000000000000001000000000000000100000000000000205d9455d420eacea118c8dd606eeb03972280069211e33523e74b32b8a0a96ea70000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001000000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000208c7bb6c2674f5075c7c4766ecdacbb02946937d88b79eb8ade4ec4cdf030d6e300000000000000010000000000000001000000000000002036dabb6c4805f7564ffa9dd386ce2ac8fa1173a44b7e978962085ca284260c3c000000000000000100000000000000010000000000000020b1f416af255af2c4c5d556e92ec09f445ddc4c0c1d4ce617e48781cc7fbb0859000000000000000100000000000000010000000000000020edddd053de62a5ab03c84705265b32ce7f3371bbb58bce16ef49c97190097e6400000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000100000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020574ce443b2d1a579a226d2ef9963cddf83ae90ced338ea391881843fc95dddcc00000000000000010000000000000001000000000000002026c0e6ce4bf08b1f0ed800a51064fdf6f1f375dbc00c710881776df737596e59000000000000000100000000000000010000000000000020113e52f83563f3c9a8ca73087daed63db6e020f9b1908dae270f2d864860470b0000000000000001000000000000000100000000000000207558d367d7cb8046d18c333db9b72e09bb6459368f028b50b23b205b8ad03c430000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000160000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020ec257b73d08ff50838c97be9c944bba03ce4c90cf40210d26417f516ea487763000000000000000100000000000000000000000000000020cb53c0317cf40b13e5ae5168d1ba5587610561a353ac259cb8aa35aa99893bb600000000000000010000000000000000000000000000002026fce9aa21f1ef53b559859e81595b7ea9f4a7505a8a6c162b86994251034ce3000000000000000100000000000000010000000000000020f158609c6b12d3609bdf1c7797edb538f985fe8ac4171f066b1d7b9c43c7bc3b0000000000000001000000000000000000000000000000205eab89a1beca51a5d8087eb08c31f8fffc3e667b4613214fd092e2afc25668d2000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000160000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020e15f010d561949bff9f8aa87141ac4a9322b1b3e0c2063378fff97ea88d657b5000000000000000100000000000000000000000000000020cab150ea22d5d417bbe85bd7c1d535731859aa1c0ab76010f834e9de414fc2f20000000000000001000000000000000000000000000000205194f6462193600d656db86b96325bf516174c3105f29544d28f3b649cc7fa4c0000000000000001000000000000000100000000000000204dffb3cd723081a5601c700b71267e003c6301f69868c0143c1c7fb7f95e7282000000000000000100000000000000000000000000000020df7a9e00f83416684b535d78323d0e42e5d14e9a640c91bb70630cefeae3ec5900000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000001600000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000209d497a85e9a14368f2a14742c7be38367d743d88e085a59837188dc74d07ee3e0000000000000001000000000000000000000000000000202b193884262af525412504739ca5ef7ab7e82d27baf389c289a31844e39475f0000000000000000100000000000000000000000000000020b4e0bb7d9649c1fbb4614e3f293bccd257330f04e0c3c1c27c3a9a4dcdec30130000000000000001000000000000000100000000000000205d9455d420eacea118c8dd606eeb03972280069211e33523e74b32b8a0a96ea70000000000000001000000000000000000000000000000209a0b4f81603784a7d4df2ce83a1ee0168b1800f5024310a25714db32d373f658000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000001600000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000205b4a5aaedb9ceea251799c7ff4ba0455d237ca33e569df50b294de780743e0280000000000000001000000000000000000000000000000207109d970e8fdf43e95befedaef0ed933720099ab64a80de5c62225adf2b0dc270000000000000001000000000000000000000000000000205a56911b2f94acc47475d8d5b4ced4b0eb184f2f1245202b8de7e3011e99a179000000000000000100000000000000010000000000000020edddd053de62a5ab03c84705265b32ce7f3371bbb58bce16ef49c97190097e6400000000000000010000000000000000000000000000002074f8c3f402afa3e5ed1c04f3f0696f861280031f4aed0bc006b8cc598b663150000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000160000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d000000000000000600000000000000010000000000000001000000000000002016f028a7a06c03a258cdc8cd8946d7632af792a0839387945d27535f16f1fca10000000000000001000000000000000000000000000000202687b1b5119760e0eb5f98fca70a184b73a4ad7701174748d26acb3ca64bab26000000000000000100000000000000000000000000000020c9fa3b6551025a0b0a3ab22e52aa56603723150da92dcef931270f46982c5f720000000000000001000000000000000100000000000000207558d367d7cb8046d18c333db9b72e09bb6459368f028b50b23b205b8ad03c430000000000000001000000000000000000000000000000206b715f745875262d7d7e69fd18f833d00decfb518c256553ef37da172f906ea400000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb81659000000000000000c0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020724ffd0f25aa4e243d2c307552ed37381703107372320593eb3a4d313b319f910000000000000001000000000000000100000000000000207632194eaa79882c73a99557dd547ccd6fd120c5b43667fce4768d60ee466a6d000000000000000100000000000000000000000000000020266533c386eaecf62505c82a33fc748ed3dfb0dd1f1c3b6ef1c350f30907840f000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000000c0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000202ac7747cd68e0e8f386445c4b73e691738da5997681898b63d8a1fdd2f7318d500000000000000010000000000000001000000000000002048f8483f7e54318f5880730aa74c25c4d947a419c1457363fa11f33292ddacb10000000000000001000000000000000000000000000000203e730a9762014a0bc462be90ae606e5d47c72eb18f70e7e52e6fdbf0e6f0ca51000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000c00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000204ac156fe78cb66cc11b0523329bdc9822cfc7ef36d86d1a58cac556bedacedaf00000000000000010000000000000001000000000000002010b0493443555dc67ee87c1bd8063b9e36aa14d724f309f7e8809f3a39a534e30000000000000001000000000000000000000000000000200f6629916e8ea9140c1e5fe82516b014e06c6a7ffb9a27dbe8073629cf7bcfd300000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000c00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000201376c8ebc60bc7ac345e110600c578a9251d294fde213df2b39d2d10af7b72ab0000000000000001000000000000000100000000000000202278c1169f697b84d00147af89a2646538a6511cffad2faa7b319e55d636471d000000000000000100000000000000000000000000000020366469e7d59d6bc640bafe4261eac135e7f403c7d83905ecb45477e3f080df680000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000000c0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020547e4936c71929988cb4f1df9bc7e773529a27708006dacd48b89d487eac4d8b00000000000000010000000000000001000000000000002021bc05aef3a17c8a1d63eb499367fa51cd6c2c3b2716d1cd6b8c11c4a3b3722a0000000000000001000000000000000000000000000000204b3a8c95985e02c1091d8b74e359262a94d60b3baac08c1afc3d4c34b039a42b000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000090000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff100000000000000060000000000000001000000000000000000000000000000208e04b4c723612b4d1e333accc4e24a04d69c173578faf07c8d2b973c0be9fb4100000000000000010000000000000001000000000000002014aa8e29f77d6a5fb881904df608256632c6604fbfb5192158e0932c0baf514500000000000000010000000000000001000000000000002093c99af014a3514bdcc84cdf0e72d42f20038a64dcba4071efdcce4cf6a76949000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a00000000000000090000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000201e1426bc22e09b48e2f3902ae15397de929e0b50905519518b2ffd6ff87b0f8d000000000000000100000000000000010000000000000020ff5c9eed6e4075d1dc3dad1312c9f0e4bcc23270345f8eea8c11a5b3619b24aa000000000000000100000000000000010000000000000020e23783733f2d245e0738ed8503ab8c6aef3aa526888e6b8dc670bfe0e224b8ff000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000900000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb626512000000000000000600000000000000010000000000000000000000000000002009e66b718cc1244864884c2e809453b63f5bdb1357b3b4cc341fe71f437dca2e00000000000000010000000000000001000000000000002025a5c0035306c82abd392465404dd2a5af6ad78f6c662e811fb28ddd99a85857000000000000000100000000000000010000000000000020f0fde6ec22a87dce3563e4a3872da6fb65e744b1d395bcb2f83911d9ac21f1af00000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000900000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000200c84c33aa3ce019e2e9d8903cf8b2964b89fc01e164b954befc76a705e3620f100000000000000010000000000000001000000000000002043cf5ab0e85678ac1f5e9bc7f073456a624fb85b0ed8a97a19debe99aee3ef3b0000000000000001000000000000000100000000000000204f1d90aecc22386cf8bd2d60c6a2d6d6c43c1918619306fffdbd5f5dfb68cd920000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e000000000000000090000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020e6608d6b21e9b4d6fdacc91ba204748c8cdadde68638156e633ef52ca68d58a6000000000000000100000000000000010000000000000020f9459a5f7f85273cda341000cf6866270e90827995d041cbba1ac42de920723c00000000000000010000000000000001000000000000002045bb9d506f74a19123d41a442d1de0fdfbaca183dfb2af0cc5027621a991b2b2000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000240000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020c24fc0a3e994aa4053143723d1ff953730e09d80308264f57f5e25286c7dcad00000000000000001000000000000000100000000000000204f58496d9785dbfafadd8f41e3167831200b5d8065731cf35b12e0f683eb6aba0000000000000001000000000000000000000000000000204cb7b4fa816710180675ddbc955531f8a709d427faf5200cdc6737874e060a55000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000240000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e0000000000000006000000000000000100000000000000010000000000000020a92607495561c9eeccd26d9cc9dfab304f5bdec362795340e1d8d93b162ff7f5000000000000000100000000000000010000000000000020056c9a4c4349cd5028c19714d82d2521d603233c99689f9551773f4c5a1bb87400000000000000010000000000000000000000000000002037a9c624bdb25b1ee261b13411e9d6acc0d0e8c738496cff14dc43abe65c9d1f000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002400000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000204be0b5c554d14ed3ecb1a4698c54f322ec73fcaf89c1a0d0f2287a93c2b4d62b0000000000000001000000000000000100000000000000203decfa57715a83c44aa9af101d28b91339338f8855c0070ab1a2c91f7f429ec30000000000000001000000000000000000000000000000205d6c3e37441823be85bdf046e1379fc5587812c68dc08d8750f2f6bd76bf08a100000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002400000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000200370955e846619f8053e6518604dd4a3a3876d31542c70a179b9e62113e70de20000000000000001000000000000000100000000000000203b43d69496b15a1de8d88791e245f0f4c9ce3d08e47827d61f0ae96ed0fb8464000000000000000100000000000000000000000000000020a3d9e1ced1896a9083f68bbabe3bb9574542b5eb5d38128a466f4b97c8a833410000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000240000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000201dd42fc16aa12a31fa90168725c897d861f7e36b8c27441380a55b1025146bcc000000000000000100000000000000010000000000000020a80602202c5ebf9b0347c9106ef91bf2c358dd05edffa7aa90f9b9bd47fd10500000000000000001000000000000000000000000000000207f46e4b2eb51c53f78fb1f6b5310d84183eb4d3898e8ddf3b3eb940fc2ad8f4400000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000000b0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000000000000000000002039b919da8460a7ced2f434d93e191c2e5f3ed6c16c5a563dde2d4088fe06329200000000000000010000000000000000000000000000002077631bed7d662ca95d374bb50963259dbae6fd85816b13bb5b057a5a051aa21b00000000000000010000000000000001000000000000002093c99af014a3514bdcc84cdf0e72d42f20038a64dcba4071efdcce4cf6a76949000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000000b0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000000000000000000205927b440119d91d39c3733f63f01775abc00426dddfe05736c43d2ec0905363a000000000000000100000000000000000000000000000020e36620d473cd1c4b96249370e894999a209a749fa70fb571d7cdc8d7dd5f2e54000000000000000100000000000000010000000000000020e23783733f2d245e0738ed8503ab8c6aef3aa526888e6b8dc670bfe0e224b8ff000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000b00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000000000000000000204882930d8658cd73eb924ef4d6ae5265e5f946d6d6e4198a4fa473b0c46262050000000000000001000000000000000000000000000000207ef9b1eced9bdd4e378e5106730b3ce6e1a70306d54252b4b0f320e029c8e300000000000000000100000000000000010000000000000020f0fde6ec22a87dce3563e4a3872da6fb65e744b1d395bcb2f83911d9ac21f1af00000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000b00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000000000000000000206491a91ff0421451f2ef7fbe94620ba91944038a61de6868fa0a84fd19f722510000000000000001000000000000000000000000000000205dfcd91798a2e45492d1e43f02db0987d2a4638e5cf53f99282d826f22e208180000000000000001000000000000000100000000000000204f1d90aecc22386cf8bd2d60c6a2d6d6c43c1918619306fffdbd5f5dfb68cd920000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000000b0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000000000000000000020dbe2f7949c2848e292bebf1a30a4e72f4262acd55370a4d9815d9aa7bcaa012000000000000000010000000000000000000000000000002016c3a237b73b54311219f282ce47e3b5a782e5274e048bda1d6866b9819192e300000000000000010000000000000001000000000000002045bb9d506f74a19123d41a442d1de0fdfbaca183dfb2af0cc5027621a991b2b2000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb81659000000000000000c0000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020724ffd0f25aa4e243d2c307552ed37381703107372320593eb3a4d313b319f910000000000000001000000000000000100000000000000207632194eaa79882c73a99557dd547ccd6fd120c5b43667fce4768d60ee466a6d000000000000000100000000000000000000000000000020266533c386eaecf62505c82a33fc748ed3dfb0dd1f1c3b6ef1c350f30907840f000000000000000100000000000000000000000000000020a07353c5029eac2f5fb14b7aaa839b9ff2b01dd6feeb51c341820462ab766306000000000000000100000000000000010000000000000020c83fb7977aaee24d0d89212e2f1147bf9b405849963f175fe61a4d8858b02981000000000000000100000000000000010000000000000020b5bce503fbe3c862f5dee2b2178880e5138877654a6074060e791faca56b5b7a000000000000000c0000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000202ac7747cd68e0e8f386445c4b73e691738da5997681898b63d8a1fdd2f7318d500000000000000010000000000000001000000000000002048f8483f7e54318f5880730aa74c25c4d947a419c1457363fa11f33292ddacb10000000000000001000000000000000000000000000000203e730a9762014a0bc462be90ae606e5d47c72eb18f70e7e52e6fdbf0e6f0ca51000000000000000100000000000000000000000000000020a45ee5473875579efd498bb9c2b6715752587f3d8b2592b454ecfaa7a4333af7000000000000000100000000000000010000000000000020cf504b73a6895274c71dacf49d762356ec2bd03ce8fe5803674473ffb2f75dab00000000000000010000000000000001000000000000002020cfc65f4dd53a0e075d2b171d58f028ea93f9f06598ea66ab6576597c5e3adc000000000000000c00000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000204ac156fe78cb66cc11b0523329bdc9822cfc7ef36d86d1a58cac556bedacedaf00000000000000010000000000000001000000000000002010b0493443555dc67ee87c1bd8063b9e36aa14d724f309f7e8809f3a39a534e30000000000000001000000000000000000000000000000200f6629916e8ea9140c1e5fe82516b014e06c6a7ffb9a27dbe8073629cf7bcfd300000000000000010000000000000000000000000000002017851b1e9a70cbcc32eb47f7ecfae668e5855348fa541f9cd9cc78455c2f52ed00000000000000010000000000000001000000000000002053a154c078c66a5575d8a7f207001382fba159ce2679af84faeb3294f69fe9e4000000000000000100000000000000010000000000000020086d8c265926ade2c3c41e3d86ae3f446435a428d3fb807285198cd4d2554eb0000000000000000c00000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000201376c8ebc60bc7ac345e110600c578a9251d294fde213df2b39d2d10af7b72ab0000000000000001000000000000000100000000000000202278c1169f697b84d00147af89a2646538a6511cffad2faa7b319e55d636471d000000000000000100000000000000000000000000000020366469e7d59d6bc640bafe4261eac135e7f403c7d83905ecb45477e3f080df680000000000000001000000000000000000000000000000202cc11ee53cada1579b266c3b3e900aa197ce5a4bde333a64f8a5d1e71e5ec9c6000000000000000100000000000000010000000000000020dd1c1802ff1109af90e7501197f83b1086afac936987a7b7b940c7eea1eafa7e000000000000000100000000000000010000000000000020ee96f610e3f62ac6a3af8b09bdf54bff9f61482a5b4905803e9446aa9acb86e0000000000000000c0000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d0000000000000006000000000000000100000000000000010000000000000020547e4936c71929988cb4f1df9bc7e773529a27708006dacd48b89d487eac4d8b00000000000000010000000000000001000000000000002021bc05aef3a17c8a1d63eb499367fa51cd6c2c3b2716d1cd6b8c11c4a3b3722a0000000000000001000000000000000000000000000000204b3a8c95985e02c1091d8b74e359262a94d60b3baac08c1afc3d4c34b039a42b000000000000000100000000000000000000000000000020dd7d0f921f70b1c400e2053b21a89931a0d729e3164966f8cdf0a44bdd836801000000000000000100000000000000010000000000000020e5c759c937f7595058dd1127c1b7565d04c88fd6ce769fcdb1854234cc60382900000000000000010000000000000001000000000000002041f1deb9d44c749741ce0d46bc27277338301ab8efb39241180426727cb8165900000000000000230000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff1000000000000000600000000000000010000000000000000000000000000002024f3af1b1647bb312c015a48502bdcba582529e56718776c1cf05694f83b3cf10000000000000001000000000000000000000000000000204b06bb483c21112f9cdd7eff56256a5630233353d836a5d668685bfdc6a4041e000000000000000100000000000000010000000000000020d80cc5cdbb0ec297cddfda4fd988de76b705f83576117fb5ed10b48a9b959bb0000000000000000100000000000000010000000000000020de4e1fd1df8638226f88eb85cf1887650f7a999dde645ee6368965b2368898950000000000000001000000000000000100000000000000204f867a0948b81531d95731b53c192de3de5683271c9a1cc0ac14df220b41408c00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000230000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e000000000000000600000000000000010000000000000000000000000000002026d903d0be54bf22c5189d1118bd93f6a98c383d8d88d66724bfe911e82b2b74000000000000000100000000000000000000000000000020393cccd066625747c7bb15e378554916665b267344c9bf3a1f1e239b4d3166fc00000000000000010000000000000001000000000000002072ecff12c730f10ff239ae5d5ec6e0ecd7a93d7c6f58e48faaf9efc69af68a03000000000000000100000000000000010000000000000020ffa6fd6b2bb776f0017bd053d81f3be0123b5193aa2e9b7587911a48528b1f8900000000000000010000000000000001000000000000002076b338eb5ef4ecedf088a240d844ad8aa568c3fc1e06595dfc1bcf5c1d7eb5060000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000002300000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb6265120000000000000006000000000000000100000000000000000000000000000020315f848ff4d7d38fb384ae430ef99536792647667ccb2454dc022ec7a768aaf4000000000000000100000000000000000000000000000020d2096ab2fdbc4ed9fcb3f176b5554a872f0e907766b3c2d7a358a3e01f8fde260000000000000001000000000000000100000000000000209636be1e4b8abd68cb43b0274502fefa81dd44893b457dcd361701b81c119a5b00000000000000010000000000000001000000000000002040b7bd8d7fd394411a7adc3e3d132b959ede1749a823b0bbbf27df8c12b316b000000000000000010000000000000001000000000000002097542ac9e8339ff6159a0199fb858a99137bc6bbbe6dc3fa8311d3220b29cab700000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000002300000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde56120000000000000006000000000000000100000000000000000000000000000020afe781427da25b2656f4afe658d7b09fdf74224657f244abf61f9cdedf9390a0000000000000000100000000000000000000000000000020fc18f1981d845ff496938d740e8859186fa60708758e2c4966cc30321ee5af9700000000000000010000000000000001000000000000002034d606e528ae97ba399a8765a39ca8182a9abb6191e6065fb37a87dffc92f9880000000000000001000000000000000100000000000000207794a6e7ab3a2607315a56d8ffe8999f9427ce2f2490356c082fa61238b586300000000000000001000000000000000100000000000000208b43e56d7018073c7ddbdcbb43e6f2b6fe723633f9f0413f2816154d995f9df50000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000230000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000000000000000000209622e98ec4df3449c67d9e48114f130f446fae93b72f4bf53789536c86b6d631000000000000000100000000000000000000000000000020a58adfd2e024e06c922fbd6f0c6e29c0aa467b652272a9cd35196719e496cfd60000000000000001000000000000000100000000000000200df38a45fc387ce7388d7edbd245b965091614cd5a7aa1118bcbb22942e4bb9300000000000000010000000000000001000000000000002039c6e39fbf567d6f0eea96a1bf5ae89fbd6baa5901743903413a2a0f0e80cc37000000000000000100000000000000010000000000000020af5e2eee9acf70cad29c2ac15206180900bc7282a0186ad882e78e35bf977f5f000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c0000000000000000320000000000000020716cec0d47c884efe528c1932a8df60ddcb8c021da2c78b261cc7a8c86c0aff10000000000000006000000000000000100000000000000010000000000000020cead2a72fa7974c8cd84b21e2362159483af9bb8274514838dfb974484a1575000000000000000010000000000000000000000000000002005bd0da2469f2c21b3a29c3fb9805e1c169b17d94f8f17fb27b467cf42de28db0000000000000001000000000000000100000000000000205f3c867463c166fd9c0125885c51251e20c9b8d44030db7f8c699a0f747c2522000000000000000100000000000000010000000000000020f006cf8352bbf180ccb81999dec2d0377abf32ec1a119242758d07bf00181499000000000000000100000000000000000000000000000020e4a44c1e8331fb3764b3cb5e00b57b569a11545f1703737d2ec96bee3fe173ba00000000000000010000000000000000000000000000002010a4f3067afce9cadb49d5512675f4089fa47b1c6145520156a6296f4b6d44c700000000000000320000000000000020a096243b698e32dced2e8714c5b6dc3ca8323689d1f26d03beafb556fe77347e00000000000000060000000000000001000000000000000100000000000000205171129cc905c8d4a2a5e72692fa2146a126401361ba92ac1f21e9fc301a8f5600000000000000010000000000000000000000000000002065f01400d8c5267b0c9e1b41ef2836adc1616da98100daa5b32b8ba39b374ee10000000000000001000000000000000100000000000000201005d0456ea86f38d81d86687e8f11923a23456f3c2f3ff55d7c8acb9de64d690000000000000001000000000000000100000000000000208d5b321bbfd951f9cb7659d22f534c96ff102f4c76a497617e5abb9dfa82d388000000000000000100000000000000000000000000000020ed7f9b4d8c800daec29810e1d30c95a2ac4193892cdf48f11b9cece5a834b7870000000000000001000000000000000000000000000000208c7585be4baceec61dda46547d6059e9b46cb44423033513d943d1ef68e3248e000000000000003200000000000000201275a1e8c448b541848c55c9650bc43974a5c3f17f03ec53a707452feb62651200000000000000060000000000000001000000000000000100000000000000208f12edd561d40b61d3d50b9d6b8679c0a5358ccf17fef9bd9448e821759aae630000000000000001000000000000000000000000000000204c94dd0a0f2cb0cb59dcc9b4beb35fd98efaa2cc92cf08466d21549d33875f98000000000000000100000000000000010000000000000020c777ac306a941e7299543eb8e965674fbfd21d8db21d4e6efb2f426e941de1bf00000000000000010000000000000001000000000000002077140c9519235b46e9281299155f5f67e417ff114e7ade36dfc35a5d9cd2e2d700000000000000010000000000000000000000000000002051722b993fed9d1efd7b3a7e44ba845475b07cb9163bf3112ade9cbefff0647100000000000000010000000000000000000000000000002025128634b4af25381e0d5d1eb9f22d259e70898c17a942192d6d86985615fa2e000000000000003200000000000000201cb5f6f444b1c56a2a01ded4de69f4f899e483fab914634bf88268a63cde561200000000000000060000000000000001000000000000000100000000000000201cf667c93218461cd715e63b61f883b6ac7ff0f91a4b86acc95ef8c3296717ec000000000000000100000000000000000000000000000020ed96c4ea6aa26447890bc48910f7d9f42a4fb3d8af08a3a74346b72167154a40000000000000000100000000000000010000000000000020390db850e000e33e00c0ae3ae80c19561aeab2d6f4dd64e8c024820f8d12d8d50000000000000001000000000000000100000000000000206e7dc7fda7866ca355c1f89e48853a86a9d9b363159deb6fb5ef53aeda9b1c2400000000000000010000000000000000000000000000002078cdee2ea5faba6663676c4f4610229cc5cd1c1c0cdc38f9b01331797fb30d310000000000000001000000000000000000000000000000202acbbe7e98cf5709c49c5060a40d850c367fa6b383f35b244367f148f5586f8e00000000000000320000000000000020d7f386cc786ddbfcf6cf2a08a9e5b567ed987d1eb8e46673535ba4975169dc1d00000000000000060000000000000001000000000000000100000000000000205158bbe04522354f51ba354a6cc863746e521e6d494de5fa79dfe2a4e0a2524b0000000000000001000000000000000000000000000000204214f1b616812c5b41ff45c0d2acddfd991317d68de3ff1ed1900ce663f1230e0000000000000001000000000000000100000000000000200c26f3577db6f6fc8ca13505100d7c1f5e90088ce53af1ae45ddb54d2ffe746d00000000000000010000000000000001000000000000002072bbfd71e002ce04de2fac87c41cdb38dc917d8c5386b1ebdd6e02865da280340000000000000001000000000000000000000000000000205bc128850342562f315cbaa6f57fd6ac9fd3106aa09764f3ae77178216aeccbe000000000000000100000000000000000000000000000020dcc082775d37af166c7e41d8ee92e3a51e45b2c989f5c36ef0019f4402963c00000000000000005000000000000000220000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020c6f7aa4930d9a8c251a4312639ae05682c54ff72fad1db5e4cb2410194e3c5910000000000000001000000000000000000000000000000204cb289dc9048d6c33309e5c602e250a6cb32025f0ff1381d8cd94a2e7065662a00000000000000010000000000000001000000000000002019e4a5fede7e19b687dfcb423f417d8b7b32b4b43f7b7c27efb040445dfd17b1000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000020000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020df9a09bdecc3a0e79608329d7b4a657d0def510f87e0fdbdd095532e88dafb2900000000000000010000000000000000000000000000002016d682d36234c927920c9be2ef73d4aaa8b6e912ea4036ea103b48aced648e62000000000000000100000000000000010000000000000020ac276de3aa96ad1e64c43ac69575789fb35e8dd5d6f379518b7f2106bb5b7a4d000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000270000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000000000000000000020748048ac2297691ce7d5958b10b593ee34f60b9a0842a701c5d57681e32eef7b000000000000000100000000000000000000000000000020272cb7a0807a23e323a7c2dd5a9b977edbfba7c8f35fec272f666babeffb3bb40000000000000001000000000000000000000000000000203af36074ac02d520704d4024aa7f8edf35c6dbe9badc79747cb8a446ba559575000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000070000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000000000000000000020e719bf214c2399159b9336938dffefa5f1de511c3bb5e3c02b2bdb62b9319b4d000000000000000100000000000000000000000000000020f4e3e97d431657c336423763cc1ad92306213f7cb6cf711a2b0b087510dec8ee000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000080000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000206d0a3b2c933306c39aefe30ed68fe56af597128166e3fa9aa2f7b19fe5172b2d0000000000000001000000000000000100000000000000207925c8eb7eb252649496eaca35f1935ad35c0d1219a86e0840b81a3348f1b4de000000000000000100000000000000010000000000000020b14d20b4e51a485e637d358332632a6c29a8d14bf2bb09376b5361a37f836be80000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000080000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020a08493497e503e6670abd6e92149b9b6c96b30eb83fb0bfa714137f4206289b3000000000000000100000000000000010000000000000020fa34f6949f8733eb9f6f868ade5c3be74dfc98265ba7185ff4b0cfe95ee75ad1000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000280000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020974ede7d5c76f5d895ddf7c3a15e944a2c520307533d6d73c2a764b4e5b015c80000000000000001000000000000000100000000000000209241dbebf40ae518870e159edcbc815e2e0d9e2b71a5e2252c4b06f0f88d97a20000000000000001000000000000000100000000000000206a953a26f814640662f3683f32561680d02f790320fa23a5c0648c7c91d856610000000000000001000000000000000000000000000000209c4b00c8496d131f492c88318e21e27cad9cce37b8f2ca1e1c4225d19e5f219b00000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000080000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020a08493497e503e6670abd6e92149b9b6c96b30eb83fb0bfa714137f4206289b3000000000000000100000000000000010000000000000020fa34f6949f8733eb9f6f868ade5c3be74dfc98265ba7185ff4b0cfe95ee75ad1000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000320000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020ba8eb783f8e9b9ec9a8be64428a6a46cb6eb0026c0b76449781ba483cced208600000000000000010000000000000000000000000000002024032ee71505748a24093a56d01e5d9a7af31aa527f7b91baf4eb4bd924f54c70000000000000001000000000000000100000000000000208c5f5a9ca92fa25b3cb2269109772cf046d141f2f266e6b00a51880f9b5e4c0c0000000000000001000000000000000100000000000000206734614ed77e53573ffbf86fbe44cbefe573d472aa76a42ac157c94157e83947000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000120000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020be918da74d3cad95d14002ba8c626bb2168af51f9eedf138c98d4ed279089176000000000000000100000000000000000000000000000020a198a7db0a8414188f7664a8c774263eb07f47bd62487a1a44d3a54ea68c07e00000000000000001000000000000000100000000000000209e52e0555c0963eb1c4fb49139486ee99362b6bb8847fea901b7b78e74bec727000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000050000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000000000000000000020c132da55de0da88e9a5c77c1df68da65ef466b5158869ec62fe89455bc34f1b3000000000000000100000000000000010000000000000020b217496e0441a6eaeca0899f8bad1cb6dd37d8c230e0f79a209b346b99ac9a59000000000000000100000000000000000000000000000020d4f464b25f572efbda4e6ebee3c6e18d8d8b8b660489af4be21d41d42e1eb9ef0000000000000001000000000000000100000000000000206fa72c168a995814b90006c204f6749234c04087487ec39d56612aa3e890e90b0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000050000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205440c83e7896b38eaa1b93701c961b2eef127a1bd890b41fe09e4a43e93de194000000000000000100000000000000010000000000000020c562e756fee19067cbdc57051d93b33a4668eafd9041e18f025c1fda76524937000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c5000000000000000b0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000000000000000000201c262123d783665f99dd549abc3ec9cf75f1a89bb82a26f44ef0c6c3912aec73000000000000000100000000000000000000000000000020ddc4fc64e8c9a53ea4cd7b045f6c576e6728115b82d3cc1cab1f2920cdddb337000000000000000100000000000000010000000000000020b14d20b4e51a485e637d358332632a6c29a8d14bf2bb09376b5361a37f836be80000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000000b0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000000000000000000002072f17ba755a635b76225ce8129df9554f68d2be1c9635f747514ebe588a91e480000000000000001000000000000000000000000000000206ab319f03d7349e32b9e5cdafd0353970678990579106ff246e94977eeb65183000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000260000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000201c6e720a658279ba4c4e5f1d24996836addc0fa24585db0231dce13da0528994000000000000000100000000000000000000000000000020272cb7a0807a23e323a7c2dd5a9b977edbfba7c8f35fec272f666babeffb3bb40000000000000001000000000000000000000000000000203af36074ac02d520704d4024aa7f8edf35c6dbe9badc79747cb8a446ba559575000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000060000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020b255a9cd1523a1e489a14cb4d343421e2fa6034b18b9733263939e0ceac19ec0000000000000000100000000000000000000000000000020f4e3e97d431657c336423763cc1ad92306213f7cb6cf711a2b0b087510dec8ee000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000330000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000000000000000000203469165caa5d7bcaad00626c0eeae8c040a0cd38acbfdbea3f5ec4e8fb5e2b7100000000000000010000000000000000000000000000002024032ee71505748a24093a56d01e5d9a7af31aa527f7b91baf4eb4bd924f54c70000000000000001000000000000000100000000000000208c5f5a9ca92fa25b3cb2269109772cf046d141f2f266e6b00a51880f9b5e4c0c0000000000000001000000000000000100000000000000206734614ed77e53573ffbf86fbe44cbefe573d472aa76a42ac157c94157e83947000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000130000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000201f6c2a16d3a52b8a92c273c4e8406e5e46ae99a5c2feb335b743749c0cc5dd3b000000000000000100000000000000000000000000000020a198a7db0a8414188f7664a8c774263eb07f47bd62487a1a44d3a54ea68c07e00000000000000001000000000000000100000000000000209e52e0555c0963eb1c4fb49139486ee99362b6bb8847fea901b7b78e74bec727000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000120000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000001000000000000002035b6e487e20e64fdb2e6c7e88912dfc91acb5810e782743572e93726f3c60f2d000000000000000100000000000000000000000000000020f374142d6ecbece6d4a8c9b426347e00c8427e0f55d0ce67205828392302857700000000000000010000000000000001000000000000002091c3d5608b436e656c545379d9e5121724f1eb1e3da7c00a6edd742c0adbea9a000000000000000100000000000000010000000000000020d09f4cd6fb164d23ae42c6a0492914ba86bfda75dff9dcb23d67045f57f646eb0000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000120000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020be918da74d3cad95d14002ba8c626bb2168af51f9eedf138c98d4ed279089176000000000000000100000000000000000000000000000020a198a7db0a8414188f7664a8c774263eb07f47bd62487a1a44d3a54ea68c07e00000000000000001000000000000000100000000000000209e52e0555c0963eb1c4fb49139486ee99362b6bb8847fea901b7b78e74bec727000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c320000000000000002b0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002069bd3d8b5553acade7249d0474b703e1d5c342b402d34af2671d3eb959997b61000000000000000100000000000000000000000000000020704f499ba4024299b4fbce58ed843a14fd7004bce10329e90c19f7dfe7dd3acf0000000000000001000000000000000100000000000000206a953a26f814640662f3683f32561680d02f790320fa23a5c0648c7c91d856610000000000000001000000000000000000000000000000209c4b00c8496d131f492c88318e21e27cad9cce37b8f2ca1e1c4225d19e5f219b00000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe2000000000000000b0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000000000000000000002072f17ba755a635b76225ce8129df9554f68d2be1c9635f747514ebe588a91e480000000000000001000000000000000000000000000000206ab319f03d7349e32b9e5cdafd0353970678990579106ff246e94977eeb65183000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000240000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020610490f9210f6482aafb2fd925448e00fd7a0b0d656da35b35974f0ed07353380000000000000001000000000000000100000000000000203a5827c2882befa4bc23410aab42a1065f7a14aa28427cb945a73ce92d84b8c00000000000000001000000000000000000000000000000203af36074ac02d520704d4024aa7f8edf35c6dbe9badc79747cb8a446ba559575000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000040000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000100000000000000204aba3651601b5e61a29f5f6b4cc63305b28e9fcfc910ce88939407fd593b1f00000000000000000100000000000000010000000000000020c562e756fee19067cbdc57051d93b33a4668eafd9041e18f025c1fda76524937000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c5000000000000000c0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000001000000000000002020b49f91c6c8ee14e484840427f5ab3bf2c26d83dbe8dce70c1e14bb9814e029000000000000000100000000000000010000000000000020dd7fa1eda7e8b74fadcaef802779eba900ce6a1cadebe870727a960f0ad96d19000000000000000100000000000000000000000000000020160c4df7d87c48492c8bbfcd357f8eee42f5146d564a06e1208402da964098ae0000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000000c0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000001000000000000002087fbd8eee0c1464079e6ffa5d38470360559ae03fa9c2f14e8a5eb6a74cfe17a000000000000000100000000000000010000000000000020c3d0bd8238559dd96928de090c5a0806056097009ef2ec8d21ace1fb38d369a4000000000000000100000000000000000000000000000020eed54270dbb003570d306705fdd7083a3d7a9636bb3bb6f191b2a30a577afb520000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000350000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000000000000000000202c6c88e8f0c1cd662481635e712e05e68775311e7f8a63f5d8256da949c11364000000000000000100000000000000010000000000000020dec0f85242e87bcde79b8f8073e6532b0624ae519e39493cde9f0a63f649b678000000000000000100000000000000000000000000000020fb1faa5f95d893ba07a189cbce862ef411cc25da7b445accdb6293b794baf06b0000000000000001000000000000000100000000000000206734614ed77e53573ffbf86fbe44cbefe573d472aa76a42ac157c94157e83947000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000150000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000000000000000000020e9905150c1532980c4c75a7f13d5dddbc76af47c932cced40a2c81487e7489d0000000000000000100000000000000010000000000000020cbec1229f906105230cc17e835025d9d5519d1fbd664eb4ac98969a51aed603f000000000000000100000000000000000000000000000020b05361fd4c756db858c53221d927e22140f013ca63bf1fb3c9739df207d6d702000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c320000000000000001a0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000201b3eab27c13370bf54fceb8b57a7a990335fcdccac21b19423077cf81573c8fb0000000000000001000000000000000000000000000000206c44b46cfc973d5eb8bde55847539df3dedf939bde18bd23ac617c1365eda35d000000000000000100000000000000010000000000000020f48f5d2471c48275aeeb25f0f5bdb50240a97dda12ea2e3df644a25efa1b74f5000000000000000100000000000000000000000000000020eca549bec44e65d3dfe608335df73376d2ef4d0d702df494d1de21a8fd31b1050000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000001a0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000001000000000000002063d33d3f4bb0e1a5141947361f009459f1129eb1dc1430accee28379e42141ae00000000000000010000000000000000000000000000002053ee06c0af6e3d7f182e57cd0d726908dc38f21ca6466363d2aa9c07057d3791000000000000000100000000000000010000000000000020aa873ce4d7f4afd40edf1278d299c6c3f65447cffaa140939ba597cfbb17ae9400000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c320000000000000003c0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000001000000000000002051980c291eac7e04250602f2b13239290dabd6c26c64f02d4e70c3215a715e46000000000000000100000000000000010000000000000020d1b332c3114ea1ecd8adee701317c900bd240d21bd31ad2f3239f9d395479f580000000000000001000000000000000000000000000000206e93d37cc6d24cdddc4ec518d10bbc52c57414746b8f37048e6f9dc8518d703f00000000000000010000000000000000000000000000002097464258faa4181c827a41114b2e43dfd2fdd56311dfff9d6bd37b81663db0b9000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe2000000000000001c0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020169ff7dea3b1b0e8d51b9113692619ef50f413dafb02f348d398f3a52e00b79c00000000000000010000000000000001000000000000002087b8fc880cee6f4187d88ae01444f3d977f39b6cb7138c8e28ccccb721e8dd97000000000000000100000000000000000000000000000020f02907b469a124ab2f4196e8a2ba5f102426a738fc3bc6221dea20aa46310f5000000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000240000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020610490f9210f6482aafb2fd925448e00fd7a0b0d656da35b35974f0ed07353380000000000000001000000000000000100000000000000203a5827c2882befa4bc23410aab42a1065f7a14aa28427cb945a73ce92d84b8c00000000000000001000000000000000000000000000000203af36074ac02d520704d4024aa7f8edf35c6dbe9badc79747cb8a446ba559575000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000040000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000100000000000000204aba3651601b5e61a29f5f6b4cc63305b28e9fcfc910ce88939407fd593b1f00000000000000000100000000000000010000000000000020c562e756fee19067cbdc57051d93b33a4668eafd9041e18f025c1fda76524937000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c5000000000000001a0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000201b3eab27c13370bf54fceb8b57a7a990335fcdccac21b19423077cf81573c8fb0000000000000001000000000000000000000000000000206c44b46cfc973d5eb8bde55847539df3dedf939bde18bd23ac617c1365eda35d000000000000000100000000000000010000000000000020f48f5d2471c48275aeeb25f0f5bdb50240a97dda12ea2e3df644a25efa1b74f5000000000000000100000000000000000000000000000020eca549bec44e65d3dfe608335df73376d2ef4d0d702df494d1de21a8fd31b1050000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000001a0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000001000000000000002063d33d3f4bb0e1a5141947361f009459f1129eb1dc1430accee28379e42141ae00000000000000010000000000000000000000000000002053ee06c0af6e3d7f182e57cd0d726908dc38f21ca6466363d2aa9c07057d3791000000000000000100000000000000010000000000000020aa873ce4d7f4afd40edf1278d299c6c3f65447cffaa140939ba597cfbb17ae9400000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000020000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020b39029843c3d1bc7af2566145d482265884d1234dc81902c8b2b5ba00a6f89d60000000000000001000000000000000000000000000000204dc1ae24d15a1c66f0310264ed5ee327e6640d1ea637d3dc63a70838dffb50a1000000000000000100000000000000010000000000000020401e6d47c71559cff0584caa044bf75a327a87948b5cf6f8c8498f7c7f758f8c0000000000000001000000000000000100000000000000206fa72c168a995814b90006c204f6749234c04087487ec39d56612aa3e890e90b0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000020000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020df9a09bdecc3a0e79608329d7b4a657d0def510f87e0fdbdd095532e88dafb2900000000000000010000000000000000000000000000002016d682d36234c927920c9be2ef73d4aaa8b6e912ea4036ea103b48aced648e62000000000000000100000000000000010000000000000020ac276de3aa96ad1e64c43ac69575789fb35e8dd5d6f379518b7f2106bb5b7a4d000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000050000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000000000000000000020c132da55de0da88e9a5c77c1df68da65ef466b5158869ec62fe89455bc34f1b3000000000000000100000000000000010000000000000020b217496e0441a6eaeca0899f8bad1cb6dd37d8c230e0f79a209b346b99ac9a59000000000000000100000000000000000000000000000020d4f464b25f572efbda4e6ebee3c6e18d8d8b8b660489af4be21d41d42e1eb9ef0000000000000001000000000000000100000000000000206fa72c168a995814b90006c204f6749234c04087487ec39d56612aa3e890e90b0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000050000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205440c83e7896b38eaa1b93701c961b2eef127a1bd890b41fe09e4a43e93de194000000000000000100000000000000010000000000000020c562e756fee19067cbdc57051d93b33a4668eafd9041e18f025c1fda76524937000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000230000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002035cdc59fd4e93fdddb4f8e372acd2f93ef1999ee3e39830f18287fd780b974110000000000000001000000000000000000000000000000204cb289dc9048d6c33309e5c602e250a6cb32025f0ff1381d8cd94a2e7065662a00000000000000010000000000000001000000000000002019e4a5fede7e19b687dfcb423f417d8b7b32b4b43f7b7c27efb040445dfd17b1000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000030000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205c041797f461c4c8950d223686dddbe23ef4490e7eb38ecec461ec3a8e2802ab00000000000000010000000000000000000000000000002016d682d36234c927920c9be2ef73d4aaa8b6e912ea4036ea103b48aced648e62000000000000000100000000000000010000000000000020ac276de3aa96ad1e64c43ac69575789fb35e8dd5d6f379518b7f2106bb5b7a4d000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000390000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000000000000000000020351f8a0f29831d28f1e798741797efe02261d788051edc9a8dffe714b01a3b990000000000000001000000000000000100000000000000209a265a9518f38165fd912fd3266abb9502e52c0cd951cf2dd467d3199b58f7ab0000000000000001000000000000000100000000000000209311ed09c175c3c72ac8fe1d36824fd759f8184386bf35a81793adc9bb8b22a100000000000000010000000000000000000000000000002097464258faa4181c827a41114b2e43dfd2fdd56311dfff9d6bd37b81663db0b9000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000190000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000209f168d553d7d0e076916cc6a15b5ef9458a75ff9688d258e9007b48a5480eda300000000000000010000000000000001000000000000002087a06c01f68ef71de3ddc1f535e0582954fee5d1e15379e0e9e8d4b1ef0978cf000000000000000100000000000000010000000000000020aa873ce4d7f4afd40edf1278d299c6c3f65447cffaa140939ba597cfbb17ae9400000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000200000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000201492e0e7654da6e5c41d51382a21180fa6775c94219a3701785768bf630241a5000000000000000100000000000000010000000000000020a356938ff75b271c06d43c1b588bc7dd48ba3d43e1c6ef9b7c9a79d1a6fb7d2600000000000000010000000000000001000000000000002019e4a5fede7e19b687dfcb423f417d8b7b32b4b43f7b7c27efb040445dfd17b1000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000000000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000100000000000000207bb9f418d81018b9695f9699f74725ec60684a7badb849f7da9eb0e06726806c000000000000000100000000000000010000000000000020297c5ccbdf5391fe9a33982ff368c160bbea47f01264cd733be7a18cbf1a3a9a000000000000000100000000000000010000000000000020ac276de3aa96ad1e64c43ac69575789fb35e8dd5d6f379518b7f2106bb5b7a4d000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c5000000000000001c0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020974c981378a1906b5bc1ecc3b9e4dd1fdba8a7a6b05a98c839a6913b95fef77800000000000000010000000000000001000000000000002006b5b2dec59694db6074703df8d9f2d7a4b7972f7c568a4f036cebfe5036cf590000000000000001000000000000000000000000000000205e933bf79f8f670bebb642c877a9651153c0592112ec0c284c562e4db7f83827000000000000000100000000000000000000000000000020eca549bec44e65d3dfe608335df73376d2ef4d0d702df494d1de21a8fd31b1050000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000001c0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020169ff7dea3b1b0e8d51b9113692619ef50f413dafb02f348d398f3a52e00b79c00000000000000010000000000000001000000000000002087b8fc880cee6f4187d88ae01444f3d977f39b6cb7138c8e28ccccb721e8dd97000000000000000100000000000000000000000000000020f02907b469a124ab2f4196e8a2ba5f102426a738fc3bc6221dea20aa46310f5000000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000200000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000201492e0e7654da6e5c41d51382a21180fa6775c94219a3701785768bf630241a5000000000000000100000000000000010000000000000020a356938ff75b271c06d43c1b588bc7dd48ba3d43e1c6ef9b7c9a79d1a6fb7d2600000000000000010000000000000001000000000000002019e4a5fede7e19b687dfcb423f417d8b7b32b4b43f7b7c27efb040445dfd17b1000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000000000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000100000000000000207bb9f418d81018b9695f9699f74725ec60684a7badb849f7da9eb0e06726806c000000000000000100000000000000010000000000000020297c5ccbdf5391fe9a33982ff368c160bbea47f01264cd733be7a18cbf1a3a9a000000000000000100000000000000010000000000000020ac276de3aa96ad1e64c43ac69575789fb35e8dd5d6f379518b7f2106bb5b7a4d000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000390000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000000000000000000020351f8a0f29831d28f1e798741797efe02261d788051edc9a8dffe714b01a3b990000000000000001000000000000000100000000000000209a265a9518f38165fd912fd3266abb9502e52c0cd951cf2dd467d3199b58f7ab0000000000000001000000000000000100000000000000209311ed09c175c3c72ac8fe1d36824fd759f8184386bf35a81793adc9bb8b22a100000000000000010000000000000000000000000000002097464258faa4181c827a41114b2e43dfd2fdd56311dfff9d6bd37b81663db0b9000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000190000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000209f168d553d7d0e076916cc6a15b5ef9458a75ff9688d258e9007b48a5480eda300000000000000010000000000000001000000000000002087a06c01f68ef71de3ddc1f535e0582954fee5d1e15379e0e9e8d4b1ef0978cf000000000000000100000000000000010000000000000020aa873ce4d7f4afd40edf1278d299c6c3f65447cffaa140939ba597cfbb17ae9400000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c320000000000000001d0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002042cb0ce28f07e49e49e3ea5458ae4dabf5e849a7c93c9b7d9eaf8fe9ab4f1d0200000000000000010000000000000001000000000000002006b5b2dec59694db6074703df8d9f2d7a4b7972f7c568a4f036cebfe5036cf590000000000000001000000000000000000000000000000205e933bf79f8f670bebb642c877a9651153c0592112ec0c284c562e4db7f83827000000000000000100000000000000000000000000000020eca549bec44e65d3dfe608335df73376d2ef4d0d702df494d1de21a8fd31b1050000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000001d0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000000000000000000020d399c9fdad128a4f941c9caf54414d13e651af187125a1f1c8524cd0ea38b14c00000000000000010000000000000001000000000000002087b8fc880cee6f4187d88ae01444f3d977f39b6cb7138c8e28ccccb721e8dd97000000000000000100000000000000000000000000000020f02907b469a124ab2f4196e8a2ba5f102426a738fc3bc6221dea20aa46310f5000000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000090000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002093049416e0400665b0a54a6d5758f2b5d0cf7e45f13b6ad74609ee9bfd76b9c00000000000000001000000000000000100000000000000207925c8eb7eb252649496eaca35f1935ad35c0d1219a86e0840b81a3348f1b4de000000000000000100000000000000010000000000000020b14d20b4e51a485e637d358332632a6c29a8d14bf2bb09376b5361a37f836be80000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000090000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205cdba0dd7ba3efc22c0198563bef49c638343e0ede65575be06257d64a3fed72000000000000000100000000000000010000000000000020fa34f6949f8733eb9f6f868ade5c3be74dfc98265ba7185ff4b0cfe95ee75ad1000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000190000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000000000000000000020eb3f7ac21e6be27aa27e4a85e1a6e15bc2d4284553e806c67afaebe0a8f753a40000000000000001000000000000000100000000000000208ca228846359c4c3c61ce8a75fdcc1892a635968df327b70c543451ab5aa9e17000000000000000100000000000000010000000000000020f48f5d2471c48275aeeb25f0f5bdb50240a97dda12ea2e3df644a25efa1b74f5000000000000000100000000000000000000000000000020eca549bec44e65d3dfe608335df73376d2ef4d0d702df494d1de21a8fd31b1050000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000190000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000209f168d553d7d0e076916cc6a15b5ef9458a75ff9688d258e9007b48a5480eda300000000000000010000000000000001000000000000002087a06c01f68ef71de3ddc1f535e0582954fee5d1e15379e0e9e8d4b1ef0978cf000000000000000100000000000000010000000000000020aa873ce4d7f4afd40edf1278d299c6c3f65447cffaa140939ba597cfbb17ae9400000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c320000000000000001c0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020974c981378a1906b5bc1ecc3b9e4dd1fdba8a7a6b05a98c839a6913b95fef77800000000000000010000000000000001000000000000002006b5b2dec59694db6074703df8d9f2d7a4b7972f7c568a4f036cebfe5036cf590000000000000001000000000000000000000000000000205e933bf79f8f670bebb642c877a9651153c0592112ec0c284c562e4db7f83827000000000000000100000000000000000000000000000020eca549bec44e65d3dfe608335df73376d2ef4d0d702df494d1de21a8fd31b1050000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000001c0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020169ff7dea3b1b0e8d51b9113692619ef50f413dafb02f348d398f3a52e00b79c00000000000000010000000000000001000000000000002087b8fc880cee6f4187d88ae01444f3d977f39b6cb7138c8e28ccccb721e8dd97000000000000000100000000000000000000000000000020f02907b469a124ab2f4196e8a2ba5f102426a738fc3bc6221dea20aa46310f5000000000000000010000000000000000000000000000002048cbc9463f5228c72f218aa878865d5d6e914cdecf483c10e62362be71686ba10000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000290000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002031a12dd71c6b96f5a8194266f2afbc2e31945494aaeec3712c42e54b2819dd800000000000000001000000000000000100000000000000209241dbebf40ae518870e159edcbc815e2e0d9e2b71a5e2252c4b06f0f88d97a20000000000000001000000000000000100000000000000206a953a26f814640662f3683f32561680d02f790320fa23a5c0648c7c91d856610000000000000001000000000000000000000000000000209c4b00c8496d131f492c88318e21e27cad9cce37b8f2ca1e1c4225d19e5f219b00000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000090000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205cdba0dd7ba3efc22c0198563bef49c638343e0ede65575be06257d64a3fed72000000000000000100000000000000010000000000000020fa34f6949f8733eb9f6f868ade5c3be74dfc98265ba7185ff4b0cfe95ee75ad1000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000100000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000001000000000000002070a91d5fca09298d7264ec7aee551a29734e99c8e8a266a9d9ab994b9719043a000000000000000100000000000000010000000000000020d69a66a010fe9f9ccfa2edf30d2a2a5644182a5ce4ec9318e8a6c5d32e2f6b7900000000000000010000000000000001000000000000002091c3d5608b436e656c545379d9e5121724f1eb1e3da7c00a6edd742c0adbea9a000000000000000100000000000000010000000000000020d09f4cd6fb164d23ae42c6a0492914ba86bfda75dff9dcb23d67045f57f646eb0000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000100000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020288524be9eeb76ec08cf8093d96b32dbd66fd5b0b6258f610786988d38424700000000000000000100000000000000010000000000000020853d37427e46cb215c06d743566796c32255e10836ff3e54bcf1e60318538e240000000000000001000000000000000100000000000000209e52e0555c0963eb1c4fb49139486ee99362b6bb8847fea901b7b78e74bec727000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000160000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000100000000000000209aaba30f4c6e6cb80582ca62be57d21bd4c663071b07ea2dce299fef9b609cf700000000000000010000000000000000000000000000002074bb1cd63f8085aa6c735c078a485c1dc846d1156df6555e790682e3d3e10da1000000000000000100000000000000000000000000000020be3474f216defb30f109b94fbb52114ccc2025721aac0c9ffe6ed1b277a55f2f000000000000000100000000000000010000000000000020d09f4cd6fb164d23ae42c6a0492914ba86bfda75dff9dcb23d67045f57f646eb0000000000000001000000000000000000000000000000206556d8f21f43cee879ff5ca698cb8aa8e65cd336d4ccf8e00c062fca0ab8ab5e0000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000160000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020d412a5795bef186da88b4ad18ce39cff80ce5944fefad41f61ef16de93f4b7ed000000000000000100000000000000000000000000000020eb5a47c059592fe7a2ed52ded68810c2f6ecb2464cec6bf523f407e7ec50920f000000000000000100000000000000000000000000000020b05361fd4c756db858c53221d927e22140f013ca63bf1fb3c9739df207d6d702000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c320000000000000000c0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000001000000000000002020b49f91c6c8ee14e484840427f5ab3bf2c26d83dbe8dce70c1e14bb9814e029000000000000000100000000000000010000000000000020dd7fa1eda7e8b74fadcaef802779eba900ce6a1cadebe870727a960f0ad96d19000000000000000100000000000000000000000000000020160c4df7d87c48492c8bbfcd357f8eee42f5146d564a06e1208402da964098ae0000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000000c0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000001000000000000002087fbd8eee0c1464079e6ffa5d38470360559ae03fa9c2f14e8a5eb6a74cfe17a000000000000000100000000000000010000000000000020c3d0bd8238559dd96928de090c5a0806056097009ef2ec8d21ace1fb38d369a4000000000000000100000000000000000000000000000020eed54270dbb003570d306705fdd7083a3d7a9636bb3bb6f191b2a30a577afb520000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000090000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002093049416e0400665b0a54a6d5758f2b5d0cf7e45f13b6ad74609ee9bfd76b9c00000000000000001000000000000000100000000000000207925c8eb7eb252649496eaca35f1935ad35c0d1219a86e0840b81a3348f1b4de000000000000000100000000000000010000000000000020b14d20b4e51a485e637d358332632a6c29a8d14bf2bb09376b5361a37f836be80000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd500000000000000090000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205cdba0dd7ba3efc22c0198563bef49c638343e0ede65575be06257d64a3fed72000000000000000100000000000000010000000000000020fa34f6949f8733eb9f6f868ade5c3be74dfc98265ba7185ff4b0cfe95ee75ad1000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000240000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020610490f9210f6482aafb2fd925448e00fd7a0b0d656da35b35974f0ed07353380000000000000001000000000000000100000000000000203a5827c2882befa4bc23410aab42a1065f7a14aa28427cb945a73ce92d84b8c00000000000000001000000000000000000000000000000203af36074ac02d520704d4024aa7f8edf35c6dbe9badc79747cb8a446ba559575000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000040000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000100000000000000204aba3651601b5e61a29f5f6b4cc63305b28e9fcfc910ce88939407fd593b1f00000000000000000100000000000000010000000000000020c562e756fee19067cbdc57051d93b33a4668eafd9041e18f025c1fda76524937000000000000000100000000000000000000000000000020cd4e0a0414c5364a3560de40c273fbbffb9bedd06078a3d6959d7a705bcde706000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c5000000000000000b0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd93900000000000000060000000000000001000000000000000000000000000000201c262123d783665f99dd549abc3ec9cf75f1a89bb82a26f44ef0c6c3912aec73000000000000000100000000000000000000000000000020ddc4fc64e8c9a53ea4cd7b045f6c576e6728115b82d3cc1cab1f2920cdddb337000000000000000100000000000000010000000000000020b14d20b4e51a485e637d358332632a6c29a8d14bf2bb09376b5361a37f836be80000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000000b0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000000000000000000002072f17ba755a635b76225ce8129df9554f68d2be1c9635f747514ebe588a91e480000000000000001000000000000000000000000000000206ab319f03d7349e32b9e5cdafd0353970678990579106ff246e94977eeb65183000000000000000100000000000000010000000000000020a1c24adf981f0743238d97632635bb0553d0b99dcb33000fb088661180d96f730000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c5000000000000000c0000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000001000000000000002020b49f91c6c8ee14e484840427f5ab3bf2c26d83dbe8dce70c1e14bb9814e029000000000000000100000000000000010000000000000020dd7fa1eda7e8b74fadcaef802779eba900ce6a1cadebe870727a960f0ad96d19000000000000000100000000000000000000000000000020160c4df7d87c48492c8bbfcd357f8eee42f5146d564a06e1208402da964098ae0000000000000001000000000000000000000000000000207cf1aed28045afc9e81f498b811640bb174bb37565a6b8262e9e8a461209bd1f0000000000000001000000000000000100000000000000204cfc485308731dc426159458c85663e4badd44b549e8280122835a4b4cb281380000000000000001000000000000000100000000000000205bf10dc59a13b90e881abd949a341f5738d5642fdd7d1241bc2cb59ddb0e0bd5000000000000000c0000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef5000000000000000500000000000000010000000000000001000000000000002087fbd8eee0c1464079e6ffa5d38470360559ae03fa9c2f14e8a5eb6a74cfe17a000000000000000100000000000000010000000000000020c3d0bd8238559dd96928de090c5a0806056097009ef2ec8d21ace1fb38d369a4000000000000000100000000000000000000000000000020eed54270dbb003570d306705fdd7083a3d7a9636bb3bb6f191b2a30a577afb520000000000000001000000000000000000000000000000206ed425d8b3c03ec9103a7ee7be6e4b55c554e2a9cda70235e93fe250e571139a000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000230000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd939000000000000000600000000000000010000000000000000000000000000002035cdc59fd4e93fdddb4f8e372acd2f93ef1999ee3e39830f18287fd780b974110000000000000001000000000000000000000000000000204cb289dc9048d6c33309e5c602e250a6cb32025f0ff1381d8cd94a2e7065662a00000000000000010000000000000001000000000000002019e4a5fede7e19b687dfcb423f417d8b7b32b4b43f7b7c27efb040445dfd17b1000000000000000100000000000000010000000000000020733c2543bc11fd1162f30f9ecb93836d968dc9f08d2774fa5a282a89604493f800000000000000010000000000000001000000000000002068c3c8c60119e51e904832f3e8e693569b77d5e8243170c95d9d257ee208a03e000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000030000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef500000000000000050000000000000001000000000000000000000000000000205c041797f461c4c8950d223686dddbe23ef4490e7eb38ecec461ec3a8e2802ab00000000000000010000000000000000000000000000002016d682d36234c927920c9be2ef73d4aaa8b6e912ea4036ea103b48aced648e62000000000000000100000000000000010000000000000020ac276de3aa96ad1e64c43ac69575789fb35e8dd5d6f379518b7f2106bb5b7a4d000000000000000100000000000000010000000000000020f7d354561e9b2e7735ce60ef83ce2f2489593b421cb4642a172d19346d977eca000000000000000100000000000000010000000000000020c1a7e93ade1f97ccb8317d056d09c8fe77b2eaec2b4134ddc1a3b7b9206179c500000000000000320000000000000020d60d046ead5c6213aa1979284fe2bf3e0beb048baa58501aa347abeb0a1cd9390000000000000006000000000000000100000000000000010000000000000020ba8eb783f8e9b9ec9a8be64428a6a46cb6eb0026c0b76449781ba483cced208600000000000000010000000000000000000000000000002024032ee71505748a24093a56d01e5d9a7af31aa527f7b91baf4eb4bd924f54c70000000000000001000000000000000100000000000000208c5f5a9ca92fa25b3cb2269109772cf046d141f2f266e6b00a51880f9b5e4c0c0000000000000001000000000000000100000000000000206734614ed77e53573ffbf86fbe44cbefe573d472aa76a42ac157c94157e83947000000000000000100000000000000000000000000000020cbfb778cde18e35ab0344f4b85b88df4f36cbf6d24c150ce600e67178b8827b5000000000000000100000000000000000000000000000020e0725cc48b30467ecbe48556beb3caf31041c9c7ab294f7e8ef642b0215a1fe200000000000000120000000000000020dacede16d63a39ac39198fb54ea52b44d1b74720f13f4776317c3df20f1bbef50000000000000005000000000000000100000000000000010000000000000020be918da74d3cad95d14002ba8c626bb2168af51f9eedf138c98d4ed279089176000000000000000100000000000000000000000000000020a198a7db0a8414188f7664a8c774263eb07f47bd62487a1a44d3a54ea68c07e00000000000000001000000000000000100000000000000209e52e0555c0963eb1c4fb49139486ee99362b6bb8847fea901b7b78e74bec727000000000000000100000000000000010000000000000020bd02b18b5162c5ac4761db5b593de2e4c18777a3069e98dc495d15a7aa70ffea0000000000000001000000000000000000000000000000203251395512b0308ae0e19ffc7814d52d6497585e03ae27623690a292dc32c32000000000000000022757b76fd426140eab664d1368b32b4575c5c05f7bfc09f3a9b3533b3c9f75a731dd7167d96a9490b7f73bf6bb80b577cbf82e548dc84490e48ce2a0e10a4605643d55ef \ No newline at end of file diff --git a/contracts/zkllvm/circuit6/commitment.sol b/contracts/zkllvm/circuit6/commitment.sol new file mode 100644 index 0000000..b0b3da4 --- /dev/null +++ b/contracts/zkllvm/circuit6/commitment.sol @@ -0,0 +1,652 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_commitment.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../containers/merkle_verifier.sol"; +import "../../algebra/polynomial.sol"; +import "hardhat/console.sol"; + +library modular_commitment_scheme_circuit6 { + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint64 constant batches_num = 5; + uint256 constant r = 2; + uint256 constant lambda = 40; + uint256 constant D0_size = 128; + uint256 constant max_degree = 7; + uint256 constant D0_omega = 7356716530956153652314774863381845254278968224778478050456563329565810467774; + uint256 constant unique_points = 6; + uint256 constant permutation_point = 3; + uint256 constant quotient_point = 1; + uint256 constant lookup_point = 5; + bytes constant points_ids = hex"020202020202020204040404040402020001"; + uint256 constant omega = 199455130043951077247265858823823987229570523056509026484192158816218200659; + uint256 constant _etha = 6008563573403509417202325099986068091355178794944813546249543044368318679621; + + struct commitment_state{ + bytes leaf_data; + uint256 roots_offset; + uint256 initial_data_offset; + uint256 initial_proof_offset; + uint256 round_proof_offset; + uint256 round_data_offset; + uint256[r] alphas; + uint64[batches_num] batch_sizes; + uint64 poly_num; + uint256 points_num; + uint256 theta; + uint256 x_index; + uint256 x; + uint256 max_batch; + uint256 domain_size; + uint256[] final_polynomial; + uint256 leaf_length; + uint256[][unique_points] denominators; + uint256[unique_points] factors; + uint256[][unique_points] combined_U; + uint256[][unique_points] unique_eval_points; + uint256[2] y; + uint256 j; + uint256 offset; + } + + function calculate_2points_interpolation(uint256[] memory xi, uint256[2] memory z) + internal pure returns(uint256[2] memory U){ +// require( xi.length == 2 ); +unchecked { + U[0] = addmod(mulmod(z[0], xi[1], modulus),modulus - mulmod(z[1], xi[0], modulus), modulus); + U[1] = addmod(z[1], modulus - z[0], modulus); +} + } + +// coeffs for zs on each degree can be precomputed if necessary + function calculate_3points_interpolation(uint256[] memory xi, uint256[3] memory z) + internal pure returns(uint256[3] memory U){ +// require( xi.length == 3 ); +unchecked { + z[0] = mulmod(z[0], addmod(xi[1], modulus - xi[2], modulus), modulus); + z[1] = mulmod(z[1], addmod(xi[2], modulus - xi[0], modulus), modulus); + z[2] = mulmod(z[2], addmod(xi[0], modulus - xi[1], modulus), modulus); + + U[0] = mulmod(z[0], mulmod(xi[1], xi[2], modulus), modulus); + U[0] = addmod(U[0], mulmod(z[1], mulmod(xi[0], xi[2], modulus), modulus), modulus); + U[0] = addmod(U[0], mulmod(z[2], mulmod(xi[0], xi[1], modulus), modulus), modulus); + + U[1] = modulus - mulmod(z[0], addmod(xi[1], xi[2], modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[1], addmod(xi[0], xi[2], modulus), modulus), modulus); + U[1] = addmod(U[1], modulus - mulmod(z[2], addmod(xi[0], xi[1], modulus), modulus), modulus); + + U[2] = addmod(z[0], addmod(z[1], z[2], modulus), modulus); +} + } + + function prepare_eval_points(uint256[][unique_points] memory result, uint256 xi) internal view { + uint256 inversed_omega = field.inverse_static(omega, modulus); + result[0] = new uint256[](2); + result[0][0] = mulmod(xi, inversed_omega, modulus); + result[0][1] = xi; + result[1] = new uint256[](1); + result[1][0] = xi; + result[2] = new uint256[](2); + result[2][0] = xi; + result[2][1] = _etha; + result[3] = new uint256[](2); + result[3][0] = xi; + result[3][1] = mulmod(xi, omega, modulus); + result[4] = new uint256[](3); + result[4][0] = xi; + result[4][1] = mulmod(xi, omega, modulus); + result[4][2] = _etha; + result[5] = new uint256[](3); + result[5][0] = xi; + result[5][1] = mulmod(xi, omega, modulus); + result[5][2] = mulmod(xi, field.pow_small(omega, 6, modulus), modulus); + + } + + function prepare_U_V(bytes calldata blob, commitment_state memory state, uint256 xi) internal view returns(bool result){ + +unchecked { + result = true; + uint64 ind = 0; + prepare_eval_points(state.unique_eval_points, xi); + // Prepare denominators + for( ind = 0; ind < state.unique_eval_points.length;){ + state.denominators[ind] = new uint256[](state.unique_eval_points[ind].length + 1); + if( state.unique_eval_points[ind].length == 1 ){ + state.factors[ind] = 1; + state.denominators[ind][0] = modulus - state.unique_eval_points[ind][0]; + state.denominators[ind][1] = 1; + } else + if( state.unique_eval_points[ind].length == 2 ){ + // xi1 - xi0 + state.factors[ind] = + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][0], modulus); + state.denominators[ind][2] = 1; + + state.denominators[ind][1] = + modulus - addmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + + state.denominators[ind][0] = + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + } else + if( state.unique_eval_points[ind].length == 3 ){ + state.factors[ind] = modulus - + mulmod( + mulmod( + addmod(state.unique_eval_points[ind][0], modulus - state.unique_eval_points[ind][1], modulus), + addmod(state.unique_eval_points[ind][1], modulus - state.unique_eval_points[ind][2], modulus), + modulus + ), + addmod(state.unique_eval_points[ind][2], modulus - state.unique_eval_points[ind][0], modulus), + modulus + ); + state.denominators[ind][3] = 1; + state.denominators[ind][2] = + modulus - addmod( + state.unique_eval_points[ind][0], + addmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][1] = + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][1], modulus), + addmod( + mulmod(state.unique_eval_points[ind][0], state.unique_eval_points[ind][2], modulus), + mulmod(state.unique_eval_points[ind][1], state.unique_eval_points[ind][2], modulus), + modulus + ), + modulus + ); + state.denominators[ind][0] = + modulus - mulmod( + state.unique_eval_points[ind][0], + mulmod(state.unique_eval_points[ind][1],state.unique_eval_points[ind][2], modulus), + modulus + ); + state.denominators[ind][0] = mulmod(state.denominators[ind][0], state.factors[ind], modulus); + state.denominators[ind][1] = mulmod(state.denominators[ind][1], state.factors[ind], modulus); + state.denominators[ind][2] = mulmod(state.denominators[ind][2], state.factors[ind], modulus); + state.denominators[ind][3] = mulmod(state.denominators[ind][3], state.factors[ind], modulus); + } else { + console.log("UNPROCESSED number of evaluation points"); + return false; + } + ind++; + } + + // Prepare combined U + for( uint256 ind = 0; ind < unique_points;){ + uint256[] memory point = state.unique_eval_points[ind]; + state.combined_U[ind] = new uint256[](state.unique_eval_points[ind].length); + uint64 cur = 0; + uint256 offset = 0x8; + for( uint256 k = 0; k < batches_num;){ + for( uint256 i = 0; i < state.batch_sizes[k];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(k == 2) cur_point = permutation_point; + else if(k == 3) cur_point = quotient_point; + else if(k == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + polynomial.multiply_poly_on_coeff( + state.combined_U[ind], + state.theta, + modulus + ); + if( cur_point == ind ){ + if( point.length == 1 ){ + state.combined_U[ind][0] = addmod( + state.combined_U[ind][0], + basic_marshalling.get_uint256_be(blob, offset), + modulus + ); + } else + if( point.length == 2 ){ + uint256[2] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp = calculate_2points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + } else + if( point.length == 3){ + uint256[3] memory tmp; + tmp[0] = basic_marshalling.get_uint256_be(blob, offset); + tmp[1] = basic_marshalling.get_uint256_be(blob, offset + 0x20); + tmp[2] = basic_marshalling.get_uint256_be(blob, offset + 0x40); + tmp = calculate_3points_interpolation( + point, tmp); + state.combined_U[ind][0] = addmod(state.combined_U[ind][0], tmp[0], modulus); + state.combined_U[ind][1] = addmod(state.combined_U[ind][1], tmp[1], modulus); + state.combined_U[ind][2] = addmod(state.combined_U[ind][2], tmp[2], modulus); + } else { + return false; + } + } + offset += state.unique_eval_points[cur_point].length * 0x20; + i++;cur++; + } + k++; + } + ind++; + } +} + } + + function compute_combined_Q(bytes calldata blob,commitment_state memory state) internal view returns(uint256[2] memory y){ + +unchecked { + uint256[2][unique_points] memory values; + { + uint256 offset = state.initial_data_offset - state.poly_num * 0x40; // Save initial data offset for future use; + uint256 cur = 0; + for(uint256 b = 0; b < batches_num;){ + for(uint256 j = 0; j < state.batch_sizes[b];){ + uint256 cur_point = 0; + if(cur < points_ids.length ) cur_point = uint8(points_ids[cur]); + else if(b == 2) cur_point = permutation_point; + else if(b == 3) cur_point = quotient_point; + else if(b == 4) cur_point = lookup_point; + else console.log("Wrong index"); + + for(uint256 k = 0; k < unique_points; ){ + values[k][0] = mulmod(values[k][0], state.theta, modulus); + values[k][1] = mulmod(values[k][1], state.theta, modulus); + k++; + } + + values[cur_point][0] = addmod(values[cur_point][0], basic_marshalling.get_uint256_be(blob, offset), modulus); + values[cur_point][1] = addmod(values[cur_point][1], basic_marshalling.get_uint256_be(blob, offset + 0x20), modulus); + offset += 0x40;j++; cur++; + } + b++; + } + } + for(uint256 p = 0; p < unique_points; ){ + uint256[2] memory tmp = values[p]; + tmp[0] = mulmod(tmp[0], state.factors[p], modulus); + tmp[1] = mulmod(tmp[1], state.factors[p], modulus); + uint256 s = state.x; + tmp[0] = addmod(tmp[0], modulus - polynomial.evaluate(state.combined_U[p], s , modulus), modulus); + tmp[1] = addmod(tmp[1], modulus - polynomial.evaluate(state.combined_U[p], modulus - s, modulus), modulus); + tmp[0] = mulmod(tmp[0], field.inverse_static(polynomial.evaluate(state.denominators[p], s, modulus), modulus), modulus); + tmp[1] = mulmod(tmp[1], field.inverse_static(polynomial.evaluate(state.denominators[p], modulus - s, modulus), modulus), modulus); + y[0] = addmod(y[0], tmp[0], modulus); + y[1] = addmod(y[1], tmp[1], modulus); + p++; + } +} + } + + function initialize( + bytes32 tr_state_before + ) internal returns(bytes32 tr_state_after){ + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + uint256 etha = transcript.get_field_challenge(tr_state, modulus); + require(etha == _etha, "Wrong etha"); + tr_state_after = tr_state.current_challenge; + } + + function copy_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + c + ) + mstore( + add(leaf, 0x40), + d + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_reverted_memory_pair_and_check(bytes calldata blob, uint256 proof_offset, bytes memory leaf, uint256[2] memory pair) + internal pure returns(bool b){ + uint256 c = pair[0]; + uint256 d = pair[1]; + assembly{ + mstore( + add(leaf, 0x20), + d + ) + mstore( + add(leaf, 0x40), + c + ) + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, 0x40 )){ + return false; + } else { + return true; + } + } + + function copy_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool b){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, offset)) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function copy_reverted_pairs_and_check(bytes calldata blob, uint256 offset, bytes memory leaf, uint256 size, uint256 proof_offset) + internal pure returns(bool){ +unchecked { + uint256 offset2 = 0x20; + for(uint256 k = 0; k < size;){ + assembly{ + mstore( + add(leaf, offset2), + calldataload(add(blob.offset, add(offset, 0x20))) + ) + mstore( + add(leaf, add(offset2, 0x20)), + calldataload(add(blob.offset, offset)) + ) + } + k++; offset2 += 0x40; offset += 0x40; + } + if( !merkle_verifier.parse_verify_merkle_proof_bytes_be(blob, proof_offset, leaf, offset2 - 0x20 )){ + return false; + } else { + return true; + } +} + } + + function colinear_check(uint256 x, uint256[2] memory y, uint256 alpha, uint256 colinear_value) internal pure returns(bool){ + +unchecked { + uint256 tmp; + tmp = addmod(y[0], y[1], modulus); + tmp = mulmod(tmp, x, modulus); + tmp = addmod( + tmp, + mulmod( + alpha, + addmod(y[0], modulus-y[1], modulus), + modulus + ), + modulus + ); + uint256 tmp1 = mulmod(colinear_value , 2, modulus); + tmp1 = mulmod(tmp1 , x, modulus); + if( tmp != tmp1 ){ + console.log("Colinear check failed"); + return false; + } + return true; +} + } + + function verify_eval( + bytes calldata blob, + uint256[5] memory commitments, + uint256 challenge, + bytes32 transcript_state + ) internal view returns (bool){ + +unchecked { + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + commitment_state memory state; + + { + uint256 poly_at_eta; + /* 1 - 2*permutation_size */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 40);// 0 + if(poly_at_eta != 0xd48b9f9a1f52577da4d5cb94d65e04052d79db412bde4a0173fa42abd6d4a45) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x68);// 0x1 + if(poly_at_eta != 0x26ba1e029c9bb574382cf9e82fd61417bef7b8854687e04db1103e8b3227358) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xa8);// 0x2 + if(poly_at_eta != 0xc1a2960d0f0a8b4518e0e188ef2e6476bad69a9a60a76184755138b7fac40b8) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0xe8);// 0x3 + if(poly_at_eta != 0x3c82cee414b34b8597c6467acabe7f651a6310503e344e7964a961b97e5d4398) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x128);// 0x4 + if(poly_at_eta != 0xd48b9f9a1f52577da4d5cb94d65e04052d79db412bde4a0173fa42abd6d4a45) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x168);// 0x5 + if(poly_at_eta != 0x26ba1e029c9bb574382cf9e82fd61417bef7b8854687e04db1103e8b3227358) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1a8);// 0x6 + if(poly_at_eta != 0xc1a2960d0f0a8b4518e0e188ef2e6476bad69a9a60a76184755138b7fac40b8) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x1e8);// 0x7 + if(poly_at_eta != 0x3c82cee414b34b8597c6467acabe7f651a6310503e344e7964a961b97e5d4398) return false; + /* 2 - special selectors */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x248);// 0x8 + if(poly_at_eta != 0x38fb1266f415fbd2618cfb2426d85025c3e9ac6c13d4ce1cb5709b216b4da6b2) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x2a8);// 0x9 + if(poly_at_eta != 0x1af710639a33a9ee25a99551d3fd807e70499333913a0f7ce486c5d6cd45a1b6) return false; + /* 3 - constant columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x308);// 0xa + if(poly_at_eta != 0x378ae8b217281e98232cf4c6dc2b21498547a11fd3025f8ab5fc7ade97636da7) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x368);// 0xb + if(poly_at_eta != 0x2fb0a4b594cb133a84d3b178be4595d031abfaaf17d83f3aa7f7c86c6477497e) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x3c8);// 0xc + if(poly_at_eta != 0x39f429a1fa53e4b8ea5cf81151d917a9c6df281fe390dd60fc915b3d85c942d2) return false; + /* 4 - selector columns */ + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x428);// 0xd + if(poly_at_eta != 0x24d458cd7f86fdba1387bf56c6d2174e370b3a80acf28f008c4d6010f5d0c592) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x468);// 0xe + if(poly_at_eta != 0x2c0ddd3571b65a3f78c96f8a052a2f5c1059f2586d8b149d986300e1c76cb79b) return false; + poly_at_eta = basic_marshalling.get_uint256_be(blob, 0x4a8);// 0xf + if(poly_at_eta != 0x24d458cd7f86fdba1387bf56c6d2174e370b3a80acf28f008c4d6010f5d0c592) return false; + } + + + { + uint256 offset; + + if (challenge!= transcript.get_field_challenge(tr_state, modulus)) return false; + + for(uint8 i = 0; i < batches_num;){ + transcript.update_transcript_b32(tr_state, bytes32(commitments[i])); + i++; + } + state.theta = transcript.get_field_challenge(tr_state, modulus); + + state.points_num = basic_marshalling.get_length(blob, 0x0); + offset = 0x8 + state.points_num*0x20 + 0x8; + for(uint8 i = 0; i < batches_num;){ + state.batch_sizes[i] = uint64(uint8(blob[offset + 0x1])); + if( state.batch_sizes[i] > state.max_batch ) state.max_batch = state.batch_sizes[i]; + state.poly_num += state.batch_sizes[i]; + i++; offset +=2; + } + + offset += 0x8; + offset += state.poly_num; + state.roots_offset = offset + 0x8; + offset += 0x8; + + for( uint8 i = 0; i < r;){ + transcript.update_transcript_b32(tr_state, bytes32(basic_marshalling.get_uint256_be(blob, offset + 0x8))); + state.alphas[i] = transcript.get_field_challenge(tr_state, modulus); + i++; offset +=40; + } + + + bytes calldata proof_of_work = blob[blob.length - 4:]; + transcript.update_transcript(tr_state, proof_of_work); + uint256 p_o_w = transcript.get_integral_challenge_be(tr_state, 4); + if (p_o_w & 0xffff0000 != 0) return false; + + + offset += 0x8 + r; + state.initial_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + + state.round_data_offset = offset + 0x8; + offset += 0x8 + 0x20*basic_marshalling.get_length(blob, offset); + offset += 0x8; + + state.initial_proof_offset = offset; + for(uint8 i = 0; i < lambda;){ + for(uint j = 0; j < batches_num;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != commitments[j] ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + offset += 0x8; + state.round_proof_offset = offset; + + for(uint256 i = 0; i < lambda;){ + for(uint256 j = 0; j < r;){ + if(basic_marshalling.get_uint256_be(blob, offset + 0x10) != basic_marshalling.get_uint256_be(blob, state.roots_offset + j * 40 + 0x8) ) return false; + offset = merkle_verifier.skip_merkle_proof_be(blob, offset); + j++; + } + i++; + } + + state.final_polynomial = new uint256[](basic_marshalling.get_length(blob, offset)); + offset += 0x8; + for (uint256 i = 0; i < state.final_polynomial.length;) { + state.final_polynomial[i] = basic_marshalling.get_uint256_be(blob, offset); + i++; offset+=0x20; + } + } + if( state.final_polynomial.length > (( 1 << (field.log2(max_degree + 1) - r + 1) ) ) ){ + console.log("Wrong final poly degree"); + return false; + } + + if( !prepare_U_V(blob, state, challenge) ) return false; + + state.leaf_data = new bytes(state.max_batch * 0x40 + 0x40); + for(uint256 i = 0; i < lambda;){ + // Initial proofs + state.x_index = uint256(transcript.get_integral_challenge_be(tr_state, 8)) % D0_size; + state.x = field.pow_small(D0_omega, state.x_index, modulus); + state.domain_size = D0_size >> 1; + for(uint256 j = 0; j < batches_num;){ + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.initial_data_offset, state.leaf_data, state.batch_sizes[j], state.initial_proof_offset)){ + console.log("Error in initial mekle proof"); + return false; + } + } + state.leaf_length = state.batch_sizes[j] * 0x40; + state.initial_data_offset += state.batch_sizes[j] * 0x40; + state.initial_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.initial_proof_offset); + j++; + } + { + state.y = compute_combined_Q(blob, state); + if( state.x_index < state.domain_size ){ + if( !copy_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + }else{ + if( !copy_reverted_memory_pair_and_check(blob, state.round_proof_offset, state.leaf_data, state.y) ){ + console.log("Not validated!"); + return false; + } + } + } + if( !colinear_check(state.x, state.y, state.alphas[0], basic_marshalling.get_uint256_be(blob,state.round_data_offset)) ){ + console.log("Colinear check failed"); + return false; + } + + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + for(state.j = 1; state.j < r;){ + state.x_index %= state.domain_size; + state.x = mulmod(state.x, state.x, modulus); + state.domain_size >>= 1; + if( state.x_index < state.domain_size ){ + if(!copy_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } else { + if(!copy_reverted_pairs_and_check(blob, state.round_data_offset, state.leaf_data, 1, state.round_proof_offset)) { + console.log("Error in round mekle proof"); + return false; + } + } + state.y[0] = basic_marshalling.get_uint256_be(blob, state.round_data_offset); + state.y[1] = basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20); + if( !colinear_check(state.x, state.y, state.alphas[state.j], basic_marshalling.get_uint256_be(blob,state.round_data_offset + 0x40)) ){ + console.log("Round colinear check failed"); + return false; + } + state.j++; state.round_data_offset += 0x40; + state.round_proof_offset = merkle_verifier.skip_merkle_proof_be(blob, state.round_proof_offset); + } + + state.x = mulmod(state.x, state.x, modulus); + if(polynomial.evaluate(state.final_polynomial, state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset)) { + console.log("Wrong final poly check"); + return false; + } + if(polynomial.evaluate(state.final_polynomial, modulus - state.x, modulus) != basic_marshalling.get_uint256_be(blob, state.round_data_offset + 0x20)){ + console.log("Wrong final poly check"); + return false; + } + state.round_data_offset += 0x40; + + i++; + } + return true; +} + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit6/gate_argument.sol b/contracts/zkllvm/circuit6/gate_argument.sol new file mode 100644 index 0000000..6da383c --- /dev/null +++ b/contracts/zkllvm/circuit6/gate_argument.sol @@ -0,0 +1,40 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_gate_argument.sol"; +import "hardhat/console.sol"; + + +contract modular_gate_argument_circuit6 is IGateArgument{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + // Append commitments + function verify( + bytes calldata blob, + uint256 theta + ) external view returns (uint256 F){ + uint256 theta_acc = 1; + uint256 eval; + uint256 x; + + + } +} \ No newline at end of file diff --git a/contracts/zkllvm/circuit6/lookup_0.sol b/contracts/zkllvm/circuit6/lookup_0.sol new file mode 100644 index 0000000..a392032 --- /dev/null +++ b/contracts/zkllvm/circuit6/lookup_0.sol @@ -0,0 +1,100 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 -- Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../../contracts/basic_marshalling.sol"; + +library lookup_circuit6_0{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + + + function evaluate_lookup_0_be( + bytes calldata blob, + uint256 theta, + uint256 theta_acc, + uint256 beta, + uint256 gamma + ) external pure returns (uint256 g, uint256) { + uint256 l; + uint256 selector_value; + uint256 sum; + uint256 prod; + + g = 1; + + selector_value=basic_marshalling.get_uint256_be(blob, 384); + l = mulmod( 1,selector_value, modulus); + theta_acc=theta; + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 544); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + g = mulmod(g, mulmod(addmod(1, beta, modulus), addmod(l, gamma, modulus), modulus), modulus); + l = mulmod( 2,selector_value, modulus); + theta_acc=theta; + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 576); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + g = mulmod(g, mulmod(addmod(1, beta, modulus), addmod(l, gamma, modulus), modulus), modulus); + + + return( g, theta_acc ); + } + + function evaluate_lookup_1_be( + bytes calldata blob, + uint256 theta, + uint256 theta_acc, + uint256 beta, + uint256 gamma + ) external pure returns (uint256 g, uint256) { + uint256 l; + uint256 selector_value; + uint256 sum; + uint256 prod; + + g = 1; + + selector_value=basic_marshalling.get_uint256_be(blob, 448); + l = mulmod( 2,selector_value, modulus); + theta_acc=theta; + sum = 0; + prod = basic_marshalling.get_uint256_be(blob, 544); + sum = addmod(sum, prod, modulus); + prod = basic_marshalling.get_uint256_be(blob, 512); + sum = addmod(sum, prod, modulus); + + + l = addmod( l, mulmod( mulmod(theta_acc, selector_value, modulus), sum, modulus), modulus); + theta_acc = mulmod(theta_acc, theta, modulus); + g = mulmod(g, mulmod(addmod(1, beta, modulus), addmod(l, gamma, modulus), modulus), modulus); + + + return( g, theta_acc ); + } + + +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit6/lookup_argument.sol b/contracts/zkllvm/circuit6/lookup_argument.sol new file mode 100644 index 0000000..a4adf9f --- /dev/null +++ b/contracts/zkllvm/circuit6/lookup_argument.sol @@ -0,0 +1,207 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../cryptography/transcript.sol"; +import "../../interfaces/modular_lookup_argument.sol"; +import "./lookup_0.sol"; + +import "hardhat/console.sol"; + +contract modular_lookup_argument_circuit6 is ILookupArgument{ +//library modular_lookup_argument_circuit6{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint8 constant tables = 1; + uint8 constant sorted_columns = 7; + uint8 constant lookup_options_num = 4; + uint8 constant lookup_constraints_num = 3; + + + struct lookup_state{ + uint256 theta; + uint256 beta; + uint256 gamma; + uint256 factor; + uint256 V_L_value; + uint256 V_L_shifted_value; + uint256 q_last; + uint256 q_blind; + uint256 mask; + uint256 shifted_mask; + uint256 selector_value; + uint256 shifted_selector_value; + uint256 theta_acc; + uint256 g; + uint256 h; + uint256 l_shifted; + } + + function verify( + bytes calldata zvalues, // Table values and permutations' values + bytes calldata sorted, // Sorted batch values + uint256 lookup_commitment, + uint256 l0, + bytes32 tr_state_before // It's better than transfer all random values + ) external view returns (uint256[4] memory F, bytes32 tr_state_after){ + bytes calldata blob = zvalues[0xc0:]; + lookup_state memory state; + state.V_L_value = basic_marshalling.get_uint256_be(zvalues, 0xc0 + 608 + 0x40); + state.V_L_shifted_value = basic_marshalling.get_uint256_be(zvalues, 0xc0 + 608 + 0x60); + state.q_last = basic_marshalling.get_uint256_be(zvalues, 0x0); + state.q_blind = basic_marshalling.get_uint256_be(zvalues, 0x60); + state.mask = addmod(1, modulus - addmod(state.q_last , state.q_blind, modulus), modulus); + F[2] = state.mask; + + state.shifted_mask = addmod( + 1, + modulus - addmod(basic_marshalling.get_uint256_be(zvalues, 0x20) , basic_marshalling.get_uint256_be(zvalues, 0x80), modulus), + modulus + ); + + types.transcript_data memory tr_state; + tr_state.current_challenge = tr_state_before; + { + state.theta = transcript.get_field_challenge(tr_state, modulus); //theta + uint256 l; + state.g = 1; + state.h = 1; + + transcript.update_transcript_b32(tr_state, bytes32(lookup_commitment)); + state.beta = transcript.get_field_challenge(tr_state, modulus); //beta + state.gamma = transcript.get_field_challenge(tr_state, modulus); //gamma + state.factor = mulmod(addmod(1, state.beta, modulus), state.gamma, modulus); + (l, state.theta_acc) = lookup_circuit6_0.evaluate_lookup_0_be( blob, state.theta, state.theta_acc, state.beta, state.gamma ); + state.g = mulmod(state.g, l, modulus); + (l, state.theta_acc) = lookup_circuit6_0.evaluate_lookup_1_be( blob, state.theta, state.theta_acc, state.beta, state.gamma ); + state.g = mulmod(state.g, l, modulus); + state.selector_value = basic_marshalling.get_uint256_be(blob, 288); + state.shifted_selector_value = basic_marshalling.get_uint256_be(blob, 320); + l = mulmod( 1, state.selector_value, modulus); + state.l_shifted = mulmod( 1, state.shifted_selector_value, modulus); + state.theta_acc=state.theta; + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 0), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 32), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = mulmod( l, state.mask, modulus); + state.l_shifted = mulmod( state.l_shifted, state.shifted_mask, modulus); + state.g = mulmod(state.g, addmod( state.factor, addmod(l, mulmod(state.beta, state.l_shifted, modulus), modulus), modulus), modulus); + state.selector_value = basic_marshalling.get_uint256_be(blob, 288); + state.shifted_selector_value = basic_marshalling.get_uint256_be(blob, 320); + l = mulmod( 2, state.selector_value, modulus); + state.l_shifted = mulmod( 2, state.shifted_selector_value, modulus); + state.theta_acc=state.theta; + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 0), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 32), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = mulmod( l, state.mask, modulus); + state.l_shifted = mulmod( state.l_shifted, state.shifted_mask, modulus); + state.g = mulmod(state.g, addmod( state.factor, addmod(l, mulmod(state.beta, state.l_shifted, modulus), modulus), modulus), modulus); + l = mulmod( 2, state.selector_value, modulus); + state.l_shifted = mulmod( 2, state.shifted_selector_value, modulus); + state.theta_acc=state.theta; + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 96), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 128), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = mulmod( l, state.mask, modulus); + state.l_shifted = mulmod( state.l_shifted, state.shifted_mask, modulus); + state.g = mulmod(state.g, addmod( state.factor, addmod(l, mulmod(state.beta, state.l_shifted, modulus), modulus), modulus), modulus); + l = mulmod( 2, state.selector_value, modulus); + state.l_shifted = mulmod( 2, state.shifted_selector_value, modulus); + state.theta_acc=state.theta; + l = addmod( l, mulmod(state.selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 192), modulus), modulus), modulus); + state.l_shifted = addmod( state.l_shifted, mulmod(state.shifted_selector_value, mulmod( state.theta_acc, basic_marshalling.get_uint256_be(blob, 224), modulus), modulus), modulus); + state.theta_acc = mulmod(state.theta_acc, state.theta, modulus); + l = mulmod( l, state.mask, modulus); + state.l_shifted = mulmod( state.l_shifted, state.shifted_mask, modulus); + state.g = mulmod(state.g, addmod( state.factor, addmod(l, mulmod(state.beta, state.l_shifted, modulus), modulus), modulus), modulus); + + + } + { + for(uint64 k = 0; k < 7;){ + state.mask = basic_marshalling.get_uint256_be(sorted, k*0x60); + state.shifted_mask = basic_marshalling.get_uint256_be(sorted, k*0x60 + 0x20); + state.h = mulmod( + state.h, + addmod( + addmod( + state.factor, + state.mask, + modulus + ), + mulmod(state.beta, state.shifted_mask , modulus), + modulus + ), + modulus + ); + unchecked{k++;} + } + } + + F[0] = mulmod( + l0, + addmod(1, modulus - state.V_L_value, modulus), + modulus + ); + F[1] = mulmod( + mulmod(state.q_last, state.V_L_value, modulus), + addmod(state.V_L_value, modulus-1, modulus), + modulus + ); + { + F[2] = mulmod( + F[2], + addmod( + mulmod(state.h, state.V_L_shifted_value, modulus), + modulus - mulmod(state.V_L_value, state.g, modulus), + modulus + ), + modulus + ); + } + { + for(uint64 i = 0; i < sorted_columns - 1;){ + state.beta = basic_marshalling.get_uint256_be(sorted, (i+1)*0x60); + state.gamma = modulus - basic_marshalling.get_uint256_be(sorted, (i)*0x60 + 0x40); + F[3] = addmod( + F[3], + mulmod( + mulmod( + transcript.get_field_challenge(tr_state, modulus), //alpha + l0, + modulus + ), + addmod( + state.beta, + state.gamma, + modulus + ), + modulus + ), + modulus + ); + unchecked{i++;} + } + } + tr_state_after = tr_state.current_challenge; + } +} diff --git a/contracts/zkllvm/circuit6/lookup_libs_list.json b/contracts/zkllvm/circuit6/lookup_libs_list.json new file mode 100644 index 0000000..2b3e69d --- /dev/null +++ b/contracts/zkllvm/circuit6/lookup_libs_list.json @@ -0,0 +1,3 @@ +[ +"lookup_circuit6_0" +] diff --git a/contracts/zkllvm/circuit6/modular_verifier.sol b/contracts/zkllvm/circuit6/modular_verifier.sol new file mode 100644 index 0000000..e8381db --- /dev/null +++ b/contracts/zkllvm/circuit6/modular_verifier.sol @@ -0,0 +1,264 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) Generated by zkllvm-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "../../interfaces/modular_verifier.sol"; +import "./commitment.sol"; +import "./gate_argument.sol"; +import "./lookup_argument.sol"; +import "./permutation_argument.sol"; +import "hardhat/console.sol"; +import "../../algebra/field.sol"; + +contract modular_verifier_circuit6 is IModularVerifier{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + bool constant use_lookups = false; + bytes32 constant vk1 = bytes32(0xfea6e42db0467c50e77d424afd0d4a1ab72abd18869974ea22808fb0a672d668); + bytes32 constant vk2 = bytes32(0xf3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7); + bytes32 transcript_state; + address _gate_argument_address; + address _permutation_argument_address; + address _lookup_argument_address; + address _commitment_contract_address; + uint64 constant sorted_columns = 7; + uint64 constant f_parts = 8; // Individually on parts + uint64 constant z_offset = 0xc9; + uint64 constant table_offset = z_offset + 0x80 * 4 + 0xc0; + uint64 constant table_end_offset = table_offset + 608; + uint64 constant quotient_offset = 736; + uint64 constant rows_amount = 8; + uint256 constant omega = 199455130043951077247265858823823987229570523056509026484192158816218200659; + uint256 constant special_selectors_offset = z_offset + 4 * 0x80; + + function initialize( +// address permutation_argument_address, + address lookup_argument_address, + address gate_argument_address, + address commitment_contract_address + ) public{ + types.transcript_data memory tr_state; + transcript.init_transcript(tr_state, hex""); + transcript.update_transcript_b32(tr_state, vk1); + transcript.update_transcript_b32(tr_state, vk2); + +// _permutation_argument_address = permutation_argument_address; + _lookup_argument_address = lookup_argument_address; + _gate_argument_address = gate_argument_address; + _commitment_contract_address = commitment_contract_address; + +// ICommitmentScheme commitment_scheme = ICommitmentScheme(commitment_contract_address); +// tr_state.current_challenge = commitment_scheme.initialize(tr_state.current_challenge); + tr_state.current_challenge = modular_commitment_scheme_circuit6.initialize(tr_state.current_challenge); + transcript_state = tr_state.current_challenge; + } + + struct verifier_state{ + uint256 xi; + uint256 Z_at_xi; + uint256 l0; + uint256[f_parts] F; + uint256 gas; + bool b; + } + + // Public input columns + function public_input_direct(bytes calldata blob, uint256[] calldata public_input, verifier_state memory state) internal view + returns (bool check){ + check = true; + + uint256 result = 0; + uint256 Omega = 1; + + for(uint256 i = 0; i < public_input.length;){ + if( public_input[i] != 0){ + uint256 L = mulmod( + Omega, + field.inverse_static( + addmod(state.xi, modulus - Omega, modulus), + modulus + ), + modulus + ); + + result = addmod( + result, + mulmod( + public_input[i], L, modulus + ), + modulus + ); + } + Omega = mulmod(Omega, omega, modulus); + unchecked{i++;} + } + result = mulmod( + result, addmod(field.pow_small(state.xi, rows_amount, modulus), modulus - 1, modulus), modulus + ); + result = mulmod(result, field.inverse_static(rows_amount, modulus), modulus); + + // Input is proof_map.eval_proof_combined_value_offset + if( result != basic_marshalling.get_uint256_be( + blob, 512 + )) check = false; + } + + function verify( + bytes calldata blob, + uint256[] calldata public_input + ) public view returns (bool result) { + verifier_state memory state; + state.b = true; + state.gas = gasleft(); + state.xi = basic_marshalling.get_uint256_be(blob, 0xa1); + state.Z_at_xi = addmod(field.pow_small(state.xi, rows_amount, modulus), modulus-1, modulus); + state.l0 = mulmod( + state.Z_at_xi, + field.inverse_static(mulmod(addmod(state.xi, modulus - 1, modulus), rows_amount, modulus), modulus), + modulus + ); + + //0. Direct public input check + if(public_input.length > 0) { + if (!public_input_direct(blob[905:905+736], public_input, state)) { + console.log("Wrong public input!"); + state.b = false; + } + } + + //1. Init transcript + types.transcript_data memory tr_state; + tr_state.current_challenge = transcript_state; + + { + //2. Push variable_values commitment to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x9); + + //3. Permutation argument + uint256[3] memory permutation_argument = modular_permutation_argument_circuit6.verify( + blob[0xc9:905+736], + transcript.get_field_challenge(tr_state, modulus), + transcript.get_field_challenge(tr_state, modulus), + state.l0 + ); + state.F[0] = permutation_argument[0]; + state.F[1] = permutation_argument[1]; + state.F[2] = permutation_argument[2]; + } + + //4. Lookup library call + + { + uint256 lookup_offset = table_offset + quotient_offset + uint256(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf])) * 0x20; + uint256[4] memory lookup_argument; + uint256 lookup_commitment = basic_marshalling.get_uint256_be(blob, 0x81); + ILookupArgument lookup_contract = ILookupArgument(_lookup_argument_address); + (lookup_argument, tr_state.current_challenge) = lookup_contract.verify( + blob[special_selectors_offset: table_offset + quotient_offset], + blob[lookup_offset:lookup_offset + sorted_columns * 0x60], + lookup_commitment, + state.l0, + tr_state.current_challenge + ); + state.F[3] = lookup_argument[0]; + state.F[4] = lookup_argument[1]; + state.F[5] = lookup_argument[2]; + state.F[6] = lookup_argument[3]; + } + + + //5. Push permutation batch to transcript + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x31); + + { + //6. Gate argument + IGateArgument modular_gate_argument = IGateArgument(_gate_argument_address); + state.F[7] = modular_gate_argument.verify(blob[table_offset:table_end_offset], transcript.get_field_challenge(tr_state, modulus)); + state.F[7] = mulmod( + state.F[7], + addmod( + 1, + modulus - addmod( + basic_marshalling.get_uint256_be(blob, special_selectors_offset), + basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), + modulus + ), + modulus + ), + modulus + ); + } + + // No public input gate + + uint256 F_consolidated; + { + //7. Push quotient to transcript + for( uint8 i = 0; i < f_parts;){ + F_consolidated = addmod(F_consolidated, mulmod(state.F[i],transcript.get_field_challenge(tr_state, modulus), modulus), modulus); + unchecked{i++;} + } + uint256 points_num = basic_marshalling.get_length(blob, 0xa1 + 0x20); + transcript.update_transcript_b32_by_offset_calldata(tr_state, blob, 0x59); + } + + //8. Commitment scheme verify_eval + { +// ICommitmentScheme commitment_scheme = ICommitmentScheme(_commitment_contract_address); + uint256[5] memory commitments; + commitments[0] = uint256(vk2); + for(uint16 i = 1; i < 5;){ + commitments[i] = basic_marshalling.get_uint256_be(blob, 0x9 + (i-1)*(0x28)); + unchecked{i++;} + } + if(!modular_commitment_scheme_circuit6.verify_eval( + blob[z_offset - 0x8:], commitments, state.xi, tr_state.current_challenge + )) { + console.log("Error from commitment scheme!"); + state.b = false; + } + } + + //9. Final check + { + uint256 T_consolidated; + uint256 factor = 1; + for(uint64 i = 0; i < uint64(uint8(blob[z_offset + basic_marshalling.get_length(blob, z_offset - 0x8) *0x20 + 0xf]));){ + T_consolidated = addmod( + T_consolidated, + mulmod(basic_marshalling.get_uint256_be(blob, table_offset + quotient_offset + i *0x20), factor, modulus), + modulus + ); + factor = mulmod(factor, state.Z_at_xi + 1, modulus); + unchecked{i++;} + } + if( F_consolidated != mulmod(T_consolidated, state.Z_at_xi, modulus) ) { + console.log("Error. Table does't satisfy constraint system"); + state.b = false; + } + if(state.b) console.log("SUCCESS!"); else console.log("FAILURE!"); + } + + console.log("Gas for verification:", state.gas-gasleft()); + result = state.b; + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit6/params.json b/contracts/zkllvm/circuit6/params.json new file mode 100644 index 0000000..bc75e19 --- /dev/null +++ b/contracts/zkllvm/circuit6/params.json @@ -0,0 +1,63 @@ +{ + "test_name": "circuit6", + "modulus": "28948022309329048855892746252171976963363056481941560715954676764349967630337", + "rows_amount": "8", + "usable_rows_amount": "6", + "omega": "199455130043951077247265858823823987229570523056509026484192158816218200659", + "verification_key": "fea6e42db0467c50e77d424afd0d4a1ab72abd18869974ea22808fb0a672d668 f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7", + "ar_params": [ + "2", + "0", + "3", + "2" + ], + "columns_rotations_node": [ + [ + "-1", + "0" + ], + [ + "0" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0", + "1" + ], + [ + "0" + ], + [ + "0" + ] + ], + "commitment_params_node": { + "type": "LPC", + "r": "2", + "m": "2", + "lambda": "40", + "max_degree": "7", + "step_list": [ + "1", + "1" + ], + "D_omegas": [ + "7356716530956153652314774863381845254278968224778478050456563329565810467774", + "17166126583027276163107155648953851600645935739886150467584901586847365754678" + ], + "grinding_params": { + "mask": "4294901760" + } + } +} diff --git a/contracts/zkllvm/circuit6/permutation_argument.sol b/contracts/zkllvm/circuit6/permutation_argument.sol new file mode 100644 index 0000000..7294835 --- /dev/null +++ b/contracts/zkllvm/circuit6/permutation_argument.sol @@ -0,0 +1,93 @@ + +// SPDX-License-Identifier: Apache-2.0. +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Generated by ZKLLVM-transpiler +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//---------------------------------------------------------------------------// +pragma solidity >=0.8.4; + +import "../../cryptography/transcript.sol"; +// Move away unused structures from types.sol +import "../../types.sol"; +import "../../basic_marshalling.sol"; +import "hardhat/console.sol"; + +library modular_permutation_argument_circuit6{ + uint256 constant modulus = 28948022309329048855892746252171976963363056481941560715954676764349967630337; + uint256 constant permutation_size = 4; + uint256 constant special_selectors_offset = 4 * 0x80; + uint256 constant table_values_offset = 4 * 0x80 + 0xc0; + bytes constant zero_indices = hex"022002400000006000c00120018001c0"; + + function uint16_from_two_bytes(bytes1 b1, bytes1 b2) internal pure returns( uint256 result){ + unchecked{ + result = uint8(b1); + result = result << 8; + result += uint8(b2); + } + } + + // Append commitments + function verify( + bytes calldata blob, + uint256 beta, + uint256 gamma, + uint256 l0 + ) internal view returns (uint256[3] memory F){ + uint256 V_P_value = basic_marshalling.get_uint256_be(blob, table_values_offset + 608); + uint256 h = 1; + uint256 g = 1; + + for(uint256 i = 0; i < permutation_size;){ + uint256 tmp = addmod( + gamma, + basic_marshalling.get_uint256_be( + blob, table_values_offset + uint16_from_two_bytes(zero_indices[i<<1], zero_indices[(i<<1)+1]) + ), + modulus + ); + + g = mulmod(g, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, (i *0x40 )), modulus), + tmp, + modulus + ), modulus); + h = mulmod(h, addmod( + mulmod(beta, basic_marshalling.get_uint256_be(blob, permutation_size * 0x40 + (i *0x40 )), modulus), + tmp, + modulus + ), + modulus + ); + unchecked{i++;} + } + + F[0] = mulmod(l0, addmod(1, modulus - V_P_value, modulus), modulus); + F[1] = mulmod( + addmod(addmod(1, modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset), modulus), modulus - basic_marshalling.get_uint256_be(blob, special_selectors_offset + 0x60), modulus), + addmod( + mulmod(basic_marshalling.get_uint256_be(blob, table_values_offset + 608 + 0x20), h, modulus), + modulus - mulmod(V_P_value, g, modulus), + modulus + ), + modulus + ); + F[2] = mulmod( + mulmod(basic_marshalling.get_uint256_be(blob, permutation_size * 0x80), V_P_value, modulus), + addmod(V_P_value, modulus-1, modulus), + modulus + ); + } +} + \ No newline at end of file diff --git a/contracts/zkllvm/circuit6/proof.bin b/contracts/zkllvm/circuit6/proof.bin new file mode 100644 index 0000000..dab61d5 --- /dev/null +++ b/contracts/zkllvm/circuit6/proof.bin @@ -0,0 +1 @@ +0x040000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec3b8a6660e79ffa5bc1b3aeda35a0aeab6e7b408c29c83550df3bb166597efe6800000000000000533b8a6660e79ffa5bc1b3aeda35a0aeab6e7b408c29c83550df3bb166597efe680d48b9f9a1f52577da4d5cb94d65e04052d79db412bde4a0173fa42abd6d4a4529b3ffe4861fe3cac8826a430c2369589f4ddeccabb52625f775b34bbf7af804026ba1e029c9bb574382cf9e82fd61417bef7b8854687e04db1103e8b32273581083ff769e9f72f5ea8c134f3cb10ebab5b18f0b3ea2d36b09c4edb3bd66d8110c1a2960d0f0a8b4518e0e188ef2e6476bad69a9a60a76184755138b7fac40b81293fd51191d3ecd94bc608c2f7549a56a31323c2fe127fb97ab7395b30238543c82cee414b34b8597c6467acabe7f651a6310503e344e7964a961b97e5d43983b8a6660e79ffa5bc1b3aeda35a0aeab6e7b408c29c83550df3bb166597efe680d48b9f9a1f52577da4d5cb94d65e04052d79db412bde4a0173fa42abd6d4a4529b3ffe4861fe3cac8826a430c2369589f4ddeccabb52625f775b34bbf7af804026ba1e029c9bb574382cf9e82fd61417bef7b8854687e04db1103e8b32273581083ff769e9f72f5ea8c134f3cb10ebab5b18f0b3ea2d36b09c4edb3bd66d8110c1a2960d0f0a8b4518e0e188ef2e6476bad69a9a60a76184755138b7fac40b81293fd51191d3ecd94bc608c2f7549a56a31323c2fe127fb97ab7395b30238543c82cee414b34b8597c6467acabe7f651a6310503e344e7964a961b97e5d43981fcae388c10f0310e6552f841d230c8abbc5e3952fd6e048dbcb86da2bf4dac63e4a437fef1a8cbcc09bf7ef5cd0de7413278462f4a280672fe7fc60fbb24d1f38fb1266f415fbd2618cfb2426d85025c3e9ac6c13d4ce1cb5709b216b4da6b23ad5f1e1878da42a2ccdff2145677506b43c7f3953fd0fb5837646c7449552fa1fcae388c10f0310e6552f841d230c8abbc5e3952fd6e048dbcb86da2bf4dac61af710639a33a9ee25a99551d3fd807e70499333913a0f7ce486c5d6cd45a1b60e3b793fd5a68f9a482cf67859f3839a0135ebf429b91712d8b08c7fa3a7567c25783486835278b791d4f86fac81f6b5f44bd4014429fd274ea0d8ff2b30eabb378ae8b217281e98232cf4c6dc2b21498547a11fd3025f8ab5fc7ade97636da70b9c4039ea8b3beac33234743333ca87f5134f53de0e5205308912bb2f311cc028e0b7f36cbe74e06f193787efb9169bffc97bda59757876b0ee320f0e0284712fb0a4b594cb133a84d3b178be4595d031abfaaf17d83f3aa7f7c86c6477497e39b510be988b37278da62e5c6fcd77080526baae86e6536138ce73158217757114fad50563699062130a310707b77fc1bc087e3b682af35da42912bbed2a3db539f429a1fa53e4b8ea5cf81151d917a9c6df281fe390dd60fc915b3d85c942d23f79c1653760ef434bcdd9325ea674961fd9467593c46b4c11254bc5b581f4752714e715c848cc082c40d96b40a49ffae3a9e3c2a3707aed3c5dc8c493c3852524d458cd7f86fdba1387bf56c6d2174e370b3a80acf28f008c4d6010f5d0c592255f2a95b76358c4ecdcd15a9d757e6ed48acf298ec60238d31894388f75d2432c0ddd3571b65a3f78c96f8a052a2f5c1059f2586d8b149d986300e1c76cb79b3f79c1653760ef434bcdd9325ea674961fd9467593c46b4c11254bc5b581f47524d458cd7f86fdba1387bf56c6d2174e370b3a80acf28f008c4d6010f5d0c59235d6c0e2bc4bf9b3478b00e830212313714dbb35ed434ef0f81e1f97afa9dde0207754c58fa029b19d60823cb9b80600c65426bb7cd0f76bd4bb35a6ab228f6d093cfc0545994d8462194e84f773fb5e55e6f18257f6b4c0b7759840e0eae616000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011386e11508028bd92fcb743e3ceb317fe6f5df7f6f1d300aa7f809d449ea0c022e4dfe7d12164b6239e7c9eb2ebdca4cbcc6d444a2201b7c000b2ef4486f2e9301eb82bec9b8486ae3708fadc07941183b8fb79edf197285a2a872fdb26e9f49308d1e68759d249863813a3c914ced6451c4e9e114040b78d30b1753caf4562e1381845cd9d1929d28af991511cd6b73c337557dec89e983ec4ca6a61326d025104662ae04621992f1644ff6e07dbabf4fc02d8fb207b7d7a581b064f8a49618211033eb9c643f5aa17d6d6ca1bb6b7eafbc604d1357cc738f677838f84f699b2e5a3d96333ebff3ee0af36678a36a49a49b81dac445b83cfd9afafa3d1b765122742dea9cfabcd5006f3d3344fd28adb33119837314942138ce20930c14a3ef02642d30fb1a2590d0ff02320494e00adf51ccb1ed181c5985a32605c23c8e4c04060aa38c19f2e05ca7a9739317f6b800cb62fb5239e178153a818b4c56d2500eb257f27891f0ca13714e85da863122c32f475ac530ccaeeb609063d779997c2c540d28920a418db3a6fe15b4809af09d78b633ac8080e545dba5e0213495740ad6d6dd1167d144780a998114791307ca8d6b1ca4394812e2626e2bb0fa267539e43bc6c21a50a9f8a3fdaa801b11c295065e29310dd12d9dca0d29ba0c3ec4378ce952f611196c6e223a96364b0e815988e7195d6a1fe4739343f43891a05d0523a72265b1e1ba213d0539480b67cc811195501ca6efe7e67107a0dc596f6f3ef15adc4bf1cca3a0d046d0335a292ffaa53f387c1c6cf3021946253a125e8c1b6584e14daa5c859bda222ad588895a241f0e837a115d6a8dfbbeabf029804a08cb88878c651b92667a32bbcd6e579972825ff0330f1cd625bb36b5bda0a940253c4909ed3dfaa23ea5f69763398832bb1b29e242fdb37e42ae03817d76f26831d06a215bd7d99e225fb0e631e3cccef4daf6126e6438169ad736971bd733e60c2e5bfc1a4f690282180993a161dc042d6bc330b9d726aaef5476d772153a2b3316f51d7f572789ff802a0ab7ea5a94820235a8e4a479befdd609b0e39b911716bf4f3d0177c64e2a1e5806404df80697708d5955c4506b023c764d8566128b118bd25cd4a88e33805f8b08bafb39a45de3d3b9ef1fe0d8dda473a3381a952b33d23ac99eb5e027d7f8b3ac77261c44217a8df7cf370485223a1991d22dbe7e2f92c088ce97cfc0af663c5a49a20aa3a911020ac06609cf037b26026da6f43d3c85b46332cda28f4c9a1d257ce7b66c404ff57c3ad427693e3320e5a08da3ab3184098bcd5e02c70ae14e1ef4961d49b2d955779a7f67196a834e0b98c93ec41ee89881b9bca881ba7c672deb97409af7d2c942480213e6c407fdf32966b4c806b2624e45eeb55e757026af6b0de308efd88a2a8f5b95d6f536fbbb89c036f41463da7e94e3f3c10299bd1c2b60d8c9d5530eed1292a4fc5d472eabf191dc92224c25c11f608b7574a554eb06636054d8ba984845e7f1f2393da13aa3db4c4518525e3d2ff319d7ec1e5de34a5e5abd048b28a36d173bfbaba0dafab00a56882e3ce1069ab30c677937f40ec2cc289905bec7b29d0141ee6c0d8449c71561200951110389a4d974683608aadbaac0b5cd9ef1e88b6ed648ac7bf530321e2feb178f6389ae42eddc7b9a4073bbd19cd0d1903da304e2079bef3e4e68fedc349e3a2d32c27d6c01b6f7bb149b2e591fa1958325ac84fcfb89d2fd23544096d77903d705e49c48196ba36aa0458c744e62e738feecc9abb9734a89bb3278e4aaa8000000000000000a00100102020203110407000000000000002c0202020202020202030303030303020202010202010101010101010101010101010101010103030303030303000000000000000200000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000201010000000000000dc00a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff770a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff77291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa126c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b352254da5cad22b2bb31a255d43899f5be174c33d783688ffa31918b2d0e604e3319a2a83a6dd65b246c9f7d539b67b09c3b0afe9bcc31f641e4746e726732ac054d2413280ec17c6620f5d9331f6279010efdd8b39bd72e8d5068ef8a9e85020e21a3242b6971d3fe4ccb9ef696b9135da7bcf4fca2d262a5eaa074516d97dc040243d4624103ea078037d2db2be41cd84ba35cf91ab2d2197a06bed39137111249a9fbefe0ae6d10083758728c436f632e70c3dee37c0fa87bf17cbf10fe1d09b2b29c8babd2a0b67e37f0c6846a560b6c78a30f0ca75ad56ceaedaf1344f12393439f711e2b08f75b68f05cb3b276815f865555ed2e10a9d53c730721c2362624398d0ba3a6e2b9dfd9febb35b3873f9ce34b46adf497ab23701e0e96f06a0da19af7f417d8eb69f248beb2644edf3b290f5bc8b5ed5b52594d3115ed7ada21cb3739171b79e6d1926a281a86449c7ace69200e0765a4f796d0fe079a1014262571d9c779e3853b1a218e4203c4bd360ea7a715413a46d34827875fea93fc2624398d0ba3a6e2b9dfd9febb35b3873f9ce34b46adf497ab23701e0e96f06a0da19af7f417d8eb69f248beb2644edf3b290f5bc8b5ed5b52594d3115ed7ada27177fb2c298c3e589cfb206d276b9d07679c8d79643496a368a65eef2d2fb491bf90a1889423f7d0d781be9bda36aaff0d5258b1656ea0fe114fc9590d8da451ad4c5a96eb27d29759dd9ea539f7bde9c2c9e9e0317560410399d89568fb04f3baa8b5930a0b9898617b57e6630c42e29d90a9259c187073aa0ce5f0928421d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001215ebba77b4db36265d82f216ebe040b8e43301151f85e4da04175b72540d2b4093344aa5551c9d5f5e550ed013a08dfbd10410b94fdc010412822d567e884b92bd42515e3b696dd829d945b17c664461221a67dbbecc87c05d9d07f5f0a71853dbed5249e75063b30ad99d106d9530cc22653c567b0f4e01557b039211155c617da6479265927e185d2d73d372bff4f2e873a95359b8b6a0f37ad0179950c34200d21315a898ee21cc4662f5ffc477ab2baaa06ae28764c04764f2aa609fd1418a741d5987f7763923aa3a9e4d825a3c611007d2d1a3fe1c6dc3b4f6301313525cef83c7d3327068ecd76d87c5c57d360343b129e81ea96cca82a2e75b4d5f205a6e70ca2ab65100f014f978e9796945da1c77551e3f0a9dd6e3fe21abf9143108255465a529a572ae1b1b54394dad36846488042a56ec14c6fe952d18df069355b2b6332619f6e17c56f48b51e1ec19c549258d3efbf5371381317cb587cbf2f1b50bd9b18486bc4d1ad07b8f37ba24a5eb2749bdab1f57267741639252447170f6423726cf447b56acc165c82efb98dc57b8417f3660477fde88802ece7581c120860c5b2f4dd377e5bb6c685c77ab528d9a3c8445a577b48155d621c6c512d00fa2f4cfdd0530e324ccc8d77190144133bfb458fee8ce0e5815f1958afaf3aabc6d365494c3fe7a8b4b601d7609bc1d7197ad8ea2883b415324b5011208f08b38855ec1ef24871d5e05e65b5151207792f3d2d606d35a27411cafe2a00f016f8dd3503b8f3a886f6381060bcbc3f08922007b5bcdfbde3a85380fa7a39b71ea68aa63202dabb517b741ead5ebc7419f2f5f139d5498aa4d31ce2c27363260306246aae23311b3d68ec6e942727bd2eecdd2f46c917a2f188697e15467b1819ddae318bf4dcd55b17f3fa4e4d99ece632e45bff54b54e313e4ec274c10c0c2b92d8f8fb08ed61065655fc37c98dbf66bc23cfd92a39d6452ec97465132f562ec078961936ee31a1f5c4f08b6f7808883adc2b1dc794be6eef4b647de38e580f3cec39d5447ba79dcd3f56481d4476689f13e26a03dfa79e41551822693b4131fc43cb87d7eedffac21f8ce47604d5b52b6f28a05bc408c76d759890a0228920cd61561e622fbf4729eef4a6b6262af44089635c720e09d25fb6260a60a0271a7a8e3eefe81bd012c1fcba3907be1af3eb3798a5351c2f22196f01520756063505db2eaca7cb6c118a0773a439208666a25ebc401aed8634853835bca17ccf179d60261259eae4300e1035a637144d282b386114aa91cd89a1ea421aa9b0be3f791c9a36cd2080991066a02005ce3bd9e9f0adc2ed35646d789f172e81892225ca0650c0869e913ee053a594ba70e27f14edfacd1fe986f6450333a380f3033edb9eb85b150517c9774aecaecafb4257e4501c81c4a7bbabde2660e5ea3ae807121e6171151738ff202a2644f5fd60e1b6ea1710bb69bebe72a1d228cf17891d575cd005ed347d37490087b7337d03814da192397db0618d95092f4370928d061f655fbbc7963ae95add872fba10115aee62ad7162c4d708207857af60d7733cfcc337e7958d062f5ed29dcec2feb3009681f2ca026a5512013888cfa97bad17616564587c5586670c03e25e4876314d5e8d82710537d261878f98e7f2037f27c25397202a42f211f61cc3b7a43ba4c8900e38ff31a3ff7fd68b05b1bc0b093a96b2855133dbb7ad638dd547d4c769b5dbc814147f8977e09f3caa55b3d95f2a8885194bdcf7f5d6079d10bea0d29a9635ed4cd029d8434a775c821a4e16da05a21c604c153979d4d5b4169bc22e5da3e920853c172c36774e5abe1b2aad2007b1dc16bc129755a8ea24021754ec94a5fabca5cdf72b34a66ced589fe4fdc117c3f1468f9773097839a306a1e1e8dd6d6e0213cdcb86851a96088ba8cb7a840281fa11cec3160470754e0f11984bab0e0a38283e1e63ea8fac5f63707f543e3cf2c34064b11fabd018c452a280ab136da447d4adae8629dd21611d8f56f6953a49d1d59f338127fda5bf82217f116db50d0be89b62d5dc5b85e022cfa092d810f4df5397033e67469c4a07ac1a5e2e7c2d269c004fe4688e0de28dc37503b11321004ffa7604461606ad6cae91468b08bd4a3bb88dd90406214dd855fe13a63292e1f572c5d814410be7311ecf189116e8baa3a73167b838da308efb62ad05281314f0ad7c196b92dc983413b825753eba9d072f5e8ee73470b2612ba69b3c0a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff770a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa135eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5603256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c85250da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b6044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b2a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a1584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff77291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa126c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b352254da5cad22b2bb31a255d43899f5be174c33d783688ffa31918b2d0e604e3319a2a83a6dd65b246c9f7d539b67b09c3b0afe9bcc31f641e4746e726732ac054d2413280ec17c6620f5d9331f6279010efdd8b39bd72e8d5068ef8a9e85020e21a3242b6971d3fe4ccb9ef696b9135da7bcf4fca2d262a5eaa074516d97dc040243d4624103ea078037d2db2be41cd84ba35cf91ab2d2197a06bed39137111249a9fbefe0ae6d10083758728c436f632e70c3dee37c0fa87bf17cbf10fe1d09b2b29c8babd2a0b67e37f0c6846a560b6c78a30f0ca75ad56ceaedaf1344f12393439f711e2b08f75b68f05cb3b276815f865555ed2e10a9d53c730721c2362624398d0ba3a6e2b9dfd9febb35b3873f9ce34b46adf497ab23701e0e96f06a0da19af7f417d8eb69f248beb2644edf3b290f5bc8b5ed5b52594d3115ed7ada21cb3739171b79e6d1926a281a86449c7ace69200e0765a4f796d0fe079a1014262571d9c779e3853b1a218e4203c4bd360ea7a715413a46d34827875fea93fc2624398d0ba3a6e2b9dfd9febb35b3873f9ce34b46adf497ab23701e0e96f06a0da19af7f417d8eb69f248beb2644edf3b290f5bc8b5ed5b52594d3115ed7ada27177fb2c298c3e589cfb206d276b9d07679c8d79643496a368a65eef2d2fb491bf90a1889423f7d0d781be9bda36aaff0d5258b1656ea0fe114fc9590d8da451ad4c5a96eb27d29759dd9ea539f7bde9c2c9e9e0317560410399d89568fb04f3baa8b5930a0b9898617b57e6630c42e29d90a9259c187073aa0ce5f0928421d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001215ebba77b4db36265d82f216ebe040b8e43301151f85e4da04175b72540d2b4093344aa5551c9d5f5e550ed013a08dfbd10410b94fdc010412822d567e884b92bd42515e3b696dd829d945b17c664461221a67dbbecc87c05d9d07f5f0a71853dbed5249e75063b30ad99d106d9530cc22653c567b0f4e01557b039211155c617da6479265927e185d2d73d372bff4f2e873a95359b8b6a0f37ad0179950c34200d21315a898ee21cc4662f5ffc477ab2baaa06ae28764c04764f2aa609fd1418a741d5987f7763923aa3a9e4d825a3c611007d2d1a3fe1c6dc3b4f6301313525cef83c7d3327068ecd76d87c5c57d360343b129e81ea96cca82a2e75b4d5f205a6e70ca2ab65100f014f978e9796945da1c77551e3f0a9dd6e3fe21abf9143108255465a529a572ae1b1b54394dad36846488042a56ec14c6fe952d18df069355b2b6332619f6e17c56f48b51e1ec19c549258d3efbf5371381317cb587cbf2f1b50bd9b18486bc4d1ad07b8f37ba24a5eb2749bdab1f57267741639252447170f6423726cf447b56acc165c82efb98dc57b8417f3660477fde88802ece7581c120860c5b2f4dd377e5bb6c685c77ab528d9a3c8445a577b48155d621c6c512d00fa2f4cfdd0530e324ccc8d77190144133bfb458fee8ce0e5815f1958afaf3aabc6d365494c3fe7a8b4b601d7609bc1d7197ad8ea2883b415324b5011208f08b38855ec1ef24871d5e05e65b5151207792f3d2d606d35a27411cafe2a00f016f8dd3503b8f3a886f6381060bcbc3f08922007b5bcdfbde3a85380fa7a39b71ea68aa63202dabb517b741ead5ebc7419f2f5f139d5498aa4d31ce2c27363260306246aae23311b3d68ec6e942727bd2eecdd2f46c917a2f188697e15467b1819ddae318bf4dcd55b17f3fa4e4d99ece632e45bff54b54e313e4ec274c10c0c2b92d8f8fb08ed61065655fc37c98dbf66bc23cfd92a39d6452ec97465132f562ec078961936ee31a1f5c4f08b6f7808883adc2b1dc794be6eef4b647de38e580f3cec39d5447ba79dcd3f56481d4476689f13e26a03dfa79e41551822693b4131fc43cb87d7eedffac21f8ce47604d5b52b6f28a05bc408c76d759890a0228920cd61561e622fbf4729eef4a6b6262af44089635c720e09d25fb6260a60a0271a7a8e3eefe81bd012c1fcba3907be1af3eb3798a5351c2f22196f01520756063505db2eaca7cb6c118a0773a439208666a25ebc401aed8634853835bca17ccf179d60261259eae4300e1035a637144d282b386114aa91cd89a1ea421aa9b0be3f791c9a36cd2080991066a02005ce3bd9e9f0adc2ed35646d789f172e81892225ca0650c0869e913ee053a594ba70e27f14edfacd1fe986f6450333a380f3033edb9eb85b150517c9774aecaecafb4257e4501c81c4a7bbabde2660e5ea3ae807121e6171151738ff202a2644f5fd60e1b6ea1710bb69bebe72a1d228cf17891d575cd005ed347d37490087b7337d03814da192397db0618d95092f4370928d061f655fbbc7963ae95add872fba10115aee62ad7162c4d708207857af60d7733cfcc337e7958d062f5ed29dcec2feb3009681f2ca026a5512013888cfa97bad17616564587c5586670c03e25e4876314d5e8d82710537d261878f98e7f2037f27c25397202a42f211f61cc3b7a43ba4c8900e38ff31a3ff7fd68b05b1bc0b093a96b2855133dbb7ad638dd547d4c769b5dbc814147f8977e09f3caa55b3d95f2a8885194bdcf7f5d6079d10bea0d29a9635ed4cd029d8434a775c821a4e16da05a21c604c153979d4d5b4169bc22e5da3e920853c172c36774e5abe1b2aad2007b1dc16bc129755a8ea24021754ec94a5fabca5cdf72b34a66ced589fe4fdc117c3f1468f9773097839a306a1e1e8dd6d6e0213cdcb86851a96088ba8cb7a840281fa11cec3160470754e0f11984bab0e0a38283e1e63ea8fac5f63707f543e3cf2c34064b11fabd018c452a280ab136da447d4adae8629dd21611d8f56f6953a49d1d59f338127fda5bf82217f116db50d0be89b62d5dc5b85e022cfa092d810f4df5397033e67469c4a07ac1a5e2e7c2d269c004fe4688e0de28dc37503b11321004ffa7604461606ad6cae91468b08bd4a3bb88dd90406214dd855fe13a63292e1f572c5d814410be7311ecf189116e8baa3a73167b838da308efb62ad05281314f0ad7c196b92dc983413b825753eba9d072f5e8ee73470b2612ba69b3c199708d32e6449e450523f4e624c14d8be8baccc0b83f0e5bd5d9dfff78b4ffc2668f72cd19bb61bafadc0b19db3eb2763baec2ffdc90835dbcf92ed0874b0053ff32c1fe7f57175919b3c87eb7c683b9673c7003046bb6119a6e512d5b88feb000cd3e0180a8e8a6e64c378148397c48bd2d1fbd9063dba7f864bda2a4770163fbfdc9f87cb374bd8082ea7996e092967287f10cc2dc4771b8db5aa2c9acf93004023607834c8b427f7d1586691f6d6bb1e19eb3d1f34a47d9f7b42d365306e3ebf4f1da6f8147b3828e945ff262dce7ab01763d7b0f1e5250fc89edf060ddb0140b0e25907eb84c7d716ba00d9d231a7968198319c0736741d684e20f9f226199708d32e6449e450523f4e624c14d8be8baccc0b83f0e5bd5d9dfff78b4ffc2668f72cd19bb61bafadc0b19db3eb2763baec2ffdc90835dbcf92ed0874b0053ff32c1fe7f57175919b3c87eb7c683b9673c7003046bb6119a6e512d5b88feb000cd3e0180a8e8a6e64c378148397c48bd2d1fbd9063dba7f864bda2a4770163fbfdc9f87cb374bd8082ea7996e092967287f10cc2dc4771b8db5aa2c9acf93004023607834c8b427f7d1586691f6d6bb1e19eb3d1f34a47d9f7b42d365306e3ebf4f1da6f8147b3828e945ff262dce7ab01763d7b0f1e5250fc89edf060ddb0140b0e25907eb84c7d716ba00d9d231a7968198319c0736741d684e20f9f2260552acfb4136a8687c086867198f336159a70e0de3347500c25c57abf0d8fec13c5f354a6809f5d8fc0d754f10b0845dec5a231524772141e6eba5461ed414fa25edd8763b0e9f24ec8bee196162f82280e8709816f727bdb7fdac9abcdb63e01de7898ca0b76c5ccf8ea31d9866d81454a22428dfdbb89c3b361d9f92cb08572d20453530a536138a5e783467eae3615daf0175f4fbd68ec917cd7f4275be3927541176da83940bcddba5bf8fca313a0cf166a61adf78fb1346d8c784dd7d830acae72a2f689511f97308548c27da6e25827a2532409dc67754fc46b0e92e44227540383b7afdf410f271f0e0351c0831df6f510d3bd8407f2ed3eb70f5bc712d9984b2636e7d95d7648d19f09250ebbdbbed363f3f0389a1539eebd5e1d9b6011c70368251cafa3a9d1d43276700552c4966997ab9e345bb35caec036d63d53922206432f3dfcc7c9db66cd40c3169170a7debe25aba8d226ca0ae7c7d7cd0256d0959e0317b94da37c2704348955c8259f71fcfa70eeb3e4982c8959e72fd14bf7a8e83bab872976ba97f850dd47c47b71a560f215c5d1ed32ca6524b9d6125b94128f73e9dca3463e79356e8a38e0390eaba0e47185910389ef44e60e2b23922206432f3dfcc7c9db66cd40c3169170a7debe25aba8d226ca0ae7c7d7cd0256d0959e0317b94da37c2704348955c8259f71fcfa70eeb3e4982c8959e72fd09f67cd79f6c9ea55552cf333eabf41a64ebd2fb578364a8c11b8073f59370eb36d0d7bea811feabb88bcb8754ef126671f65ad6cfe084bd4307db1effeda6bd045f67fec76c6d85e7cdc28969f10237420cfca3bc3e07141c0a988ad89ad17910dc43438b3af9ea7e4af625215f18e4bae8675268673fa4921d0774e43981e9000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013d3de6486ea971e50e75884a9177159143d0cd294c08e36805cb1fa24ebfb94e3bf16a8543794442cb993557b7032a37963f85fe4384f8e3366c2f0bb2faa6a735e4af2a577d6f40a1f3d713adbfd3da76edf72f93ad1227f59cf7020e5f10a83fbbd36c32898729ebcb44b74874bba5c64e8a6f27daf1a97ddc56d91efd21f41594e65a3cd5945700c12dde5ac376ecde82270fe68374444f02a0511ce3629f2697b139bb344dc5e672c8d8f08c4ce75b7ff44d43d339f7c43a915c329089c22b6819b640bffb1cdcebab5f60a8ad2c5d6308d69da6c3e724df6ce1f4227852378834af039048762d4b0efe360368a170b576ca2a9934551e236b6e160ba56e177e9c4311e1a0d463957ed804b7fa61cf3f2faa91e8a43fe5ade8fd10e9399a3de47bc85a5237d403f9e3af00592cf78cf6cd62d0a4f6c5c7dc1087b2dcc60f199f4941e69d97e8ca4d120c7638e45ab58dac8c7a22db382f2eb6e9fe2a601b1dccdff2c9aa0020cb99701236e192b2475c4c90c4d5ca8f9465e0b261ec08573a8f77d5d8c9c456eb6710f2d55ab11e35e89506820c7b7974471fd70689069a27d792960c260c938dd0790075e1cce774ad0c0e1c4af6b2e8a7205b9dd065692824277b4ad60ff928394024f0f4d3efc182dca78ead45b8897938e7350efa282587502eaf5323b28ab2ab776a503c5845f10fb0572b01bba0a8ada4421d901b1ec1a81cb12ff6a37c161b3194175a3a6cf04a29af7e2bd74caacd8481c36533129b293648015cc76c01cab02dbba55629cc736a8f20aa1b91e5054f266d31970c44573cfa444774f81a9c028adfe9368364a9f7b0e93b920a2392ff6a0ac2511d7e2a444603bf318f740226b80761a9ca6a486e2c31c2fc309e1162d6d9f49a2550f00423bd6a1fee8eade0d897e165a13e3f5d9fa23a1db78d1c678aed58cd20ed395e194da53e7994c5d9e3ef8d6b6b7e7e23bbb105a21d769c9bbf8e5af7220e478e02a2bf8de1dc4bb2218f8f64b81c7236e106664182a612eee0c824783366e5d145199a821f568849eb9be15230efa8fa28dbf9b97ab1058c019ef10b28ba5ec667fd38647402432a7f73e02e446f81193ecad00a78da0453ee89a76028aad27892f15b4d25ae07daac1e2a7194eafc560be1a86789e7cf29a296ec1d1962909c34ccce87f1eaddcd023370a023c82c812d173d77a00270b61b5df8883f517e00f2942bb82fd457ece279df4686ca472f3e42afbed451e5e02628d51219c506b3aa6d1038ff3c9750b149865e5e59358faac5347acbb7cee1c18df93d24ed4f1d9cd3d3ab6997f67d244301b7cf895495ad826352cdbc47996697497b110a9498497230750931bd53008acc60a903bb540596f4fa36ee65f596146ae22c9068efb5ae069eafbe26584e355b7505c096a3424c0be84d8bf25a70f56b110bce18c4a2852667fd3e69f63c1373e3f450521b4b436c17f6b533efea835c5e3b43a780a0476d55cffa68bed9efcf6c0f7e421b0dc10865ce2995f058967c9b2b82595072eb5a00dbd494c6038b578224bde13de6f39188f7a4fe389b5748570e763d61bb5146d898a9b5734297dd15793fb6506ad680e3eacebe3f1133a3cc363248cc0b417f88cb687c9bf93f8a13c40e5898d5654df942ab50998a5f70f72b9c5e50bbcf4970120ae84d8fb6897e49592f63aeab663d400167813bde570d0dac2408b59f92f485bb6956e1c39a8599ba8020dd79b9c4ba6c43ee348428ef3a69173ba8ad9ebeab82a208e4260a6530e6e46f2e90cb93e50375a530b5ff561c13510367f56d0447f1e3992c01825febc301d6f3f88470a4b815511abcdbf3352d6e7759e4d2edbd058c166bf8e889af28c30b7c04090142d1f3ca25e58bc401e8fb73adb5e8b1430dfa710ee1418b3071a626764092ba403776cb55e9165f0a5e7e2bac28cc18b2dd40223e3bff546731078259051337869aeabd29f1796b1f1165690a6de088780a66f6fe3d045bbf581dacf7d54bb72caf7e289b2e8d5a01894dc5790e5d722b3089187c9471ad2fa83bd7201fcae54371be94e483ee282f826e9ac8f410e07e55ff410bb545a545e57eb482270a457e2277b55e81dcb23b37f1a8402e68ae077fa8480174a8f8e037ee53932b2c53dad9a3f5e7e28275059749ccbb38e8d4c892305b6a4782735923772cc8ea3148e3622bbc849ad7c02b165048e960d45e6cd292222436f3167f7b999f08e4d547ca58d5d9d61bbb831ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c692150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f398196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f61ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c692150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f398196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f6288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc73502405abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b32a541dc9aede8050ad6648812a33cfccec8163996bbfab69265fbcf2ef361c4e077596ab5d4f14c7435038a9742be3e6b737f77900011bd2975eecabf38cafdd1153c84f592e126fc3f1f0f20bbadd94f35f1eb7f65990d2549a7aba8284127f38fc1c0df7b9b2919072952602cbf7174ee45ebbee63633b443106eed2c1c2ec01270d2f56ecea3e1b2a75e90d93be05ba29bbd650f57dde8784b3a68dc781f7075dd1b117312a9d8a06c31011344d9a01dfa69bf89621b429bb8f33dbae0d86192e3ee660fd39226aee0bea6ad54ddb98f9abab4929986c135f5323816ea52108ea80bab1eb868323ca07cb55c73606bee844de917a21bfbfa6dc19489d7fda3cc3da9332bfc4c2de3e80fe3391c67d16d585354e9f5bb7a35c091c3573e31936138aba397e4b359850d5fb9c7b4480ac78da8f3e8a5266fa48e5c79b6275532d2178e1ae70947695e9f02849f81419f58ed31a9fe1a7cbf077ace14456939132de871e518f6b896a160fd7b607ebe63ddb125f6e11cddd754c1c823ba96c723cc3da9332bfc4c2de3e80fe3391c67d16d585354e9f5bb7a35c091c3573e31936138aba397e4b359850d5fb9c7b4480ac78da8f3e8a5266fa48e5c79b6275530c625bb64ab2b757e5284ac022d5876bd6a163865cca8c33d1906267b895b0c202e1a0ad09302e70affa09e470781c2aa53a461958dd93735097393e52bb0f591148c5f0078079278f0071002b6a0b381757985374deeda3f8434a2ca9b57c9a084b1ad09d4a31a25a8669bc766a6d0a8480f5c41c392cf52982a235b6e118eb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013d9ba56a20ebf966144e9b57a8eb956f338749c55b81838fe3c6802201fb6f84319158984f800818b8dc621c8b6de6de564390e0af79033ed30d33eac409a05617c38fbecad253a41da5e0b7b3224a0e914897fe0bc9e7206484766ef9597a0005c43187dd83b9ff4c5dc0e43a1194b52bb768b0d9aa89c5796f5a7ee99d0c6429d046df41a1d723923b344a4a33e191089ac7549fc9259c2f0e1cad0c0144070d1e7f2e0415b0b0911dd4655390bcddde29a06493bd2fb6469895c6eace7094108d2c3c7416e9333963126d143e609bdac300b17b1f12cf538520ba8c89f2ba3bc607a23e56cfc0fc6ef3d645576e54616d56f8a6e7c2a8a0398afc0847f9d616068f3cbca5c44bf0fd38bc6b658c6024ec821bc803bfe980b5bac296956152340bad9806b42d9054d88184b02dea8d92260c8f6dd23deb76bd0eaf3cc3db6a1489077f79d9a39e61e3c852835137caaf01d68fdf2224c669e41d2153bc8fa83b6046b76399e360c7b370cb5b82da8e7d512977baf726151c187588ae1dbcae28d356df4b6ae98e81752984502997165cd2c4062bcdc259615a016c3a93345220d9d89cf8e9a7b1e093ac45f8443d653aa5f84996a1ccc178471a53b7182a862346199401f400fa598fc60bdd8fa464a6459191b1112f0f865d39d1dcbf450529eb3df50e2d9d1483c04b7073b2f0663c54b40786024508a7a4e3f0576f4ab334f332497af673c656398346b0b4b53f7c467e0d1de7fe145dba6f798e50f04911acb02e546ef6ae608ac6da5d124fe9dfcdf9ea17d63cde2f35db46e1422ce93c0d8428cb9f6adcac3a829c14f461ab04fb9401bbac5e1490a845cdda35d5cd0c982502ebc94445d22b726c61eaf8d6a57e991506dab5db04c7d060666c487335d347b2fe6a7af1aef8b9facd2531b0c68365e380504133bb03f5599580a7ad3a15b070a6fae36f514a1e57a78ec403f7c14fbdb1fd51c788ecbc65d7adc64f1063a867e20a9c9bc3f53506d2cc6867874cba4ee9bcddc16a05f3b1aab2eecd0e6a9a9aeb645a509e5e96639ffe121a8280c2107b72125adba0453601d4d2511414f57c0b834872381154d15ed479b91a24d78f742cf92339ec426f33960d2024970fb294195240b0e274c811f3e63529ac015a78c7f4ba59ecd8a6a2efd2af2a40465f19008b8918645b814279d1c88f1b179b09dccf7631d3c076fafd68a82cfc8cccb748b78afccf881a0879ed4368411ce3b8d60dc4f0ce7da72df3194011c6cc3b12b60d746ad0cd3fff60dca9d469eae207902a5207be011af4ee0fce34bae4db68539e20e4416218f9855bf2a9aa6fab403a0e371616b30eb7f7111f0187cc4b674c2c51718f2687906cd308866268a419f79c23436e57b98f41a2cf37cfc028a170389a4f418596f3b77189c89f93ce8bdebf1619b5616afae1c3bd132db7816998f30f4b766b0dc7608c4992222460d99b43f5b02119af9057319538f63df414640beec935f678c8e800bf2c7a01d31e82e9193f0794d8c8064ceb3073c5ac8b33937f30a990fb3dc3119c62a373d7415eda72fb00400a8c3006b53488be8c296b67d30c025026adfbf58f553fec767d500edc3324a88e13288114216ee5170bcb78e2f86a3b4a0fa17a44e369fa1df9c43cdc0153e6d0bb02ce4017855decc6858f4763210a0161158aca7b7ee605ea1024f8d18d40b261e3c18133e1618f64beb5a16cb0db50d737ce2bac26238ca4bbbaddda3902759bfd6c8b1b96f4391a0d6ea97cc2d9a112c143984901e6f34082bbc06b1af3a312027952340e57b36eed5f486af653e8410590ae107d3b7668737e8039e448a53b5b79e10095f991ded6909625a967c5455b335108ec1097dcebcdb5d209aeeb4c8192eb3f29310ab81f56a0f65855ba9f17a1b41b22c0976e343921ece09b9e8aed3e402d8728138571c687e8d0c5fe7abf8a63d04e6f0cdfdbee4e4cba628f505e4b5d102b8c8f5fcb744b41e0ab029f96813b0251f5cff4db33fb86bacf704d42875c0ce8f89d097f3bdbcdeb80364cba43b4b771f07a3b83bba6c6be688fb1c5b55f16a1df07e5433bd567f382202d8fda03127403a4dedfcb9f42dfa2bdee9118e8058025a18a0ff3721199aa85c26ca5116243584a34e62f173e86d46bd3e0ef0429e2292e975bac6f85e17094ea27ee591f99d85e431b24e0ad5f84bf90fe1f7b058ca254ff9c5b0bdff70b8eea25a96d40d3f082bc8013ea1595777187c12abc3fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be9004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b890189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac478384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d04926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb83fb14129968f3e95de69c3dee18686c8bd29d8e55de8afaebb1c8c41fe110be9004ebed66970c16a21963c211e797937651cc016ab64496cde10a4ab01eef4183e7645cff0cc38ed5810d35a67a0a1eb28b6d88ab05789fb42d9f995f6553b890189ba300f33c712a7ef2ca5985f5e14f98fc07158f56f205653375709aac478384f5d0fb3fd1ca2b85420c4062329974277d6c54c81cd79e98d1c39cfaa29a907b0a2f04c02e35d47abdf3bf9dcd668dfcec236bccb2ba1afa014b33055d658198cd14e83f18f2d99a4a3d41eafcff3c33ccdea59551ef32b0cc96d0e52d04926732eb17c0e70d2665b5c2be150300c5f09cb11aff7da286e20677ff1ad2fb8299587d7d12ba2761a7a388103faa093e481977b1dd652a5df7a3b1a1b61b22c09e6396f8887031f4ced02e5bd746db46e26b49ddb63e9d9a799c91076f10022017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e17f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a6637328ac34a34e3477da9beec282464ba9847d896f4b35e24e84c8fe8af8467fd44c390fcc75e09a2c67f60ded5e1540c114e7ce7298b4ea99b3a4909b4f555039a731608cfcd48d04330573e285d93690aef520d56337886f463d03ab21eab274862941ea1f898358b8a0f13e975073bb856d28a70ee17bd3ef52acf02af2d9520914e4073d426e1da0fd3f800893cd5dff856b5b6cd0c1e836b00c4d30bd464d5833ab7a63fbc937280087f622f47a590e3cd4edafab2eb54f78501027ad49075301bdab451ade8278151aa000b6fbc7d54b1e479e66bad359e401066eba70867209a39f8854fb6f435560a9d83f0a321687ecf5e3a45fa3de41751ac1b91b6b4714ec3292ad485cd225f3fc3bd83d7445af92e4f0aec76377d903610a20164ea81e27af658bab17d393fe118062ac16d86d04f78a0aa3627c121034e9b3689c6d01bdab451ade8278151aa000b6fbc7d54b1e479e66bad359e401066eba70867209a39f8854fb6f435560a9d83f0a321687ecf5e3a45fa3de41751ac1b91b6b473acf06347cdff8730f42a4f5df5d257f7d329bb24630d13283bd06f771db93b62a0112f8fc14005585b36e19fb0033b0fb5767f5e15de5323474b1a41b4f45130862f007a9b13d21cc1167741a5912ed7c6c413c08096ec310cb02372103a3b13e292a3efe115fe95ae15b7c1b90b0dc1ce87257f7b83da2e29b7ad207f74309000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e3b1d4a3b6cd26f58ee36192224bd63e9efadd106c65ef6ea6602afe748a70c05345d627fc87959dfdb3c4e9ccdad9003126e5f5521563ec5e83471ff91201b1826f6f09825796877107882ad16d20c76f09758a13bc447e77383e54a62bba52a1ea8a559f566522640927b850b0b80575e26670eeb843e8018161afcfc518a3ee437ade46152d608ef3b717768446d21f179e219b1bcec40f2e8b2067945bf054752bb90f310cb227c8d1c1e6698719dcfee785ad9406fc9baa569141654d22d1af9af2c01d82de3344cdc357543ba065120096097595d4595f71714f8172700d0a4f00c9d6d91705ef0a1a12437426d6fa115560e25a1c3f995e915f11f042598821001a22d25beaeaa3dcdb7c11b10dc7827da46bf86c4ad0d8cec4fae153759100cf64012bcb6d298b5a35f3fa7a57c7e10293855ed93a36195c94c504d20f3efec87a618d2852ce5d8cbac4832aa46107cba82f4f91b5f709708486b87001df58d043d1b24e10a7e7ff5aa411399891250ed584e4c8179131e882e965f2cb0183da19fe408d6659e94bd618ed9a5f9f8890e0038beee54aa494f80f7fc3cd147b98986c2eac3fecf700b325b2e0edf8addbd2e6cc3a8c2aca46b813889227de42edd13f3ece5e1c97988802ea53268f7c546271aaed7e194cdbffb76232681351333cd5668150a0df45446261a201c5ab7e3883e372bf70057ef23f112172b475d33c11b93f6f85b821fe63eb76f7544b156f84392672de200ff17756a34b026c3efa6e759715d92ccc7b5481aaf42cd3065903ac12fce74908f5ebed00514e6904ac24679618f754456760799c507fa250e72c7b87bcae1276b1cbc8c03d52b3c92a7bf03233e7d6f192f0c0a420c2cb8f9c41c5c86d2665e5672ef6a07536f2be513e040fa3bf31e77ab0e27536c4b0f02f810c5910e820ddc1c57143608bbdcf0601a222fc4f8165c4c6850b306969f86d58a19e4b31f6d19948fb721b7356727000f021ac4b93fd6605fa02760cf528af97f0f71cadd248d592d5e03a4fd8e46a75f8fb7c1f438ab930cd443e78bb13156ea6d1b09092cd8fd574102505f7217d1d5bac4f5323d08d399219a216adc0c33db03ed8caccd9e72497d079d3114954ce1b33fb2f2d2fbe7803351eefee0942a87a721737a9950561dc917e72e6ddb816f1b214b862b638a340913fba9977f6e5d75af30b362f8776e6c032f04d158a8c8d309914b39f3db7e41f3b811a7cd4df00549d2240910e7dbb809ebc296401fa2e388f8fce96cf63e7ef0c9b5f3b1df53df78a447e0e4b1a2ca13beb8089c9bcc2d5072ed11fa34fc0d32fe177b291056b871432e7f6ace08930503373e179b32a4af9807c94e5b616f4d9b74b4e7cdadd9ceaf94b22af901423e5a680f641e10932646ab096c4444a258861286bcf0fbc95033fc4f3d182bf5323f624e10d5f3b2c3be08aea034eeddd3e898a558772bbec88bc4baf05ce466039076912aead66b3682211c5e7c3938d08bbf95d9a2d65eb868e074baccf93f2b7c10cb83936b53ce34327f1870deb4a4b356722472012a1a2ef78248c0a41c0439d05a19f4297e3b2cb83357a41d700d5e2ac2e3229e05783a2ae96b23e45b385622b62e9830d445330426446754544546818c2a4087a655efe00ecf8a249b11f65a1dee6ef8bf2b7c9d7dcb295c7106d5188df52594989d644ca2632cd3f613528676835b00b38b816b536a7e2d0bc632a379780f3a71f8c1d0e218b0b3383c663a00f8ce74aab5476729af208ffbbbca28d48e2266a355adde9ca84c0af4122c9445622578a824c5fe68872bb03e48052b5697efd885ac07bfcffd978dd40f902859cef30a579a9de0b5fb9209eed99e295ad1d40ec73308790d6577d6241aa0af672f733d0034b311f0a6ff9154068fd1cdc4a3ab8186d479fcb7531f0e1b431233994824a317c7a6c70e3b9b1e2e38fdf810291fa0a9d87c31cef05731043e858f0f130653c6221c6e085e675da54eca4207bdaed91987217618e8362b1157821baaddd77900b869c2f36d425699ca85f3ee132b3aaf36c83df351dc643f0216681a18b694896d2d642ecf0bf7f3302ce36aac8365825507e80854a89737224b0d2dcfda9905a7f0d4925c1b6f31c3017f36c073b03c743e8f9527a5b21355fd9eac0a53714f3d350d3d22d28d2ac502bfec6306eda65b949e9ee077f109bf5c5dacf1b60b82dc5dffa6002291aea9faab207a902ec4bdbd73819253f209a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22309a34f1bba67af009244016bf35ac10b2e69f4d0ccd1d4dc3224a0eb1b74a8b0365cb0e4459850ff6dbbfe940ca53ef4f3dca42b3c7b243f67089001e48b575130308b8aa4066b02db54071bc0c5c537e811c8140019284cfab7249789474b700fcf74755bf994fd24abf8e43f3a3ac83a34d0e80933d0ce9e760c5576b8b49130f2b9b53420170e48a4238ac3dcda1721851d6fe496de2e1a0c242eae64792d0f0d464acbdfe8f1b75bdc753c2325e900c17b8c24b61aed7f210cbe519b86d434bda08a04a073476b34b1b5d350427340c5c83b5b0b6b93b6b5222267f65dde0b425f75fb5f8cb894cb4e4a2cafbd8ce180d0c0ae418d87e2780eca9809a22321fb658f6072cee97b6dab3dcbac82009de512e271ab489886ab5369ed4941f1174fbaaf88be79d412b9672c9d372a7d2fa63a6f94bf935c8b22a38f99927d540427665ed95b17a0576af512ebc575a225cca770747fc11a85e3405b33ad6bb002137e04dacf9afbc347f2bf066d88f624070fedb8de8410940ab528ab8fc49c0d9ee0aee8af2693b7c6d2b811f5e292dcba481eee343b0632b3ec627a654d182635f86d86e7f83f7cb3eac6b05058573f241e38075ba38ed35ba3f423be9bbb372de69bc86ee4cb5a0c64f64cef1de32f914841f9310629d0eec2f98aa8fae01c66447d4164dee3e2e7541c5518112db9d6980ed1716218966bcaaa50a3eab03d57416bb298fbb8b8a6f8955a5627f3e5733e2347fd5211b97218dc5a3c07793540b68c25f88ff0f5483000beac2202e9344265235d5a9ef25cfe04d226571a151c9ac8f98cbfa4ba0dea0c7231d8a9b105eb6c9da85a730b14ce4d9cda55f524700f36587f61541470aeaaba8e582af9e7a75bc798eec5b61e584c3c2ddc9819dd3411c63219762d275faf488e085d5e94dea92321ef688c9e9d27df095261269cc74b9c71eb3029fea6145c5b4c8cce994e9ebbaee1ae79ffd834baddbe12151c9ac8f98cbfa4ba0dea0c7231d8a9b105eb6c9da85a730b14ce4d9cda55f524700f36587f61541470aeaaba8e582af9e7a75bc798eec5b61e584c3c2ddc983acfc35901a552582ed8d9519f2fb0790d4a39e21af232d1f8a16642eaf0c668342f0b5472a17c01c6d806d03ccfd6d357e0d4554eeee519e3a817fa97394d5501dacf7d3d24d0d332878c6c0a3a8ef9bc78065c927af019645206cd8df4d33620f8d84ca6b91c59f7a41134940b333c80043c39ba5c14304baca5ec925929580000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000135f8158aa52f7d2ce4a03c6b5f52e1917f5dc0c650cfd6d8297117356e4d187e39876bbc4931fbd6addd6c0a78dab4aaa486421e6606dbb561c061836014d8b80e5682fdc13348a3d4e6967a7a3ce51a584008df9095b23fd9767b40824f3d263480a7d3bcc2c3b50fa79c7552a0eff2cf6e55f74bef49f56ea0117ef32066b33793e1333e291fc40ad76356057b2222b1a038046d2c77f8b531ae00ab9a2fc61c510f1fbd8f9d8e4af572890ae3bc5d2a7f2fddbf00919186392d947e49f8c73ab59e83a74bf11f630617abe0fe3102c6fa4a037ac3b5c2571f09a014b3f8bd3be14ea37a8d97507eeb1d774c18894176c0883be31c9cc663b9c4a87574e75c22697dda0a49513d537d80d86bfa461b7e73d40e08d1339770cbb6a4ccbe00e7265ba8981b9e785b4e1b3320d8df7a113b5c236b39edcfbb14e103b0facc95670ac3a2c8011d228a4ea0ebb278a873d3a3d9e010da2cff7cdf3331151757bef71063f8811749f19936b687c44673882719fa4364522227a95cd7baad1a58eebc0575d0e1cb7a3ce96ce38298b2379ad91400687ef0c8fec64043bf9f87072e931e5efa653c42425efe8c37e0992c854943d4d533b8534d64229792de316beea13188b458ba0045fd313cee5282a44de0281fdaa1c387e51013568fa5c96f2b0b3697165c37077acd10f6476b4990597a872942f371308036ae5673470b0ac7350bc3d4de73535bcca0633dff2e4be6603ae5eebaa27715bb172c5d0e15e93c832baa0df3f57ec469f4f3dc42b6802ecb6766b5852d0debd808e98f2aa2e992443f90db1e8497b34f1d36620fbaccda66d807cf776d350301747a559b479756f300d53887d6841a4513da72e197dd5a6f0021a46731ff9a3673d5822a0da5757f2a464d9a1dd031d6567a32616c11d7a3bcd5ddb55954e185b2d63ea0c51238951f7a0cc27d12b651e7c0a5b0292d211b4dc7b6e6c0c0919f947350e80b82839629f01a6996c5639cf3f021969fe42eb9994cdc242f4602b538694ca90550bb8b2523b351f23b1495fe963be32c764545008c0c39e2b7b09370dbf536640b8cb916cd6243002f6735741bf5a2e7bc320dec382539a70717bea51e378c08308dd81729b70e3d7c5a836474632cb179d0f7386227b46ac8f166ce0ae4e7c29634d03352f2fcbb620e7f91832f755d63c33e0b119a233d208413d0f786e6cadb0781265c1a8da1f358b9b12e0eb9a7c1a64c0df5318e7df24338b7efbaeea35f42440c717db365c169efa9300d0f4429a56c0bf064924fc6d81340536c90f1332ec403150329050119a300473cc6907708541f6cac9f1c45e1d412a8c93cff11550004d3679406d5f02cf30450acf7c4ec85be496a0ebd6413e1f83bdb3e2c1d115c1f9fa3b245f67e784df30551366ebba33ade51e92ab5d7b5d1f5771ffed1b24c2f13df1c123642933645f37e243de0b7d82419be2e998d9f61643679ddeb6e2323ccdfba924fb4a0a40d8106952f48cf7919759dc376422879b3a82748de5a501c3840d83e6261fa80724677596bf3c335dcdea320e20430351033b6ea829309079439dbd9feef594f71413c8cefd98b241258623f8148aec85735c772e2c6fe2a1b9fde3055e26bd5f33f8b810d6c303485540c3659fcad69bd015ee5cceb9033dd22c0c0e3257569639bf3a95b38494681d76c752dffa3af6ddea20e5018892e1bf784c87630ac76543bb0777afa95d6fe3807828ff702d235d86c2e8742e326aed6517fa9f4fca080c0be75525045c8cc113f3749928ca68b018fa0364ac1249f4391a9f570a174e3495bdb7818533a463f48d5a9a69044564b14fada9b9b0a35b7d1bae9284ec4887ed80cda743c223d1dd12695d68965097299ab0a57dd28ed86e3685fa6963082661be2422853eac44be0403e74ab2aa75f413ecafba314349e2d7eea7ba0cfe8224fc78bf5b8907b8743b5fbe870c9192b9aecba264008ee11d1253b10b3883d37ad2a75ed4ba48a352ebc7fa5566dd66a4a9cbe160802c5f8ffb6eb3f61fbe03a4b8dc8877cf2849453bf51f5c4f096ba58343e7fdd2b75d523b5fb453bd1234e35e65816163f6ab4a819887ed66c8bf06659e91d321e4dbc6304f45f5f2388db2462b3dddcde05b5a4b94237695399ae08c28a5f251ee8b21001cf5ffb72ce0d6bbe8d0c6dc0d50aa886e22c37f43128409ca4f7101293fd45f3b680eabe5558c574ae62bf134374846804dbfaee25ade8b2234ec73aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e3aa7c39e650abd81e7d50dba9a436b0627ba83a1537bb440518b3a061301911905583c619af5427e182af24565bc94f9fa8c155ab5d144db47a1f6e6ecfe6ee82546d217f935b389872944a50351171e3d8a2e367c36a0d333035e6a5f07d5791ab92de806ca4c7678d6bb5afcaee8e1e4bc6ac58d1658486629d282a0f82a883a621a77de0c81afa3ce573910957396ef25b5185a7731e8ccb67639db272b5b059de58821f37e505c31a8c6ef6a8c693320e3e3aed5c732cc76bab324d8d4a623ea8457563e886e3307b41d52eb41f222a225899f20151d9adb8b6d47c3d8c31c157ba8a9c17791ccf84be2ad14be0dffa473726a2ce3fdfe51a57fb83c273e17f2172aebcde50d1f14eb99dfdf7b73471aecd42345acc5df8332f2d5a66373017e4595818c00b7bf91cb4323c7eb268e321c903caf42fde0af94c8c487ff2e14840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d3126132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c8361f5af3dbb9b764e06388b88c8ae25f7a7275bfb8e202712160cfad61b5bc73ef2084ff4eaf933d6bc5e8c80a6d386cf8915c72d09b721619ee695ae36cebe46207bb5847f3ec89cd59900a77cd11b5b93e4e9cc3e7a81b21a34e34673562c4cf398f614735db5469d4e59f20f2345e22d9b2ae524ebbb628ea9a24fec8e30f0920e7576a254c589f1b44c49b053e6896e604e8ae80f95b2742d55558ff28c21b08e5b7ee0f136a61bd9204360bf642cbc56347a0da0cb8daaf842450dcb7999008134748d8710762979b1062406fde0c96064ace3630870592558b307fee102d2b6879fe81419e32cfcc2b0480ff303bbca2014ac309b579f4be78fa1264a2221389d8f7dd827262a24dacbdfc7e9fcaf613aa817fc38db7e90ee3d2300c6b692b53331cec0a24ee2f94d881baf668692f9fdf19849125ffc37b4188d5d2389e08134748d8710762979b1062406fde0c96064ace3630870592558b307fee102d2b6879fe81419e32cfcc2b0480ff303bbca2014ac309b579f4be78fa1264a2221201404b9118789ee6e3c7cc266561200731412207e697b129f03118c7666b500d8982f95c998465292000d2ef16ab93e858287d8a1eeae2b889ec302280e45f135e5aa9aaf3c8fae644b82ac49ac30be8fe1a4af456aab9601c10ec8c1691910c0c5bc5ac08d6555330910b48fc161ae816e8e211d665fa3869e3b48079166e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e8211f6215d3f294dd80b0cc1951e3048971276fd79940514b019ca4d2d8ee42e9a0d4ff7d0ef6c39a0eeb6a75eab621b80f91b32cf528655086f798e9b79db0a411141710abe9a66f2a2672c7ccb52c30b6578878d8bfa7dd820f46c4354913bbadbc2fa4e935b2b65f20da325dba3eedd6d852ebb5c1ab8140c7636587a5d09ec192b96080adff5f979629e777996a5b93a626afa260cc62321104bafc1d6169e375fdc798c9866f8aee0b7d0719f794b6b0dc8586850dbaf3b00d9c8dc631b3635d1173873d148912d6452594dbfac5953ad47f7be1e4c57d1f99ae7fb8f0b75099f466f0e9079fe4dcc935f79194fbada452ec854ed15cf4b300a34be691ea5e15d441c009d35f44955679168420cd65f3f3977eca810abd18313707dfb26d4e8916062abd84e7e38ea36649a45ec2e134014ba96d129d6f37872b1d57f1e04e952902cc3726ecd1aa1603b742acfc0e3f1e94556b45139e27d6c1084ca20d504f93c106ce262d7aaf6b1af2ea686837277d93811525e2e1c0d1854740a3587f318303707661da0685c626eb54f898aafdab7e3bdd3c2cb7c4c4668f8f827f688b224a460740920ed7e71368fbca0fd5cd5c409552a0e73fbaf4c4c815c30d9c99f82a90a6027c91897a2ea30fa8e63f2684b4137ffda8f246c9fd71abb2976a697bb0345ee6c37e2cdc5ccdfe091f741c7c2c38686a4210fc1c2f2a55829535485eb49c59524c254021aecff3f5f7d161f44b4c92bdedbe87ca1bc23d52f24f95171dc0cfe1aa1fae9fe7623498ed0f9421b5d7ba3f44b6c5fdc2311e70717af79452ef31b08e9c7e062b7353f10ae2e9cf403783c07e6b3625797af2f3853cadc15aeb61aa60ee21e0a057dd2bef3a5465ae32f35f5f5cdf7207fb1bb29220126098d211bceb0b2abde6d3daacab9bce22db2451131291c9e47cc7bd70fbc9450dedaf563513106fd968e20ed28e3953236024291211816f775f6ca89326efce07a711bed0515a6938092bcfdbb9c57ab63bcca79675222c83d1e11fe153922c9ac0b1b5efbd72815e5291abe0959bd3648e74c824e020043efc6a4b71e573786669a55ab7a5808e5939d2f29f5c2f2922970f54b347e5b8b2c887577012e27761fd000209a57aba3106559982569d4f26213b8689ecd3d3510bdccf43cdf491b9743512850222a7ac234d06cc5ba3019dcce11f26367cff209ffe60c2f8b56cf5644536ef30609a97892f7ad0686cd862b4061743705fca7cf0a626723bc9a302ebc18ea5f971dd9b09b96104535acc0871dca9e2b30565457b518d9385344768516c2cd8e93ec22d1227836db9eb6eca4f329641b65929225d549db09ccfc2f086c96c46b2dbec2173af03cd5b446611455066fff6e4e970474a5bb1a606e51ed8aff5afc22d0a335856a79a7eb17da205e1b41c4afe732bd4c3a3a0e4acb8feba77e7a590edb92a2912e8f11afdd5a7b7fcead3a67026d2831c5b92764083f2f8cba59e2ee10fc5994ecf947d9ee07aea9b9714932ba0a8f50fc5a3b6747210dded8a57c534c4790f444fbc6528e2e26e5c6903817ec2e0f3e4e4e269ef60355a1acd7cdcfefb5c36354cad977971664aa57aca735593020017e3d239a46101b406c4c270587316bca5e7d8394f7ad46693b7991423054a4edd7b61b1ff84ec641c10a11b301c29c9646c15d4816c6e7de5b70effff8ab70c0579e08bd8d26b3cdefa8f2f75ca34d9e263e39b980c92b898ed1b0a4f8cb549a6299313df5d2fb267b0318a3a6400bb23ccdff9f70d456bfd2327e64f8451dfe376c3089e2ff68e1bc8f3b430057abd9f8bb13e4366e1224c962ed2c04300fc303f139782905a6f4185f1657e7b3764bd5c9d76d78ab259727a7b85b32f5fd66dfa510ae20e2f80e5a0292463b006caa17279e877bddf8a97b14bc843e5bfa6581201adb5e5546a169b9663aca708895d62c515ba7c290579923142432ab3b3df9ee26c556b54102bf24cefe9c6901414a31c67017d369c53bee10b544fca659cdc53cc8aca8990ca75003429f0b044cb06152ac83f97a00039d84062666fcca2dc52b5af8408269a6c1856e44a44b7fb6b8d0b963e9167b98040cc27b1951c4d1250641a44bb7869e35a067dd0c9661360e105764ae9e443e485fd98ffa0cbacd3935a060125926efeba4853790c285e2e252707d985473ab32aed1eb24f36f7a8e052b16ffcd23d4c90a46b7731fe5fa632a3664e59490ad8c7fd433f693e379100bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb0bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb1663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f216211fa42639b21ecaf1ed4e983217b62a6709fcf49a5422b064a6309c8e2c557662260f666d094d1a6403be2dc098fb8f586eb4ad8166745ba69d9a8268d67ce95224688bf433df1ae089e293b28e241cab5fcd9cd6a27caada7343d9684dde77a20de236c8d5a6a0e502a2e3ffe172e2714300642e4b9f8986569c7538a0b81fa33ee9d35863311447a1f0d41296828ef14e845415c2e1024c8b39e27624bf3130d97ba61a8a2316eb79f39a161619e8bcb7a52eef1358e006dba79ce51baa33c10c697823a4c4bcf76cef00e67a7c4573c7f2b17dabd0fdfacb93a9679d4e8a211bd6a4c417911b42b7f4e8354b2a758409284328da8c61546bbaa13ac0ab63936bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db17a1dd82353c650035565c7bc00d9e983b457e8c8e8400815db42975e7191dd723725bf4adbbbe02d33ba140065e3e1cdc66f45df62ec7fad6156e418389100c36bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db16e08890aa848dc2cf6ebff393973a719895979a2e346a08da82cd7f791497511f9a4131e99449698ce8ce1eaa5edf794bef39d7950170d87650c3653eec76d50bba2f36522d59ab82ede2c4985d52a8c1af4cb45768d4d34000a3c4b4678bc92de546b81283d93d323202c8cc923733cabbcbd1b161d0388443c11d1282ebd00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000119855653a92b5b37bc84430dedfee92e5fa2a1627ef010cc358ffc7ca795f8ff10f91417ebc5fa0a82c0fc211c1ffd54bfedcb8a1eacc12001db3d3dfcf6410336fcd7247b582bd4755c005b613b80ca2f8820cddcb43e242679713b9c095089132f24b896d0c5362ec7896ef900a2aba3d25adf53f77108f34a222c4498678214299ad45294b6b41dddc527a1ae46013a4622388f6d3f7fbd08cb5da0b408e8111e3f7e1b77c40285c0545eb39b341c4a7f097d9bd852d41d534ba5324d57cc066debc195b53304b7c8f3785ea52c698fab1c33036da1aadb1d57d46a57fa0b1b55c2439894e8561eecc4e7337a6c428414211cb9e391ff0d1e54a1dc8492741382fb675176bbf903e404bdded09f4a79609c13f8dd0adc9bf398380d0643c00e803f15245b8ee7e24b7a7c9b475907f23b775017e95e80844dc3591d4578e518f961d2961eace213ddef4c9fff847634c6aed28ea2b36c47e11aa8476227f61e1a563dba60b85dba030b80ae9ae90dfed627a0c3282e96dcc4f6f5795a0aea303db71302220fdc36cb981571a7a39988356de91cbd34414c176a4cbfbd0b1606547e6644a457d54b633df37048afd98c0a7b53fe4373e2fe2654b7e11f75890f4a5c550e927e552d2bdfb5ad5b579ec4d13e605ba0e8be836ec282edc0bc8c20e9dfe79ff700f343168ec6a16ab1dfcbd35a3498546dbd3834c9a0c16f318722b5bf8602797964cfe223f7f39caed228cef4a518f6375ea58a12923cea8cd12d374dc211ef11c761695eab8bc0a9a0aab656a0122a5f78e1d299ba93419f1a0d1a3a23a33ac356a53f60b4d8d4635586b2e25f81d3fe22d36ae75e7cf442be2e35b50d9687b4c7d820a14f2e63abb3597f2ad46eeef9d20d6372707e81089a184020a4fb3d8a714a4f626e3ea5bb356c6ef4c6747cb8aedb354a201f92f6e62176aab83a16b5378cbd7456d7163bdaf3976424bdb7563de4371f703e5b6e3c05a54c3ca90caaf0882824ecae0496d22fa11c473eb0fa671156a4345449255933935e3d12203a4564b3f7bd3e5188139552f235daee4ea1fdf45a81915341650b88d5843256b8f16a31985616cb634b4a614bdb510b92f6e2c2d2268695cf210ce82eabb395d8486c049a6304082636414c908c415de6ca846f31620d3fe25903aa258c4f5cf8008e3f972b21e33b538622309766d0a7dd0cef851a07dd74421a435475fb6ab1e7162ed84df5693d343dec523b4069c64b9c89cd0df7fdfa610bd0cc0e4bf690b74cccc9f4da3b379896be27c571590c67e76971b5caed42ba2bac1db6f1236abc4a0927a957c66dee1dec17d2890ebbec9617ce5b2781620303d3d397302499301ec0ff0a2f2a6171831491c3c698372840da2d0655b68ccf3cadec78445ae88b4e7beec24095bbdae8981bebc7a1b4ea4fbefe3effe7f40f02c35d2cc186cb97ee70cbab620a055322aae8a6337a853544e15a280f4a93972f17598b444349e9adba8bb649ef188d910c0e3d0b79989f0f8604fcff06ffee3220e40b6e3b8bd5b56e9d049c833f29339266b485253e9871760ec1a5c9b1522a0cf327b065fdc58065610095ec4a60fd601c623a664c5cbc801b45440faaac201a60c7a9c8790d2e4b2ead49dbe70a7267da3683781a11f5f64e49c64a1b472c4e2bbf32761299b938962a6b3e204de7e452718bd691428f31b78e05d97c3a3d732743c82f5d48ed9a893e0be8edbac1b2687ef0af6b353bf98639ede4427f240f99396e8262647d1ba5ebb951165380ed43913e404c2172eece648b8f431a0e9d13f24d8f4cbadaa2dd0b29bc97e0bc6655051cd7ec595ba8de236553f1b63eea4050be3b1b13be6c78e3df2888e1650abab2218939e2b61702514684dca807e123367bec5811decdc8d749c29c23b23750bfd52fb11e10c429b7d98d419a06bd7b4e1dd77eb398b7f72bfd3e106249cb9737d11d912acff5585563a76e991bfbb9289dd155b42171679d712ab8ff9c4333bbd29764c3031ef81e91eaceb23655e9153f46b97ba2ad0a01a65b132807b0cff3264c4050421e3033d3e4307c10c685bb1338e347aa2c5765e3d9ec3d3b00716a4ae009b3c2120d02fc58526d3db2f9de3c0d7d640b53605e1cc84df1907e3ee914a236e7832439bad289fc523378d8b5238ab2438e658a8f45f4a8ec8f007da873d23e81eefea7862b977dbe26660162bd1cb7ec1dfad6a884665218c6c67233f897f80a722d9017bbf94e090bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb0bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb1663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f216211fa42639b21ecaf1ed4e983217b62a6709fcf49a5422b064a6309c8e2c557662260f666d094d1a6403be2dc098fb8f586eb4ad8166745ba69d9a8268d67ce95224688bf433df1ae089e293b28e241cab5fcd9cd6a27caada7343d9684dde77a20de236c8d5a6a0e502a2e3ffe172e2714300642e4b9f8986569c7538a0b81fa33ee9d35863311447a1f0d41296828ef14e845415c2e1024c8b39e27624bf3130d97ba61a8a2316eb79f39a161619e8bcb7a52eef1358e006dba79ce51baa33c10c697823a4c4bcf76cef00e67a7c4573c7f2b17dabd0fdfacb93a9679d4e8a211bd6a4c417911b42b7f4e8354b2a758409284328da8c61546bbaa13ac0ab63936bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db17a1dd82353c650035565c7bc00d9e983b457e8c8e8400815db42975e7191dd723725bf4adbbbe02d33ba140065e3e1cdc66f45df62ec7fad6156e418389100c36bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db16e08890aa848dc2cf6ebff393973a719895979a2e346a08da82cd7f791497511f9a4131e99449698ce8ce1eaa5edf794bef39d7950170d87650c3653eec76d50bba2f36522d59ab82ede2c4985d52a8c1af4cb45768d4d34000a3c4b4678bc92de546b81283d93d323202c8cc923733cabbcbd1b161d0388443c11d1282ebd00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000119855653a92b5b37bc84430dedfee92e5fa2a1627ef010cc358ffc7ca795f8ff10f91417ebc5fa0a82c0fc211c1ffd54bfedcb8a1eacc12001db3d3dfcf6410336fcd7247b582bd4755c005b613b80ca2f8820cddcb43e242679713b9c095089132f24b896d0c5362ec7896ef900a2aba3d25adf53f77108f34a222c4498678214299ad45294b6b41dddc527a1ae46013a4622388f6d3f7fbd08cb5da0b408e8111e3f7e1b77c40285c0545eb39b341c4a7f097d9bd852d41d534ba5324d57cc066debc195b53304b7c8f3785ea52c698fab1c33036da1aadb1d57d46a57fa0b1b55c2439894e8561eecc4e7337a6c428414211cb9e391ff0d1e54a1dc8492741382fb675176bbf903e404bdded09f4a79609c13f8dd0adc9bf398380d0643c00e803f15245b8ee7e24b7a7c9b475907f23b775017e95e80844dc3591d4578e518f961d2961eace213ddef4c9fff847634c6aed28ea2b36c47e11aa8476227f61e1a563dba60b85dba030b80ae9ae90dfed627a0c3282e96dcc4f6f5795a0aea303db71302220fdc36cb981571a7a39988356de91cbd34414c176a4cbfbd0b1606547e6644a457d54b633df37048afd98c0a7b53fe4373e2fe2654b7e11f75890f4a5c550e927e552d2bdfb5ad5b579ec4d13e605ba0e8be836ec282edc0bc8c20e9dfe79ff700f343168ec6a16ab1dfcbd35a3498546dbd3834c9a0c16f318722b5bf8602797964cfe223f7f39caed228cef4a518f6375ea58a12923cea8cd12d374dc211ef11c761695eab8bc0a9a0aab656a0122a5f78e1d299ba93419f1a0d1a3a23a33ac356a53f60b4d8d4635586b2e25f81d3fe22d36ae75e7cf442be2e35b50d9687b4c7d820a14f2e63abb3597f2ad46eeef9d20d6372707e81089a184020a4fb3d8a714a4f626e3ea5bb356c6ef4c6747cb8aedb354a201f92f6e62176aab83a16b5378cbd7456d7163bdaf3976424bdb7563de4371f703e5b6e3c05a54c3ca90caaf0882824ecae0496d22fa11c473eb0fa671156a4345449255933935e3d12203a4564b3f7bd3e5188139552f235daee4ea1fdf45a81915341650b88d5843256b8f16a31985616cb634b4a614bdb510b92f6e2c2d2268695cf210ce82eabb395d8486c049a6304082636414c908c415de6ca846f31620d3fe25903aa258c4f5cf8008e3f972b21e33b538622309766d0a7dd0cef851a07dd74421a435475fb6ab1e7162ed84df5693d343dec523b4069c64b9c89cd0df7fdfa610bd0cc0e4bf690b74cccc9f4da3b379896be27c571590c67e76971b5caed42ba2bac1db6f1236abc4a0927a957c66dee1dec17d2890ebbec9617ce5b2781620303d3d397302499301ec0ff0a2f2a6171831491c3c698372840da2d0655b68ccf3cadec78445ae88b4e7beec24095bbdae8981bebc7a1b4ea4fbefe3effe7f40f02c35d2cc186cb97ee70cbab620a055322aae8a6337a853544e15a280f4a93972f17598b444349e9adba8bb649ef188d910c0e3d0b79989f0f8604fcff06ffee3220e40b6e3b8bd5b56e9d049c833f29339266b485253e9871760ec1a5c9b1522a0cf327b065fdc58065610095ec4a60fd601c623a664c5cbc801b45440faaac201a60c7a9c8790d2e4b2ead49dbe70a7267da3683781a11f5f64e49c64a1b472c4e2bbf32761299b938962a6b3e204de7e452718bd691428f31b78e05d97c3a3d732743c82f5d48ed9a893e0be8edbac1b2687ef0af6b353bf98639ede4427f240f99396e8262647d1ba5ebb951165380ed43913e404c2172eece648b8f431a0e9d13f24d8f4cbadaa2dd0b29bc97e0bc6655051cd7ec595ba8de236553f1b63eea4050be3b1b13be6c78e3df2888e1650abab2218939e2b61702514684dca807e123367bec5811decdc8d749c29c23b23750bfd52fb11e10c429b7d98d419a06bd7b4e1dd77eb398b7f72bfd3e106249cb9737d11d912acff5585563a76e991bfbb9289dd155b42171679d712ab8ff9c4333bbd29764c3031ef81e91eaceb23655e9153f46b97ba2ad0a01a65b132807b0cff3264c4050421e3033d3e4307c10c685bb1338e347aa2c5765e3d9ec3d3b00716a4ae009b3c2120d02fc58526d3db2f9de3c0d7d640b53605e1cc84df1907e3ee914a236e7832439bad289fc523378d8b5238ab2438e658a8f45f4a8ec8f007da873d23e81eefea7862b977dbe26660162bd1cb7ec1dfad6a884665218c6c67233f897f80a722d9017bbf94e0909423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c72488509423384f0d74a20ce8bb048dcd97d6222ae78c1c3540d2ab8e53c646732492636bdcc7b0f28b5df31744fb72326829dff98203a45f8ebf0e047f48898cdb6db2e4b0198b43472a408ba716c503f72eaad685bc8d0a441d59c7a2df603fb6dbe11b4fe674bcb8d5bf7458e93afc08d1574de3d3338a8b745fcb302f6fc049243277707fb85063d342ba4371d913d3e94fc35fff7f74e5dd942db530713e924b31888f8047af9c2cbd45bc8e26ec2c16b2610990411fe9b425651dde5ec16db4e055327e9991f3204da351393d63238e8863a34e3b8a0e9eb82c10c5c638db77c3aacd81666e0cdfb25caec6c29cdc7179c0c641850ac0f30166c24909c724885000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000104f76403bf60615a60b90f6473eb481cf6da2c22d4594ce4afdbee7f237f41e03e92aa0756591803b616ea271a70651e7d44a52672d5fbca8fdd25dbe60153f922c5f554f55e1f6dec782a0be0543f4c7b71f8485a2e10391db44ebd31833ff019268ca41e96598a5bf44df952f5a40e60fed7c75dd31635181d04c0a385e58b14803586fe72a309548596d30bfffcdbf511f7a83d11433501fad6f0a0112fa824d9a756ad18f420b8cfb08ebb78d0e0f005efa04ce9938df69d42917677a1cf1e5cce4deff9a1062fd3254d52043a0050968e019bd4f2913c411c1d46c3acd93740cf01dd71ce350f17c67f6ab0118524b0d39877f3102f9eaa4bdd83b9e86c2ba2411fe33dfa0cd3dacc7bb65f403845f5298a058be1088e664d8e35e28b3e38aa5d8a8c8ffcc90210d317d7a218f822ab186b05d3e754a2972260577fd5cb31b63e639e7c63bdb2566fb4bf6c4a4d47856a6e1e40b69f076a2987733f02353449b39b4db203e12d02b250d4a37c45376d0b3cef7b238f444ca914db382f33022d1e12632fcf13577760615c9228d54f95239d2e6af4e022a0f0e63c95f1b30f4d3df90294087010c0bbc7ddb44465a3855066139de4a4ba5bb9f6e4b1f07232a00ff0c1f2a9994947ed8b953bd689d92d0dd0c8167669fd89bd0e4419e966301794149966b4642a1cadc30ecb49a523fb126470cf825604e33b538d4703582f6f0aac8b0fd732b645605b224be9b74aef4263407633737bedca382812e0b520970bc14627532c8bfe08072b11cba9f8ec7d317392b48bdf1ff843080787b815a820764e4778b26e0ac7eb4f30eed2b7745eaba300e232fdf38ab089544ff32df364a9b439f23a9070f858f2b427f71d641687063294d36197caf4e338193d2393fc84ac0bb9c0edb4d1a35957e02ada3722c56996742824f523449b55a7fa39d07fbf7506aeff02e0fa8c479d035c0142326eaeb3c73b021978541d25353238e29f3b3655597f9b6ceb034d24933eaa3a4255054f66a097d66d85e6d8af3812a65c7ac483cf32160294705ba461aa93043cb3a1d7ebb46b6694030146e51601d937ca6e8181422a95b3a03cbf404a03063240ebbbe9b912f21b3cf33c42660f9a94cea1ab2c7aaca768c247ce4733c2090fc2878f79c5890e031758ff78322d21637a983cf8fc40b47ae3d5cd2923950bb6dcb33134d388e47c4305e4f87f051b58ac719787c9cfa4b09dacb90b750cb83283142507de06fab8f9282b5f69312d89b3c3a2f8ab20a41d59b6238a028c1b05d60387327db2d3cdc4b9f244ac35a7ab178202e6bbd3cfb19d644630b8569075c194874de5437a5cda3ec936810d7a073716774f9df7932c400369e53f19c761313c964714ef6c0dfca05e4ac3215d571d6a754dff8a55feae655b6a5f23e40494c012359650fab34a4c1423572cd9efcf51a8443f80889d4ffff667d40acc81eadb064e6daa86d645283ae7272e76ee78ce60e4a9e195c859ac5c4665aaba808a51d660c3bb574521a6fd29da3862a19944318981e595a81f7ac780e95422f879aeb14a506320057c5b0b25691f69768a3499de67274e501cc7bdb52254099a24420b67dc27a58158b87506ea2fb4bb451a4cef3393a7280e63deda913b28199025ac307be0695922dc3a837600000000000000000000000000000000000000000000000000000000000000001f69768a3499de67274e501cc7bdb52254099a24420b67dc27a58158b87506ea0f1e31cf4ee6cd9abaf5782b2b9c8fb36ceb1ab85e6a9f3c6ee1a98e94af8a5f278f18e7a77366cd5d7abc1595ce47d9c798d9da33dbcc2c04076d3dca57c53106f88f71dc0d453484c90c325d8bfcfbf95bdb026c9a3aec927fbda982cccc190f1e31cf4ee6cd9abaf5782b2b9c8fb36ceb1ab85e6a9f3c6ee1a98e94af8a5f36ad4ab6f65a346818703440c16ad78d3483f49292466b6872e916cc5f074f8e06f88f71dc0d453484c90c325d8bfcfbf95bdb026c9a3aec927fbda982cccc191e3c639e9dcd9b3575eaf05657391f66d9d63570bcd53e78ddc3531d295f14bc2e87a8598380ac01e243c847f35a44d5c0f4b4dca076071896872ae74d24914800000000000000000000000000000000000000000000000000000000000000001e3c639e9dcd9b3575eaf05657391f66d9d63570bcd53e78ddc3531d295f14bc35c3976d398f747336feaa383f3713a35943f3c4edb6b1b51af8347c453c12f50a3c6892c6708b8cc90155c7c0c8ec5cc902a5371b9647667e34fc70bac3ed0c0cd1f5221fcd464012f953193c13623035395ee87f5d941b222442b95a2c5ec5332e0adde032b9bfed06ace6c3ec9dcfed0d3a1389ef65007708ee33a5d3a13c0019c9aa9f025f405ede9f7e2c60eaf0e7d8418e7386eb6c11881cb1c2ddd9d83fe6365560fda0bfa1216081d39f150f3a6e576d95c60daf87a5143b3d2226290080f0551b0bdc41da591d76dde496b4873947c841a2991c57a88f78ce5541383f7f0faae4f423be25a6e289221b694b9b0d5133c7aa5fff4184a17431aabec935c3976d398f747336feaa383f3713a35943f3c4edb6b1b51af8347c453c12f50a3c6892c6708b8cc90155c7c0c8ec5cc902a5371b9647667e34fc70bac3ed0c0cd1f5221fcd464012f953193c13623035395ee87f5d941b222442b95a2c5ec5332e0adde032b9bfed06ace6c3ec9dcfed0d3a1389ef65007708ee33a5d3a13c0019c9aa9f025f405ede9f7e2c60eaf0e7d8418e7386eb6c11881cb1c2ddd9d83fe6365560fda0bfa1216081d39f150f3a6e576d95c60daf87a5143b3d2226290080f0551b0bdc41da591d76dde496b4873947c841a2991c57a88f78ce5541383f7f0faae4f423be25a6e289221b694b9b0d5133c7aa5fff4184a17431aabec91b9d5a2a50c6d8a61acdf312b101a31352f3356636139aeb9593bce4d5ce2092004c37cf170d22355a2c252313a00e318136f39a3ea0096dd1ef1c2bb8c26fb52e1ce4971c1e0b0f5cf880c34677be686064dfb780006722ceac044d1b699bd630724526f7075051f9dcf819d0dd085d38ff955432016255920a1f29f6b253f63cad42d00b1c85898c8734a7773fcde6e6af3362fc537e8d1fe577eb4c0800a338709587a5684be366fed5b4d585796e7a7e5ccf560909712327421873ae33ae1e2dfe94e27245c14963a6ee4e6e50a81ef6143d149d890fa3d060d4fbcce9c82a1ac3d118f0c53456a73980df4807bea044cdd1d80f8a0ac83026c45229679b36ce8f7204cdcd52921112439e0939cffed0e736b34ba50a088e2a713f722f8e373208b0487abcc23f2dbc50176c88c08aa57f0078482afdc8ee361b7c5ae30739e68bf42b1126718c2c16daf7d61a26c72192c1415bc802805c2c4eeff42ea209eed60eb0b4e5102fee7a5c01f3b6100e6901ffb577185772d79deb5fb23d963645c13e931b1c4a88398c2a08869e8491351cda5c85f028ce1aa0a80ec8439b0f418309f1eb8d78abf6e2c31b82e9716810100d98ab8d583533f597508b3c5739e68bf42b1126718c2c16daf7d61a26c72192c1415bc802805c2c4eeff42ea209eed60eb0b4e5102fee7a5c01f3b6100e6901ffb577185772d79deb5fb23d962626a20c33c3a27336b57989aabf81883b76d3d0498da0a016c11e0834a825e736ad7d9c95d25958a87be1a7b086e0fb2a18f17d14baa9b18f138d547414667f37ecdff67eabaabe09513ef1756b02481adee2767f8b5a5adf3dce04b680b2201a051809fb6f227ac966269c32a0a790675141111e7f85bdd7493581b1f20e95000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010ef1aed1e99d35333aefb565fce63e1f87ef05633d9d5433c044940ca903df933b515c8d933e52a9f4e25c2951d411084a0317b852cf4aa10b55f555fd9e77c1061b6dd0393ad8b0d79ae5356d1e12bf764ea121e407e8ffe834f52a58cf8b8937f86ce6f44285ad08aa2e2db9152390896a1314bf0efbad0fb91c2cdfac755e19885eb943206dd7003add9b4925c6a74f601bcaa42b6d5ab8185f7e357c6e700ac7e9e0839a3bc4da2fbd5d627611afb4ef28927076f95112d7464f7e7d5b9d16677da981820c0d3eb8e84bedf01d153eff9795cc821c32eb58f32eccca22082e9e46f5d3129d4ada6467e4e2eee6246c8fb1308908e92c76edb08adefb35b515f2c9a15cf8aa3eed7158eb888b55e2f91a6239d7dc8d07b429aa54f04a6e12097d60155e15cbb4a0534e68e562fcb8b56ef096fc1236b202092ba7a816a5fb3d116770b74f0e9f87a66224aaa8babe24d26840515ab2356116d9e0c27659f4094f2ec0d4360f8560e677d2088409a5a641206e524401a35429c88c321a66123082a82bc61e459f3753188c44e0d5579c22ac574ddca6b3f81c80f67925dd5010689ead8168faba155d6790261d42ceac8ee9b9ba239c685d1d9e07e3ac3f8a2ec752eaa54990a8639bc0d5c6eae9334c7344b2bdf0edcd343b270715f1511b06a4f340ff9372b09ed71be1b1921ce1c2f63146cc4cda9946b8face352051c0241d51f973ec8aab3bc0bd141361ba811826064418bfbcd50030a2d270276d623c5fe4bea3668ab379728f856431503573394681aa6801eeb6c5507afc3b91e51bd2c9bab6d812e0247f93890b784f671df3ed1a6afb0577b4025a12dbcc33aa14bb72cdeb75063bd9e167ab9514f46ec56148b74506045515b4d89e6bf6e034214253cb08e2ca8d3317e1a60b2ad00d6758d41dc87e78fa016a945330c165f32606b3c701efbe3d79f6e21f76d933a0bfb29a41b15647743bd8c81d2e2ad40535f942b0b9ce3ff60178a0e7a559c811a46e5dd66741c045a1913396552f73cb2951d87f933a62fcaa043793e9446e565cc8bc81aea656d8106b0c1559ddb2fc1f8884b52931b5d8ffb43fecf35c15c4c9289366cfb1c31fafdb9ce248f84e263427773a1352493de4bdc538d0dcaeb8f3948baa4bfe8b5b1472fbe724d2133d013794c48f22e05a0f4741ab678b7f38a39bec722ca897559a3b4ac851254f7b2ee6efe9b669a8df1a22f7ee3846bb06a939ac5bf8e67e7131a6fb28186194352225da593e63f90b1e67c212a09d6cdd7c486f19efaaf91d1fb3ada181bebd74315e8ced145d45552753e0c36d74a393761e01c6c825192cccaffe0f7557d3a712383550e52fb3f15ec09038331bea0ad5b7a68e1dfc835917793c5d3b941df23e26832180d1ee0e0b863411129b2e1f52082087a0208631f69f6d69328c664617103ffcda66f4f2f185dae86fd53c3d7ceb9be7ab8b149978874746bffcfbd32b57a865fdd5207ddb77dfe83e74cff193a6506843b8a9b67a17b4ae47284efa2e091835a3caef20ad21959f18f0100774e0d7fc4a01f311679d7a42292af16f2ff2016a7b2c5acc3177b5c557ecb5d24a3de2d2b67aded0d71ccf5f06f684230837f390e3078b515a3b393787fe51ef23dcc60f7f1d8c28344459801be141bc0ca6b0094c41e01de0c1961fb076720c25863f82986524255525361e7ce845d01365a59a5a547f22994b91b4a696bd455e99ddae2c2e08e12e58b8ad6adb89c01ba41855a71f6e48b51b5fec2037b341f5a02d4b64dad53b376753ddac81cd390d9dd072d36c533c8bd6b9f3c8303e499a625e4aa34b5bcb3453978de23aa11f1cb6da54d386cdcf8c9e2589b7ad19d110831cba6caf8eee46a339b3f4c0c149039d7ed98a9616c2872b6d34e58ea2bda3bf573f4fbc5b15f13f6f3989add9a7154ffa97956614dd7d9d54c0821938c597d00b8b0a6d785db8314004a2a3776636983cfa735e0b52dc617363c8c174366a55847f987b4545418b3766c8151cd1262c1edc789c474650b7bc5de73dda7a1383228b67ba7cd52dc04b7d24322b2b1d3db38069b1fb7a25c08b1fc92ca68127deba11ca59ae1656508c2ea388c6d30e5856f5917cc70dffc048d112b4a05d7099919af1e51f59e45cd24d6604579e3c27bf2e50e25a0f368854220de77ab707f943391ac0d1180a4a968ea0fed7033af07e4e2a46f4164710eeed7386f644388b1013bba4b99c45c3fc5828fc47663395a5dd360e13de1d90628d3107ef8b4b55279b87bebf2e5cae67f17ea6ba930c6a5a22c9f1ec21e26f9d72cef81074d6f17160818e39ed3c7ec8fb8159456e01ec3d520e46635693d1ecc1f527adb7ef8f62198185d7796ab344037941a4db3e13c2adf1b99ca96c2e133e0ad8524832b736e287c721a22e79ece986be5b26099d329a475ff0b0e3199fc9c9c66497adccea7f879d355f158054115e4838473662cd65b8a00f4f1ce6603636399b687479ae7c81afc3bc83acdcdba1b7c7ba3011fd0364dfb3746f801ef0f0dff6f66500947da6120adb6b81a456d76919630fee02fc9b204c8b907fe10f0f200909bd46047e633aee402dab8c962896e69e3395a5dd360e13de1d90628d3107ef8b4b55279b87bebf2e5cae67f17ea6ba930c6a5a22c9f1ec21e26f9d72cef81074d6f17160818e39ed3c7ec8fb8159456e01ec3d520e46635693d1ecc1f527adb7ef8f62198185d7796ab344037941a4db3e13c2adf1b99ca96c2e133e0ad8524832b736e287c721a22e79ece986be5b26099d329a475ff0b0e3199fc9c9c66497adccea7f879d355f158054115e4838473662cd65b8a00f4f1ce6603636399b687479ae7c81afc3bc83acdcdba1b7c7ba3011fd0364dfb3746f801ef0f0dff6f66500947da6120adb6b81a456d76919630fee02fc9b204c8b907fe10f0f200909bd46047e633aee402dab8c962896e69e1040c9277dc8c6351fd039b70656118046072e337c872d37814fdf794ba768ca31870947f95bdea9c3c192cb3bbf7effe29d0fb7bf7284c1d7e0d66acf118ab01ca473c5897ba6afac2e70e9ee55b99f57af0cfa788c89cc309d5340dbff5b1a1d4002fcdf1ae6d1befa0240fc69b5e42ba992ec68df670cfff2aac3ca7f31193e844b86b8c4f590bdf70d22aa7ffb46cef2f868facb733f6021b5cd75c6b3b234a1d408a815218dd978d85cbabe63906fcb6edc584daec2c3ecebe09c9ba6e637474a7ffdcfb565c32df73d979327c405c73d83f718ebb906410d73dd2a69150cdfe26095404455247b2bba849a1b548587d63d802de2b14f45ff566d1748603b6d97230c19cc65a61d650d6c2e045fdfebc3d59be318deace7d9def822802206fb559fd2cded1180d261ade475b90a049b867c6e953e68a9eae362c128b6c024f3cc984102265dcdd7c86bc903d5b2b9219ccfd1a413f5b054954914ad8aae2b3f9c77fc3bd3c17566dd79285f24c0ec915bdd0f6a6b45c99c5e3b9018b9e6131ac312f8bb931b3401555f0b5434e084905dce14394217e73ffe32d8593c1e3138f3bb27893a847d446af3c7d6cb1c36468f53ea4806685a86e0ab666f443a24f3cc984102265dcdd7c86bc903d5b2b9219ccfd1a413f5b054954914ad8aae2b3f9c77fc3bd3c17566dd79285f24c0ec915bdd0f6a6b45c99c5e3b9018b9e61ab6d33a256f9ad9258d987fc73942cbf04716c5e24983a94667648133a2579013028389c7b47ac20c77285aa156d89333428bad1a0b508e0dfd7bac1f48d5fa3b81313d00adce58bbecb348378aeb69c112565a7b6ba2dfb2c61918559cf740255e45164d505e610d87f31196438ecc7eef1a61cab55a3e2c8037d60fb090e100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001073b4a1eb8fe17b673990fa342e545e24dfb8685f4210b39223ef563a79db2c129ed5e43b8bd8aafe2a130c52a1cdf5b99ae1ffe96194dad9da08ea193ff17b6198b4a05c5b94ec13631b16713c23eb403f6b9e369c19b239ea2ebb612b32e73161fbbda3f40e71973b503a1395f71fa4fcb43b0ea068c3eccf4bd9aa8cb62bd018f2232c024a3d15bc3c9722138cecc5513aa81f29fbcd2a97989fe824f71473a8f50d944a9ac248e6770fcd64c081213cf506149cc2f953a004c56a9dcba680a84c77abefb37c669bbc12d0b6a7eb69e7d887607a84358e885c87f88098afb1a315b13c35185a7d6d5dd6d6938ea943a82c1f6189dfaf30b7f507eea06e1710835da4e579dfe8bda8459a51c1b43c8207f2641354401dc13412bad779521131bc000af4bb3f5d0225fb0f2d05d82c4cad7b4c068776e0da431d4e631d6afe91bebf8084e2c27e38019186c7bb801a99388d4aa03a4ab1c3b1d4c75f2ae8ea831dfef699cc11334256a51b70c962c8ba0906081987be73b25205bf87e9c57210c0fbc5522022c83ae635c6b0e421efd868aef1b16d230732b248f0f4b90e84d37b1d5bb083c15571301a3183bead41b1eb5bc4499c6d3d816e954b1e134aaf22021d23c1073689414fa1843893ff47e7247a15e7587c8147c7debc123e4a90e021405eab26fc6d428e2203a2ecae62a60f79a2e7a5ef26ae7f92a440c801b2c14f5e9ec431386bd2eaf5368a704e71d5b9c5659312634947f4aaff4f5b2581b15186484bd03fddb13a6ac062b99a7ec01d793066d24781c2bf7be0b5a3b51bf2201cb98d6fe299c6637d98221a9cc402d909e1643b44edea8a30c71ef24fb263f951ab541067b9b81a3ec7ea1adf3dbd337ecb893e70d5d55dc33992beef97630209b797e6d29c9f7e8926c58384c4ce180d56748f95b9c1b6e35f266df2cfc23edfb065a24470fc84700185e9a910b1727e51c9517b51dd673176457319063192a27015103d510a8827a90f59a17381873469330073218a7daa0cf7e324c9f1b0ca38c8833d206868983f400476bfcff0ee127b68ddb17477b3e56788b3ecc115b95c6235a3d610ebe714c86bf9f4ebf93b83a9b4414173c997cdd417b96d23d78bce8ae81b920ef4b7903d9c08cd872703c6b4f66d479273dd8917ae9845a0676ba9e7b3c07c5a72a7b38063045e1fd246ef22ab2302f7c955cc3e0dcdb3f1d27eaf4d7888d0a0d9a9d67c7dd73411d91d34dbba3131a66e9d47916d936d91462a1507f707ec51d5fbdd99de869bc2b6bd47576570de760085da7a8b8e12a316d243a37743924532886c296f1b75b7eb61926680886b0c713337c5c599abe30b9e705df3127c54212d7bd8edf76919ebe0c8defe0ee15971fcc51a9bc80f92dc5f034dea36a0cb2d675938b2ab53528a3716eb206e71d7c44abeeb4fe627318f1ca3e68c0bcf4c032ec309195131fc1a8ac23e6944121d9e83408db3f6c4a3c895a8a7aee43f0012314a91d01584c6bbdfe92ec5031c40d7df80bfafb94bc074cadecb23eadc033a99788919a86341dec11e186cb285baa7a8213110e7feb19f7e46777360d87f158535207543d165b7e494642329ee38be36be6b879180b085b61fb02349dbe19b984935f6fdf4a40f8d9c80b2cff9feba62f83ff926f9a0998eb32a389c0d74c23a60b6479c2a7e0a41fc4d57a9614d6393d06201679fc11a7c27fa5f4f5fcdf75148432691a24f42642d2a29faef2b49e55aee4184a750cf9dc975fb46b7656e0fab9563f4e8c37c4a5485865eff94e159c1b6fba166c3d8b94a4e41b774fcf776a635bc137890d98df0a5f2d1abdcd92fc98afec331a350cd650cdd9f4b99628027b95ee8daf4e4fe7878cedb817fa7825d0c505f2603651891a3141e4cc81635c07785493a066fa230855c255c36dc7360531e951d20b0fb98332dda0a19587a296b85f9ffae32ce9bfa7df549185c600ec3f5925791a63b835bb765beee4abbd64941f7edbf29bb92406f1b4408e5ce862a1d1558f1676a52a3a934b5f6074a8c55b5e273a513d242d8953521fa5465cdcfd29a9cb25ba85b701fe31c68b9001a0fb746fa1322688ce73db4c460d31588de18cb15311c92dff67b240aaab4bfb8d0e868423564221b0dadf19da4b19e4d23891a21e367e12dd6e679106257a7c79ba353e987d305f681a8367b0ab4a5aed2c6feae6011e2639dd83ca031ee96e66626b8a0d2b91c85ba68feb6123b7f43ef8c7babf2f712d9402cd551e2139b3bf60d1b084583955d2599440b2edcc989065d09091108ed26bfd32aae1dec64c409f2e4f7bca0d4329afb8b868ab60985c9a2f6f702d35e3e40e02a996a62082bce4187295524ae227a3fe582bd977680afd12d2d212ca1c1bf1fd566959df7d431be78d6acffbb6d4654ea0efbfb5c8e202ed2d2f220d7374460d4ff13ea28db0747a3cea34a29fd21810cd8873cd756ff15e1e171df28c8bb9f2b00ec15d724f8b85c315eda3f929f13c2b93255fbb7d0ea1e1ea2a4341455e428fb6392cc47246633092c29fed2265ba117310a8e955b6d6967115bcbebaa1bd7049c6d33b8db99ccf6d5fa6abd9a392e7a888844797492969902f712d9402cd551e2139b3bf60d1b084583955d2599440b2edcc989065d09091108ed26bfd32aae1dec64c409f2e4f7bca0d4329afb8b868ab60985c9a2f6f702d35e3e40e02a996a62082bce4187295524ae227a3fe582bd977680afd12d2d212ca1c1bf1fd566959df7d431be78d6acffbb6d4654ea0efbfb5c8e202ed2d2f220d7374460d4ff13ea28db0747a3cea34a29fd21810cd8873cd756ff15e1e171df28c8bb9f2b00ec15d724f8b85c315eda3f929f13c2b93255fbb7d0ea1e1ea2a4341455e428fb6392cc47246633092c29fed2265ba117310a8e955b6d6967115bcbebaa1bd7049c6d33b8db99ccf6d5fa6abd9a392e7a88884479749296990059566e6dec5172aa9a3d8a9347fd6550f6f1691a37f82eac53d94a6e7613a4813923ea18517c0e7c6fac4d117b9917c9f0728c9ec39dbb77de85b5c17f2c7f431db538e220d9050deb695a20721092fd516be72dcbf54583fa16ac019dccee5387802b35ef46d465536c7a5125bfe9b85eeefae2986b2a5c1676fce05f4e00023096f3065f532e86a57ac40df2077670a0043ede4ae3acb82a22513f9e11ce71d7fc490211442a89bda54e307c18b2d6a33e4d61c37a7bc14225d70a1b8807910a15e6790d8e4b82fe087135089323ffd067829bc177774d67da45e03ba2635208638785079210403ebcf053fb691039dc5feb64d5e55135b61c9172354fdb2209fd7b79a22778c407ba6c5dcfb5a08d6ca01be1025bc844dde9f67b13c1656140f7c93a4f215a82cf6beb8864c0e021c398fe6116c383d633ad8f237112c8922b7fca4a22d89f65ab4f8907d14f22b785ecca330a9a198d313d069cec501dd27014a61a3142c78ae69e53a0b31012aebadfa90dc35eb5536f4994919ec190c088f458aff2d588477a591b4c45f207b3dc0c3f7890e21d8944e3185fec1f6d533f5beab1bf3d1d1e3ce7389d5ea6fe81f97197ffcd963d9f30a96afe218580f22b7fca4a22d89f65ab4f8907d14f22b785ecca330a9a198d313d069cec501dd27014a61a3142c78ae69e53a0b31012aebadfa90dc35eb5536f4994919ec190c0d3f2980d086bfb2e58ba6ce5ac11b7bd0731a80dc6b6c793fe46e38ee655f9519e781dadf3ba4e72988916863b109d130a72d53323930274c4836483e1199181c29cf91f965479c756d730c77c70021fb3acc627abea6dad9ce7d0b1124fff70b860f8a3d66928e9fd8c64e2d8d27bf57cd0b398b7edf31aff5790db6eb96150000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000123f35faee494ebb4c59eafb62b0df636b312cc70a4e5329719ddbaad43bbb9b80583766f430c6f91c97bc97657653637e79c84d16fce01910ad73a1d7420d32527cc9f3aebff16a8c5b46486ef959fd8fa21a285c505f467355b3e0dbb9d3c982e8d96db2821d25e24703ae370b04a39bdf60e36cf5467872870ce76b50a5dce0e2fa435410a8c1c4626c3a2399ef4f3e7f49b00809672c0cc797ef0bbe4f46b0eb6584f1bee2e847cf46d0e0f28826524128b718e01e1f12d80d3bd64a881b509c01fba9adadfb72f80b0fb0ecd6d8df38b165dd837e7db926352d9b2459bf72a99211336806a80603683b6e59d9899be1bbd0135526d57afb817c5dafcaec8367dc56b395f205f463ff9fdcd89b715f5dfba6fbb54b5581e3225ec18afb8c62f02aa3f189dddffcb605bcd45d8ec26b3cd713922b962ab1546fb27f9d8dbb70ee7784cb73aa5746ac9b0fc196c03caedce74f78ea31fe717a3ba8f94f1d9002efb4e132456ac608b2b0bd2e4dc1326976b07b3fadd6fcc9660d1c7612bd70c343726fe838f3a3c9c765b38f6f28559aeeeed73492af3ac96c6f32a36558f0b242d9d391304f380882e63c6cf4eda0cf23ddba9061221f4117f214bce80dd540c9f6c9ece2744ed3ace154f099e84203e1b8f23d10b36e131086e296ac985a326d44e92cdecb938d560ff7b2ae6f49c238ec90baf2661430860cbe493af63c71a64bf86d4425f7de5ec5950b2b5d48c28c01230b9761773a24575911a56b872177a79d6111fb1236952250654d0c6bf71b4862ebd290fb13743ce91e77c56be0f84e56d31327343b976b067f1457edcb90ddf61741850d6e21df900256d2a6419d3f9e52edbd3c7f83aa742c64ec7abde3893a2f3661c3ec681f8d024bacba606be0542bfeff4c62143ea64dbf81858fccf8a615bb55fa06fe6faee822718c82534e42e71395236f660fbe71479c08c79ce06ca0ae084dde004234fec323088058bf245d9276a6979300a8cf8100285ade835ab97c030243d0f1b9c263f6dce0cd23ee40190f5eefd890d85d2c5f546996e1a4cd42538feb7f1bdd7f8980fc02ad26bd5eaa123f4af116900287b4da58571bc2e4071bd64f684d2525384d1ee21c271db5433c0a973724a26a3532ce46013147b7ce371b52f086c851dd62dd238e3d4a1730e3b62fa6f6b4c94628d6a35ae06903b091f56ae8d40d4dd0b8b123bae78c33ad4e44922ec766fbaf320ca1c1042048e62823f552e69b209fc018c3b27e6c44bd2a53cf48d9c7f56201f125b3024f0a3c68c3f6bc4830f874568ca279dde32f0eed025ecc50fd4dc654ef1f63f06e970c170ef01df318220075f821adfcc5b4692853c651d8f926b2c7154a9cd16d2ccb1d9c1cf56d75b06a2815c1426daa572bc47f0c86027fc0d683f9cc28adc49d864169d6297053cb989bef029b837c61533b35147be518f7a1ec5ac20c1b869795298af7fcb4525316fa069269f5af4a904c6931da7efdb70da7285e27d11a086095a60c830d468ed87a10b2dc71069b5708d3f6d841adbe0745f1e252c202d24425afe18442fee071ed5b73cf8c3567d099d289397d68a11b8add8c9e74261bc7cc1a3179d7c42796eb8e802e737223015faf51bef402211804a8826f9d4745a168c00bc2060d8948a086e2d1de66acd4d22e67f2343647b35aade163c0fc427d9b278f936ffe1214b6a883badafd4e75fe8f6fde0ec1bb0158a418eab6b2cd2ae4c4e5eab957d28d12179287616dbbe7e6493eb0fd9424bf29484c88ce2ecb09ca703b1604c7ca348b86204b2b95241c7e60e94cc491ef52a9c905811ffa0841ff0783fb38fce7f0036d11c1d40f722ec39fc3bcdbe21dc7fd9cef439a940d0787ed87a4a52789dd73a221e26a207066cade8de3d1db06f90a14ab79673d49433453328f60366d015184c0e6aa11a8349f0a7ee8602c0b55364f8831bcd8d526766f6300a3654f213532b0f0dbccd4776c81a75a28c5765ccfeac8d5c22177a88ee05de350f41900b5b4d058522493228b84de2db5f6e1424cde7fcd9c372c58c179fc9f41e5525b593312027f6ecbb9f2a9ac0568b6fc779dfb771ee58979de0a61c0c0f2a5dd68adb541c8239e652a81b4de18c39dd0ccd5439d4fb63ebf9f0773ea5fdebe8f614ec93288c9e5e5b12fd993aec4254bdcbb3839978078453a017675330b60cc5fb60570447a26efa6892213635e4d73e9772c98cd6028fa21472a0f3cbe54a5c4890ca0070e339f39258d62d9cfeedc219a1265b0a9daaed5ad56f7c18299e8f753a533f8f1cc60c6da729d26301123de65ed9c73bfb511bf223ac1d15074e708ac5ae02347021c1dbbc2ee410faa4ca8025bfc7351456a2c62b2d6c78d018cd4a239f3dcb8fde3e2443d11bef055b357fda405b1184a56686cdee2cb460d432b5dc620b0630a8c94aacea7454e537f480bcbee40965b12dded7e31e5c107c0272b21b34f9cf5736b553158bab1ac80b7f43413e3d334adb6e21387ad12070fd8d4de6371ef34bee75609445a87a17c683afba742efc75e55a376f97cc526c0c3d7a8708e10cb4118a9f6bba5785e8397c5045ae179c8623f2c1ac0160de80f3c2857a0070e339f39258d62d9cfeedc219a1265b0a9daaed5ad56f7c18299e8f753a533f8f1cc60c6da729d26301123de65ed9c73bfb511bf223ac1d15074e708ac5ae02347021c1dbbc2ee410faa4ca8025bfc7351456a2c62b2d6c78d018cd4a239f3dcb8fde3e2443d11bef055b357fda405b1184a56686cdee2cb460d432b5dc620b0630a8c94aacea7454e537f480bcbee40965b12dded7e31e5c107c0272b21b34f9cf5736b553158bab1ac80b7f43413e3d334adb6e21387ad12070fd8d4de6371ef34bee75609445a87a17c683afba742efc75e55a376f97cc526c0c3d7a8708e10cb4118a9f6bba5785e8397c5045ae179c8623f2c1ac0160de80f3c2857a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001289653772664e5b0687671b6bf39d7359fb26e826dba5e1eb38a7e5233ce8de93ec6491753a6df9dd49388db1f1753ffdc69a266f0748b95abf20a8f65cc98142b1f7ac0060c8f935b9a328ffd8580f8af3732d9b1e774dae76956e5bf07120d155ff29f7d0992088c9b20b255a58866102fb254c5b20f82ff84bbfa157893462457c2be8825a49fce7d2fe697a07c834e1498a2ff2636a5e653e8b5efc346403ab7e0e2a2ad5b030ce3f960e10aa3dc9233db165cd5c5ba88137213ea653f0810fda5aba2d75ab166e0cca6c8c4ed479483bd7cd4f9db3ac2fdf7d7adb1c9500bf2d5e86ba4e45091aad8653583b89ae65d2931d7268adfe5cce3309bb9cccd083cbeec5e36de6f1a6470030880bdef9f26456b706a217813fb8bf4742020f4209b9c6de16feadea3cbdc9be6aa583c22765a600d194cd0186885816517bb6f3ce885e56bcbb6cefd35e6cc844861fb57e89766dc3b1a33201c82801f92f9d2337bf87b75540bbc0106c7074996ae1f14c1a5dbf89ef0941ef4cb729f7be01b09157e2d89205913d660f9152e494cb27b7a42b1292441c93f9c124aafcbf12c31ea65c4e9e714558acd2928da3d3675dfc9859551c535c081a81e79f163baf21513d7bf8fc2099863b97b5c05af50d4ca71eb13b6ccb5c815bd2bd83f4a0ff0293ff13332dbbb46d5613ec2484b2be2db4b22b31fce600d7d8f476f1d7526ec03ad1481b1a3c72c5736c382b3c04bcb2d1fb76fe935e37c3e130e70a50e6eca344b100f9ffff50223345ab458fcb028dd259864c2b9297ebcec62b5e8fe033f313a4b3154e4069adaecd8d03bf1b05e4e84b2c8fe6d28ff02f50c48bc01ea2c28753404c226483eaa05bd14aa4c69bbe15d937dbd2bfd61cf65df36f3b6f47634b1b6989ff53115569a27bcaf2df5a5ce24e1fd6a1de71ab52215d2492604b1202d2bc1ea579926677fd525d466ab4e90526da65e7975ae2458c0d59db6d06c104124bf579fa64ae96db0a0d5cf1eb4abfb3af7101b4ba1f2b8f9f85980a51119b0a870a9efa9b32e0ed0d073789fe0d4814ad6c0fbffa7dbb9ef4d4d0cd98d0e8ec97b0027960bbecd21346c6defe5f660b38dbe05ec072b7f145833b24d57151f0f65216996636648e72ccc7caf96813cb94c3a72e99654095c7c0210c1d03ac0c241ab7743d248a5d6c07fdb76b9e9fe2f62eca4a6e137c192078f1a9f0c3a60ca090e2aef847602f31970a055785c21fdddf5b8e4882af5d6baf7a2abe4243e807054c24a4e5c8590d5fb6c0ffe7ccd5129829c67636e5559755d69cdc434a11a37bf8651ea7467328346742b24cadd210bf96eb351dc21d7d55481960d0d8ef9df286fc3a7e42f5867cce8e2b201afc1f47eeaa928bf90c13a0608fdb915de826447ab5db14dc07da870987d8725078f6048ff976c83c95bd98fdf23a928695493d7ff52efb78cdb88959f994c0c0b74c13a8a00ef1974a07096a70bf42980d9b72f734e4ec0c9e0dbbf3ffac26f3bdca8db19d036caf234f2ac0f96882c89b461ec1f50ef1b247777597ae7273f9093e8c42f90f36a1a3b65b759e55f155acaa9bffb52c7acf71a95f8df3508239426b68deda949f5c777496e2b71702fb4bb451a4cef3393a7280e63deda913b28199025ac307be0695922dc3a83761f69768a3499de67274e501cc7bdb52254099a24420b67dc27a58158b87506ea1f69768a3499de67274e501cc7bdb52254099a24420b67dc27a58158b87506ea0f1e31cf4ee6cd9abaf5782b2b9c8fb36ceb1ab85e6a9f3c6ee1a98e94af8a5e2fb4bb451a4cef3393a7280e63deda913b28199025ac307be0695922dc3a83770f1e31cf4ee6cd9abaf5782b2b9c8fb36ceb1ab85e6a9f3c6ee1a98e94af8a5f0f1e31cf4ee6cd9abaf5782b2b9c8fb36ceb1ab85e6a9f3c6ee1a98e94af8a5f06f88f71dc0d453484c90c325d8bfcfbf95bdb026c9a3aec927fbda982cccc1906f88f71dc0d453484c90c325d8bfcfbf95bdb026c9a3aec927fbda982cccc193ed2ed146933bcce4e9ca0398f7b6a44a81334488416cfb84f4b02b170ea0dd42e87a8598380ac01e243c847f35a44d5c0f4b4dca076071896872ae74d24914800000000000000000000000000000000000000000000000000000000000000001e3c639e9dcd9b3575eaf05657391f66d9d63570bcd53e78ddc3531d295f14bc00000000000000000000000000000000000000000000000000000000000000000c904640edf19166641db2c1117917b8ef2bca0f0943cdd57cd144a5eb855867336fb9bf120e6e999be24d3eee86e847331aceed00092b461c5bec47147aa79a3ed15f44a5b7d6fff4947dc5575d769cabdaf24b2e53052b7016573d999aba03012ea0bb5a4829000b6b823aa8a28963766ba6b0daf9f3f02916d9af666545fe3a16dc573c9732ffc6e674dab4d3510ed22c5787c26b356acbbaf0800005a20b05e923a8c368cd0039198b254b2caef1501a417446e1c3b0cd72406cfffa5df622724db42ef3fefee28048458820954991c351b6a6e426a795f1eecc001c2a331d8db24bd10c01011d7fb7ba77df6ab6908347456268d274033b4220ffe3d5ce0c904640edf19166641db2c1117917b8ef2bca0f0943cdd57cd144a5eb855867336fb9bf120e6e999be24d3eee86e847331aceed00092b461c5bec47147aa79a3ed15f44a5b7d6fff4947dc5575d769cabdaf24b2e53052b7016573d999aba03012ea0bb5a4829000b6b823aa8a28963766ba6b0daf9f3f02916d9af666545fe3a16dc573c9732ffc6e674dab4d3510ed22c5787c26b356acbbaf0800005a20b05e923a8c368cd0039198b254b2caef1501a417446e1c3b0cd72406cfffa5df622724db42ef3fefee28048458820954991c351b6a6e426a795f1eecc001c2a331d8db24bd10c01011d7fb7ba77df6ab6908347456268d274033b4220ffe3d5ce154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f43ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c7941dff3c5197fd00d1d0a0de7643244f7892ab4a9b26b3f4238af227929b22c07334ab22fea15d89c74a4ca0d1cbdd19b18c8dc4699b5e6d44a70b9e363033d81225bcbf352e713ef1b86fb85c844fefc903d503fdcb484921d323ce1fc3a082f81012df7cabe39036022d724c01bf03b4c3f033f62c418be42a9a3df04001865d32ffb8a81db842c764cfda08d979a7863a7de0149f6ce6ddf6974988ff4d13213e4ff5f0fa47d4f844d769855072f649123cad26882535aeeba8d19022022d051fd3f0470b10d600d0e6b73732ca85c61cc8769d3057e0f6bb7b8e9628d159fc222c35e3ef570b6bd331848989afdfca2c62d1ac0492d2f8b11ff463519b299202a6feb09641672abc1339ef443b8b25d7bb5f37c40752bf3a4a4be1d8bc1cd522d9047da94740f3a6eecb0b7623fd50ea2b88a1afb2b8cd30ae977ec6ccee220cb99cdc83ab47e449bbf3ed0a71ef1707ed7dd48d4e3ee1cf1f627aa733c79b0c98fe0eed84de357198da4b19858960dce82056edc9df43dc0f34fb85a4605d02a6feb09641672abc1339ef443b8b25d7bb5f37c40752bf3a4a4be1d8bc1cd522d9047da94740f3a6eecb0b7623fd50ea2b88a1afb2b8cd30ae977ec6ccee220065ae6aed6f15d7f50605401f337c3ff7ca9d27764389f52364064fbd2c3f80251001d0a425157b25743a0b0d071bc241473e526eff30792980e044ff103a4d16fdb19c15198228b4de779421645f9d26bdf93adc95a6bdc50bafffc3ad071c04479d5156cf78522038f25f90e52be2b7d28136f6e9ef9aec6a11b7fc317c0500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001388b0333da03374f9da2acd2136f4b7d88bdd35749e15808a64704e43de754dd090a3a3bbb5eb5167928ae828b166e81370a7342fad5731a55ed33d1784705a92781f343ec76148b7454891fe9444c8a2e10f7f88790d40cbf34dda89d33ba9c2a8bc53887742d71a89bbc3c2194748549444007da46c8d5b134fe54ebca754b2dc0f5389654a41d09d968af293434e6ffc97db65c5a227c55e42f102340ad1010fc59263e01be589e125af93ec1f1c3972d08b02328c0ae07034c80255793a30884825c2cb56eb151660b550b8f95bd0d8cf94c5f65c7c953fc5a4aa8edb38639efcdb6fad468b4d12c945ad611a77e893ce9f2893b1274855a00cb4f23341b1d71f4d444d4694ef37c68aa87ff05801edd71f131328c1d068557f90dbfa88c26358d6ea201b5eea34c3705aa8eedd7be17e2bb6eada4bdc3e1d74e7f2f718a361b4d2604e4a24b415d17caa58b57cdcac84f0e37b241c066e78854c1d556e92dee9c42126f2a104a4f2eb7ece763ffe970d9937c434ed2892491ce9cca07fe21490ef65ffbd3c61aaa38b589fe18945f7135c81cda5debffc16eeade02b3cd15db30b5e9c254b250319879409e41139c81fe75efe74059545246d5fc7611452665d50cb3613833ce7969d425a2a156c92b7eae6c9daa08288d710400f5f8b61b8ed75ead34786034e9bcf00d38da5404d971f53414a3804dd9b46036775bcd0a56bafb3a3a667f7a0963272665bc4c37d3d6ff8092479208aea2bab54f37822e94ef99e76160d9d1b049908fd9e62ad2df6a1fd8e8192b1845f95b0d84774c27d9d15b3176866b5aad640722526738505b412544167463038fb78b2268aece050bc8f9238ccfaf7eb890774fb55ef0aca46e6cd3d7e9ca9b6b6b9ee5db2da101c563cb9d9a7f1e8ef0721213ec32605d7698d7c57faa3213f1281583572bd0280608f5aadd3b022e6884004de6d2c362e8c01c0db39f68f515a154e98f7ef0229109c2dec6cf3c7c15ae9908d954724e57fb053cb2f3a0210007a0996d799a00a5463efa60612193b39e2ac53aa1810b1edd58ff876fa9d57500bd7c4430d403c712f50e41686dbc49641ef0352cd8fde7ad7b7ca0b684e1fe6b81edaa032423ab2bdc36a8e3d57bb79687afe480ba7358a9765291b394e7829d659fa45d983fc5a0bde5715a43764839499273851d7073fd0b29e1323e7a1cf2f508f6c4f80fbaa6ea9ff1f357b9943eda225518dd7d87e96820de245b2454ff461e121fbc283a217875bfd1e6bb1527dc9ca3ec5c8a2f12607891d4fa54fad09c2910747636acdf27bdf4abd5dc2877a1f085c40065d250478e696df36b71b5aaf079da082c241ac8755dcb5292471bd978ee86f1e081c8dc66437d2f66712f205d83898d2375b40379044b8be5958152ec34aeb2fdd41f803655dff3b4b9af032292711c0d3d386d3d957295b22bad96740932be953066cf8b4e95ebb78dca94d3b089ba30438fbbe1ea021c9361409083e9f51e832431ea376c5ae6b12d085922707fcd14307e53f0b7ea141f98243a2f8f90f05b6d6d867547cb251b6e75cb3c2a5c423e36dd4297da6a9c7436a8cbe3b444203ee8f681e12ceb49965b626839b1ae693b919521508d3d2e78d114072fceaa74b06e5a91ec5d064d0b46d03a86d6071d050736f42d6d95b7a31d50e66fb2e025384890142e2e478f7d8ec2b48d80121f3ae316041a4c37d4506da396f0d24d29eeed488315df43666f999553f8bbe81001b62b47c621ad369a4afa5ebddea27ff5e7bf7ac9a8ebf63610e2dc3c3d769d3913074b74a765a7082b2753b76fc74a4299ffe56f7b17436da3dd5c74615bc72cb932a1d85dda76d4e84cedfb2401ab90786ce997a6379ebccbeab56f84fb83137841e8ff5a77846dcf3dbde9caa99680aa61f87d3d0df09380da628bba66e00d90e455bd1e552c2ff431e72b51f4eb82a2de11dff4ed7748d07426d32879713a4e20230346c367e619985be1283b95eef2bc166deae71d93d7d2d668c93218084ce7b567f57f365af0c8fe030243d7cebe7af6320b94ea5d48eb7d72a1a7d1207f44e8c2548ceae32a983a06f9c873fac23fdb58f23bacdb077b785a579df61e37dd9388e52541fbd63823b52d5694ef13edce0a8ba60b3976b9023869ed82056db320d4f6d4e12994e576f3dd8375de4f49fc044e4776a603639e755c50a21cec7a6c4ef5caa07973ac1b16f04eb815f80fcdd5e0db38ebb26ac0420896263188e3736946f3bf517c077eb5300c2b271757a63931e99ac339705544006eeb0e771c8c96b90c40ae83f8814acff3d4fb2f4155d01b0f80d5f3c097bbff911637ac71410e62c2bc976c257989f03cd75ca0eb4b0212a4b304979ee354022a9408538ebef19d3d436893da86760fc328c5a5adb1073a546894959209abfdd56d165e364547edcdaef51cbb5fb1b13034460a3486e5295310b24156bca40ad4e029a1c9bab81232510ae344a04e4ecfcbdc3c64752423a60ae6ebda305bf52b212fd70f5a67a5046ac98fa8de7875f1053bec6da67081a637e21980c23436285f1028f0a5985afb9536705721878a0efae65a2b5598cb52e3b713b02acbc9d7a23188e3736946f3bf517c077eb5300c2b271757a63931e99ac339705544006eeb0e771c8c96b90c40ae83f8814acff3d4fb2f4155d01b0f80d5f3c097bbff911637ac71410e62c2bc976c257989f03cd75ca0eb4b0212a4b304979ee354022a9408538ebef19d3d436893da86760fc328c5a5adb1073a546894959209abfdd56d165e364547edcdaef51cbb5fb1b13034460a3486e5295310b24156bca40ad4e029a1c9bab81232510ae344a04e4ecfcbdc3c64752423a60ae6ebda305bf52b212fd70f5a67a5046ac98fa8de7875f1053bec6da67081a637e21980c23436285f1028f0a5985afb9536705721878a0efae65a2b5598cb52e3b713b02acbc9d7a20427665ed95b17a0576af512ebc575a225cca770747fc11a85e3405b33ad6bb002137e04dacf9afbc347f2bf066d88f624070fedb8de8410940ab528ab8fc49c04c09948cca559d1731975a2d65c2fb3ad8ef33c857994f58189ceda422efc6c022cb81543f289dc158df769a1ccf461d4b1a742f415f2e8c3e17fe87eafe17a3b34304bda9f35e9ae3a465520952b043317ea89000a964bfcae2b94c9360dc91d4a164b68075b693e2db439bd86b92efd5b5b35359cf24326474ea04c03f18c20afdf35e898ca39b550f3d9fbcb59cd2f7006a49fe1a6e7cdb576ce47a9bc4d1646089be80432ccfdda62c8eec2e8da595ac4c7875b4fe6b063e1a56fdaff6126c27098218a30c011033a0ba7b53d15c7aad1d58e7f50088459cf9ec915a2d808c3125accc5382298d1a2f142f6d8ce841ad42a618144605589dad1893754662de5896202cb8410016aef80f8a46fc1e77d4ccf2768976871259c95e61722e80b6596dce665c4ad8cbc22e9703f3cbbe60e0082df02448ca0a85a63a0c49c5e3718005859ff8e8e357b954a3dde5aaa4eeafe4f0f53a30b91c021b78a2397e63bbfc9e5e13ddb28272a15d757c582a8298de1cb5c5882224140fbdbd5c059ec2de5896202cb8410016aef80f8a46fc1e77d4ccf2768976871259c95e61722e80b6596dce665c4ad8cbc22e9703f3cbbe60e0082df02448ca0a85a63a0c49c5e04ada1a618404a7f8ef455a4ae015b691552321b7e85bfc2dcbcc69d6c2ea32e322204d59cb6ddbc607a8f33211f7e32a5ad37bd025bd16bc602b2a9187f278c351347fa588ab24938ae2c698ac6c65b1c430e5d171147f694b99f53db294e0f1a3aa5189f130745a328b2fd2275f773ace9083d962ad8ab97ce233abebe7bff00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001019df7293d86a46a9264394f565f5daca9ba9b71f72bef5bde9835ef9e5493f02d190ba5382f6c31778815364522878224af4161e59587610263c747f7fd22e90f53f3b7df9db111a06d0629ea0903e971e8f05ba76838550a4e630ea9ce80023f499838a660f8bfa5b754436e124ec6bbff3f4ea4faf897a26f2a3e7a83413727b96a39d5ac2857d0137654c0927241959a3c49aac98813b66cb0871b3cf9ed1512f8cf9db84d3dac121ab81241c1e89d400f43d37f1fff62741238cee89f6627b72e57645ee9fc07f35979967c5c553f443f00833d5013081fc400d03a20da1756c0456371aaa19faa6b2c4145e5cfd2b06f23eb4a4377d5162165e86db16911db4fbe018e220f8bc8cfc43d91387aafeba8d04123dd0c2684e5fe981912fe03b94034b93f551f6d63c77c9b34e6953aeb90b3adce0fc70db5ed94dd9cb33e0699fb87f635069e39b74702fa17b2afe52b59e8a0ec022662eb1c521b0a2e0a3979d00a5028f20106176c8bfe3768e282061588c9c28ab0e3576b2f1e6bfef60305451768b2cb1ed83ef987331dadc85752bfa41f6a98601da057b34c2daa5d024c6407807018ffe6d7c504bd39fdd28053a9a1d2830f4a5d1780423638b59814446321293e8b059e85cc7369635e0476ce54ff670e09a4d5cf03bad67ab7430bd01fb1e6028d1cba542432c0d7c1db0c18e09488f29fa5c943a820a2224aae1f5852e3f49676f5ef3448e458b96945e3ccd7489bc45d61f5d28571d88cd8621b031bb9a38b34a04d462b45801967f78893de715d00fe35f72717e63e7df4230d6200acfd3630a96bde871e12cff4318153054afacf68b3e4972bbade3e6dbf0e467bc2002fc5173381483533d2039445872ce4c305f4caf221d4853e94a85928c92bffad1a947f3d0a5e4143ec1daa0bef4b826b5f5f89b23273f431c3ad581c64a1a762721cd2187580eccdad6197c8ca3cfabd35590be48671db8e2429eb3053bdee9e38389a62c631c803379ea095486b4bfcde182583f3d51c552b5f0d2ed6df01d9c106cb987ab9f77e8734ee9dcabfdf5828d04777fd2a21d02b999a239956e1a43bad45c34b5358c2b9b05469651f0a604e7ddec26cf76834e29c5a2d1eb9e713dfd7ac2f2325a0cb80d1fc9b4fd4f2a7912bf54b035ad75e7e86030a87ce3683bf8473f2eb587f3b7d775bc82afe4334d93fe583d8c13a2abcfbe72dcb6cb14e570ef6fb373af55de656c1a5c27acf5602b4a0d8da0c1aa6404a380b7f720a36b7907a627016a7a08c6ad7f20968a0c0800138f619004c73e51638196b50383f43afe50b72f7103c1cf1ba31e3178e6b05f13db06bb27db2ee23471f4dce3ea1059604d7ad61f766815ea8b528e181838f6d9c9329f980718d3a4408c0b6b3250178abda63833769c70c608b9b6c89cfc1d3a115fb17b0212d605621686c92f4fecc7d748db702827c0df00def8d67c4f5d249fab3bf45a76ef27005e056b4864cbb1993ba900072aafda82edef208b391c8be318e86d5cc4dbcc90c9a7e42e462d5fe34a56f3a7b42953fd08d0561f0cc43dac167ab0d35f397e50935d0b476fd0fcf7d1134015c5a27168a1edfd11b9cee2a4bb92939deb8cabf053f7bb6901504cde120132749bfa8fdfcf70b39283cdcb001ee1f3a65ed3081120c59f6a59e257d1e20b1732c3267d4c67d0aed60eb117b5598b9d75a9728143a63f089841ff0d54ffbca7481451fe2b7e8fb01d3c3aeb827c871ffbe3482b90f74329b4d5325dfb73890ff58581c798e096c11be2c93ea297f247390e004a4069d7aa826f5194f6a21b49116fa425f8dc4da06df2f922c28c0c442b34cd49015ac91e7c59ea0f5281005a2fe4295af43de58e5c767b346c60ba786b46b362f057e9bdd8aa14d5d5ae83586607880b97a41598eb06e8ccf9656d60886f2dc3e23d5f788866649ef4be8031c0d1aaae2643d18467026a2daae5c6c317f71b6330d3a1c991e86858859bedd2f106139ed1204d31762f5f79815ce23aa22a2a09a20a9ea1781f8e67dc84e15f82690bf9dca3fe613cd25d949e7331ede799fa191365678c8b59610bfdb97a168107aa69b9e5aa53176fc22f09292fde1354a53e600f6bed4653ed4182724ecf083e647df363f9a27b425e2c09c280492a067a6290934a9536e82efa526fcb10a2a27da202f5d55a966f804776523defed5c67961201ce8617718e9d1d43c8c2cdde6472f628a18b6d71b7db08fc1db134b0e10871f882159992cfd1697f3db5bc2631c550398512da311d8303775b461269acfc62077dea666d302e9680c24a43d9ce3ab1eae47ce663b20eb61b77c8bd965303b1da8a6bffde0f170f7c348cacbef8da8cd6c63ec1cbf46b9e2f2240bc1060edc22575940021f0e8f083cb7353410725754da350fec8db261b63b0ce13ef9f125144b41bff564b734d6d06bf5fbadc44bbe90c1a47d226f6a3c605260c51e4a4a2bb4be400a9b48cb292f940a04523bb463b5d7578c2a89b15cccde8c3ae1b5b7257848bfcaf7940832121bcdea64d57a968d2f3a685f33f794b46af6d99773711a87b74035086bf7cdede432159b2a858bb969c1a0edc5240478c5f626688c901f882159992cfd1697f3db5bc2631c550398512da311d8303775b461269acfc62077dea666d302e9680c24a43d9ce3ab1eae47ce663b20eb61b77c8bd965303b1da8a6bffde0f170f7c348cacbef8da8cd6c63ec1cbf46b9e2f2240bc1060edc22575940021f0e8f083cb7353410725754da350fec8db261b63b0ce13ef9f125144b41bff564b734d6d06bf5fbadc44bbe90c1a47d226f6a3c605260c51e4a4a2bb4be400a9b48cb292f940a04523bb463b5d7578c2a89b15cccde8c3ae1b5b7257848bfcaf7940832121bcdea64d57a968d2f3a685f33f794b46af6d99773711a87b74035086bf7cdede432159b2a858bb969c1a0edc5240478c5f626688c901ec72c0c20573b5141e5d40e17d7293f3bb25cd5f92b26d68aa789660ac49eba06b8d7221f316ccd211c30eca2885f3786348b037a8ee4b5e05159fa94c46c3c154726d1e457b749e5a32d9cb269c17087add08c554ac6163f1ba6dfbda977f43ebbdef2711d9803441a84e31a9d5ceddb174d378971a5aeaf3f8ea84a27c7942516c5e8bd23c856c28b99e4ae16221700e7e1896d964f9b380b182fedeb9e46175df52e034c121156ab055e4ceb7ea10a6bb7e6078749c128fdcb7b731e63520ad2f9faadc80735e9ba393f6b1bff4e20561f7e5b92c0ef278f8683fc176aac34beb7ce0aed491ae91a54369fdd516fbbeda28747ae2e8713b31280277e27f7275d49c4a7f096e45e097e735f41461e1bdfefdf16d904f59a52f0ab5535ea900681d319abe950e3c5d7f06d93ddf9efee2466ed5d76c58c33b9131e4a7f718b2df270d063540c9307d61fdef29ac5d7ee81b9fa9d701126dda50a019c6f28e205e026ecce537168507ca95e76fd2a2956b39553733afa8dfbbddb00f0dff4210bf1ad21fb510d64d876fe5535bf15505ee66b99bad70c2ecf6a00a73791e9543a8b49eb6fb0fb2f9ac94a3042da43dae34159bd0e9967d2a2c979372113cc332df270d063540c9307d61fdef29ac5d7ee81b9fa9d701126dda50a019c6f28e205e026ecce537168507ca95e76fd2a2956b39553733afa8dfbbddb00f0dff4213bbc4b99a61a5f56e1525410224e4f94e185efb9a747317b6c9c9c73f92f4fdb2a041cd08caaa25bf08632438fa0c85c847da06bc85fd999bfb0940ae71424321d74a6b0997513bcbcd7fc5e7be3c2c34d6ad8aac3f0a7ef8a1712044728185904c07cd059bfc85e2e372938310cf5e5df5f1ef20e3a0a4ad0e4a04bfa255d4a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013dbe423988e83108825bbfb00d1d7e04d63f21bb6be9f947808b21ffb281bee0344c53aee03fad78657129b6293499814b1a137ecb7ff92367fc8b00aeff05f42a21bd0f8d8bb623ae50c387e3706d14db9e16fc98071761e743cea4a1260381058a33cf44896784d9faaf2135b95318fe18d780c9c110a3bde2ea5a333f4f361117c3207b9a6c83fab3ee0c9c50c91e75780ebccbdc9d1586ace01321d15fa31d8a07f3a6627948736b3ff171e57cd2898702c8c51620f7c9be6f8f390a3733280481541c55f34f239586115503d05ea246efab8b8e66dee49f4648cdeb815d322f4778a6a77669a0c5d789b556463650638e06adaf5308aa08f6cc35ad08df13b9a5af8944e1f6562b96dc74f416105fb1635dabed7662256983764913674235fb3dfa78ab3502f6e4c0f1155a6b378eefbc6e579e64f1d08f3d6dbfd5dbdd14af0b179144eda5f2fb61d7939f5a9752d1a3a48d186a2c1df77709168aaff9047875de77d872aa6adcc4ccc01eaf5f9bd14914aabf352c135dfd0ef8da202629038e412dc750d36d540171ef42f75254ecac8008f7875ae8213b0a2952bad4091107fca0bcc5f6097ee777fd92ee355ab6835c1ee4e33ae2dc69ba9771835b308049890f6c5690c6693cf100414ad30cdbe30a1b1464eb50fe7734f6b7400629f2ce5059dc187abbe89889691ec1df7448da7fca61bad36e9def0a6174f1ca2c063842be9d3725b194f3128dfc319d20ff0b7132757a620edd843074eb15bf035eaaa1c830ca3392470a62b12a47b6aa83ed6b17df599b8015315e7d0538bb2093c59540a049729492710b9f73dd4af81d04896cadd3eb23ba4813a26b64cb26b72e8e7164881809f003bf747f53a6f50e25bc3ed0e30e2eaf6a8163188551061fe83987fea42973c39d3da8b853c072d13cae1163fe8e3ec4f8bb13e4679c22928c2137b1cbaf59d5dcce696c1118ba8f889f4dbd78de7f34e64dbbe1b0fc2fe79df98b9c3b8a7bade06993e4501e21849aed85b22cc7106d9ff00b6ef01b2398c2029fe94c24bad613a1d93b6b5bfd58ffe68b4b3cbefac10f8e738077d026aadaf8ae1463ce0128c043f66320f6455870deb7bf894ea50f2831e92744312caf502139232681abe5cf3e88336fe46f70ab44b1841d6b219583990be24b7e36cdc9fe12645d9f7cb97eb1e3afb6d263f107d037c742c12e20c8de0557078537e46a736f650af7a720a85dd8792e48bb59b905f597d72d2857c3b90c575f88306fa95ad82e12ea4c19046d17cf682f100d31a27449acb2ce0a2e7fabfe454b0cbb12a2343bbd1501d2a8232690055d22e4e0b8b7c91ee013dcdaeca68e10b111537385064f500381dd00d8db2b9f4db2cd63990b2586d71cd7c15a6d0b1eb43ac241825d38efd3f7a209fe69c5d3a8b0a8547610e8c24d38ea0d12708b5ca722e65f38aa8c400aac74ed2e0881b819cac6f6aa5616617620f1f79eebd1333633679df7710a264965f9d32f063901b0c08f20b9d922e85effd78948859779172c3c2de11017bc590139a8564fd00b5b9a36c38cbbcc4a8243504727927731192808df58c67a6129209acc0febf49879978f56a2598549d8ad17a1a8cdbc5f3d1e30dbc7539d21bd602e2791101b81e45a5387205db23a1bc163ab92adbf6c38147863f452cf5e179a900161114160eae746155c53e5e14e5764b2f31a224a900a1c95bd003036102564fd6a1a82b6cd4986013abc63bfc12e3a321c7b94d758082476d8aa111672b1ada2cb6871e96766058162fab95baa1f933525df3168fa2642afb24b3d3ecef0e8ea43bbe8deafe86c8c8ae241ad351dbcdf23e5f88e603cb1f103298c7aa9f4caf6788c2f6c624e2f2cfc627ce9894fd259222caa6864152d164bdd8407649e9eb8a8d0c253a3f809dd2455ca5d198568884d3e33a5e30b67ed239e97f3e9f78278c7947f2824454679ab5a4f9ba7362bcc6c972060371e46a7d6efd8b59a59af607045ff87be3ea0bbf7a7cf285a11d827dedb56bda00070706616914e863b3f4731f6d9a4a38963ca591b59c4bc1e6adb9ac4473cbe0ffaa089f39661850b64e177d1624015be776ebcfee53d681b4ff904f56594413c94522dccb83e1c8832f295f8b881ff6523229feb1ca0d9f49b3753cbb3efd43b78d10828ce58190f0beeeab42ed89e73dc8af01dbc3b2edf624596a874e6160bc171745c8c1879cf5d1c1b2eaef611a5b151ab3629533595471e9442feb6200145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a6034065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f0139a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e1001fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b05202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f071720e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea0145de7c766ce3ef7a2a3f7f83c0179f1eab4bef2ab0e586d85964caf6d59fcd3eba218389931c1085d5c0807c3fe861039b4d0cde9c1394c0d3cc22092a6034065d586e502073ad62d33d7d92c0761b99587babd5747ba239bef7f6d22c1f0139a2a791afdf8c529d2cc2826d3f89e488ee1d5033d87d795f6e38f62dd3e1001fd2ba2790a24262ee203373ddc24e89feba6a5b2b466a2b20bad7d21adc9b05202d45d86f5dbd9d11dfcc8c223db176238c2ea0de068ef07872591ae52364fc1f1da2c5d32b4beea6a1014354cb88b1b516e1cfc5c620a0714bd540864f071720e25d3a2cd4b411595efebcab34774e6d2fb72c4386d87b27e15bac79b0f8ea1d4002fcdf1ae6d1befa0240fc69b5e42ba992ec68df670cfff2aac3ca7f31191ca473c5897ba6afac2e70e9ee55b99f57af0cfa788c89cc309d5340dbff5b1a05f957432b4d66c307dd8d7a9f77a65b49b53376dadd9b2290ea826fd6568a542e26f67ab7b96cbd66298cf342505f2dedb559fa4be2273dd01899d6c3abb17114e207edc4aed3b7485d1c83777c9c4c561f78ac89a338b9ee76e9868d96287d088c341dec8b2c621e00483f977d30a3e5b173d640b2391f5af81fd5db955dcb106f400fd40cd580eaefc227e537c085f43dae32f3cabcf787f5798caabb684b15e6182930e462f2ed46a126742ddeea676776fbd3ea5136818b28a3440cdf5f3552ed1e8b48044a52f98d8aa0f456f0d0f57fd83b4569af6ff68a9545f2ff89200af01b0a6fb62857dc0890780e6f0f9db4d45a2e2039d12960e1ecfab86a303f1c3e6d3646005b86ea2120e2bf073edb7fd6e3b821ad27eb134dbb05d43ff702ab940240dea4835ca7ab615f5689414d24670783d804d16e1d682914e4b3841cc6a5bff597b26b39287044641ea3c0ace7d298c58ff6ec085003b95f2a4495353495bfbecaec92eda80222cf59e732ff28cb034e2b412d31a474c26054f3783f1c3e6d3646005b86ea2120e2bf073edb7fd6e3b821ad27eb134dbb05d43ff702ab940240dea4835ca7ab615f5689414d24670783d804d16e1d682914e4b3842999f372dbdae7508001930a7d02bd263520eeae778c7065165377a747cd5c0737da317fa6c6928622c3ce38cf64f415ce1cdfd6a9f3b1e59d2154d79ce4001a3d53abdf6d93c81ee435e68bbdc13a245ba0686a732affcd62ab641af8408ebb018eb51ec647b1d124ecdf7a9da04407c127b9a16f5d9b3b010b40d3559c53ad00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001045246bcd44fba1018badf3e93bf8e0b92efd6838c0c27e304bf1f13210ea3512835e27eb280107a91da9ae8856761aaea541be3306ba5b21770b1d7fa88db801d90efd612016ccf0ebea59080c2faa7d6cb1fee4123895adff0a8320e96ce060cbcde422cd9ce111ae60055b24b714f02a56911dc8fcc13165577a6f78373e500f41229f9fa64564daf2211756cccd9b6936088f4e6bab5df7eee3a9ac043dd08bd1ed4105f746f64e8d83dbed020a22a5c36a364c361991f3fd29645d7dfc40e31a328d6f4b281520b51172c5691df1f520d4902d4cdd011904784ed7720e91791eb17c144946c7829c0d7b6395fe8902129b4eee2baae1b9c0f3477cb0a593c0e91cf1a8954ae4421af2d721f96690f7aa3b1b54bc55cb0cd99a8a14fa93c05fbf978abcb2c581979d4e82a55216ab35a860d7049f87ff650697688b58df7121eabf39a8c0cade49afd6e7b8510ef8888bec07a70bb7bce2680eb57bf21fb0ad3982347a466b2e4d0056906b2c521c86b43c5cd779161f08b1fa66be624a50728cf83f95f032d8ab577a3e168af02cbcb28d75d1d9bd6e3950ef0f94a4d330d32f678c68e642899f39d8cb8363df500b8a412974ed07973f9090d4089cf7f164bee843e1f81ab0866240092ef7e18fa808614bc45b3a9347e1234e49171510e24fc4c885c5cb82a895bfeadc71c6fc5dbb3b75cea0b4a3ae3af12e91d1b913cc83c7d552c8e248ec4469792d86f9ce00da169ff140048e86fdb247520d3a214a3fbcb413ed0a275d47e088ff621f38e6211bfafc908298213ebaf19703a0929ccbc2059c6062b70158e71f99ad1bbb929f76bb548bcabdb0824187f1b71bd1c8e2a5e7d2f1cf6405a530f2cf111e0539fcbfe83bdf87e9987f3f47e35d6e8394758386c96815813d1c4117ec7a3ea0e3cc079959ae65c3d03a17b7615ccf228d76c0e7fb1b75043d0a2dc7896dfd50418b5cc682de6d970b8bfd2c26436cd3f519fd666bcc9166763fa1369056b120bd583d8a27f069f19c928b6170a6ba61190373f0a21b1832756c3b7a469c9e6019f88ec260ffdbad53baa40af7216da317fe991aca15cb92ad80a5a00b051d9aa8171a63ca801aa8972476edda4c63e0b89cd2aa4e0de30ad75448ce923ef89b3a7143f08c25073b83c1391014a6fc325ef4fd9f4c687b2f400cef048639302fa354740b6c6b61ae68502477f3aefca146942e255565e42ee8d6a30e28ad71f931b89e2784db568370cd795e6e06ebd0ce38eb371766006e3623ca90cd055121bcb977906988812ff7ae972b36e9d3420bf33ebb5a97a6abf04b5ea01272880b592d618858b4fbf664156cc72ae4378150adf991ba8e7efe73c39b49c1cd0067d3cda25a74abe8eea321f995f9640000879123cb995fa501c081dae52af936749b731e9295780e09272d8bb6b35c0711fa7409367c39521bfff921975460b6f3a3037eb9f2a184eeedce330a7589ffd2089124a4d4dbb999005131f01e682e755253f0ffb182d1ecf1a93a83c17a6562d46c894c00a0dcec27e87ad6ceada99bcbd0713f885c5b073f82c59e79e7cf91bcd8d8b4acf84d888860e8c11a0dacfc9886e8820b9b3585207ad217176300412998b7ca9259b5a7518a67de3edc03250014deb7d7eccf7780da26c60dc3c641338eeeaddad8b37859869b4d76ce3426388a5aff0f5f31ff757097e5c832e94185277c85a7e576155d77b48675526e84c836103b4eb1a1fdeab205e6a98bb51335370a335a58453fa497aa35ea359fb206c9192fbcae1bd1e8c3dedc9a65e791fcb93b1151567d999087ea31049689afc01690dc4f380a84d5b1d942dbf510038ef16e3b99c362a44f06daa19da4df88b6e1f299207a1df7d0b67a6c7f0b67a2ddaec23e4f87eab58fc5c510349acb1a6babbc056e66a453440adef1f9f5d1f1ea710c5288f52ef6139cae470fe0e14ec845018eb4781af0685a3706bba303030ab4421a6f9f1f24e276eb061e1a772a51036f8cace2f3a2e382d6056c00ea004d9d61824c2bf612be18d30706224c43fa9d1bf90cddcba0217a4b0c264561a18cc5378f2224cb7fc63f83f9d14b2c16386525d293c16d1af71eb69e89705593d0102112e724dc9fd33710a2e240fb5af456afe33f46fe273d24b0005edc9cc399530b3aaac2575e57c75d13cd39fc2fcd80b6e9d4b5f32c9c49028f9ef0f9227cecd7524c8b6cf607b9f376faf87672949f6cb0ca193ca9b07f4591346f1342d73402dfcfd34ba16150a91430dc4beb3f7a008f69778a18a461b50462a0e16128cbfd20302cb45e9eaf56ebcf23b416e4ef8f312b5807a0ee7159cb9d5f1eb234040e5f0f207a26e6934d64f44d7b91d025538b50e6fd4e7d6f5ca5ed2466b1cbfbf1a0f0df85d9196cb29b0bb2847054443c3543e8946b1563b22a12db9963041447db4ba262c280e082f8c58369d4c7e782376ae3cf154d86b19da1b60150fbebb824b45d9d3d7f1f7d073a7c962d5c820d8929ebc2a4454c5d325e49fec3146567487a2bedcc84628edbdb9111217a48dbd35804563dcb284ba4288e0660eb9a98b785d412337b9d7124246eeee0aa20b3ed3ccb3b7bc7aac32bd771f9b2d73402dfcfd34ba16150a91430dc4beb3f7a008f69778a18a461b50462a0e16128cbfd20302cb45e9eaf56ebcf23b416e4ef8f312b5807a0ee7159cb9d5f1eb234040e5f0f207a26e6934d64f44d7b91d025538b50e6fd4e7d6f5ca5ed2466b1cbfbf1a0f0df85d9196cb29b0bb2847054443c3543e8946b1563b22a12db9963041447db4ba262c280e082f8c58369d4c7e782376ae3cf154d86b19da1b60150fbebb824b45d9d3d7f1f7d073a7c962d5c820d8929ebc2a4454c5d325e49fec3146567487a2bedcc84628edbdb9111217a48dbd35804563dcb284ba4288e0660eb9a98b785d412337b9d7124246eeee0aa20b3ed3ccb3b7bc7aac32bd771f9b1d8394ba2e4adcaeaef721748559b459a82e03b51fc3c9ede424d047bd7ed5f20c42ba95e57d85e81e62e43ece358248321ec92aa5f4b75b78640b9689961a6a150a02f1be7f1ef6e5d539f61024406f5775519521d6cc7c9950525f5fa4aada04ed39a11be374a6c61c5e56b99bfcc18cf3844790a53d75fbd6e84fb2bdf57313ba0f2bd7accf7cfee43fcfbaa353d00184443feba854ca882abd9d0f8f5aa5363ab4e4200171a4ca45d1c9686169bde1abc395d177ee75de4c60c7e7ffc8822ef1f031e77c60013d5f5161a868da0eb91a4bf48387d840b56534817bae8e0b222132a305948c5650cf990c7116e62d592063b1b09cbac868b9cc427963fc0827b94f41bf8bc13d62c0f6f7d4407563447f087fcf2cd7dd627a3cf89d17ae8e36292dca26faa676dc7dde3a7b4d2aa55588db6fc006ac2574821d07c356e21038a4c69acff6501a72e569e9fc5ab4730cf015875903e1941d2fd884e26ca3e22f2e19262dea3889e7b527da34f118e3334fcd9c00de89c02fd3a30950473d820d7268541336045a6b33a4956a820b3722a343b1c7b262b11bb80e45e2dc7f362ed00bc8fe9f05711b80bd6a782e80f663344b89d2b3044a24f23d06c3abf02538a4c69acff6501a72e569e9fc5ab4730cf015875903e1941d2fd884e26ca3e22f2e19262dea3889e7b527da34f118e3334fcd9c00de89c02fd3a30950473d822e2e6b755576a27d644f8bab0e9a8f2f602e884b3d2e83a4b47c897cb45aa8d036bfcb9a3af8e619b9395d7f19f2f47ac7ca2119056a8464a55a171ef3b5b56203a3cb30d827dff092d5d3f5f5cb12d8fe9371e99111eea58fd8eb67cefd4aa22b3f2feeaff5e9c853dd26cd55c72e5ec8080d585c0d6a6cfe1a71bed0a236b500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001361c448f7ee1d45f605cf0f21f363e73000a908ae26b77c3fe16e9f5f918c59d0611920d47f26e4736f4ebe1dc3292f1aa8aca5c40b9a4b9f80617941e8b19163a408c0a4ca174f5882b1df0d7f896b9a61000a33e141eaf42e12983ff8013d30fe89210c75098cf37c6febafa31f11c979ff9b71276b0fdb7221d81a8845987250508d90cda637a8d9be2a6f535843832b7169d78283e79c54f19f2d7fd53aa2e41609c93c1a22056e1d69233b664b70b4d34bf7f580bd1e2f4d980e76a311d15778af37abfdbfd68e86ab730a8a70c94703355cc0d385b1fc7f19ed75700cf2fe6c15ff2f828bdc1915b0f5c8e66220d1af1e3782c37a3a696d36c0140469d2d4fc887753024a68ff99bb5133b167d2048a835aacee7a4114a0355260cdde6202eff54e77c63f56d6905933d73f0cba1ee5409a713e36d040db574d60d52d1148da9ede12ec609ee540da6284be2a5a17dad3223e1426f8796b0a35f5bb291352961739a387ca456a9b27645fefca1537d403378c9641a7d0bed83ef6ab18503e2e4f9cc8fead18d7a9d27f2f51d939eb4dc0b1b3090393a0ba8ef58a21f73008e0dd695c64bdff5c824c74c581a8ed1ba5713902ebe2acc0484cc60caf0a93d635513b5e3a0c800676b0204875fbbcebb777a15205050901f507a2fd1b55708b1a0fb95bfbca0caa08fa08e1014aeed630479180dbe5e07c0050e51cc8f6e13a72558138cb4cc4a20f9b6e6b386d2a506bd5f727075b52d1a546ad1aa08ce1c62874839a58835f8e8289a796db021a783e66d074b7929451a17d6ecd63684061eff0276eb8707e194b5cfe5b611ed734849d8c4866890fdf53bc4c03d1a690f535e11f50b6eded5be9b16982d9742f92e5d1e413f1051dfe5b44378ec772832f6602609ac4055c2e03cfa00bf7bdddd7982ae7e14587e0cd9278e20ae1365037112c7f58b6aa79a6ab4bc1e72bda2c8e91139307452f2549170624b0917261bae1c0992baf6755b3c639bda232b3c6cf1d03154ae2db55007607aea299afc230252a33cf670499f27a808a9bbf4cf5a5b5ce424649d4399b939ee67864d323378ebd642ff9526013d50433a96fb6c9427c0b02b506c9f357161b5096afcca2ec0b3bc97df38096242b53b3eb3cb4b5909906e0c7e13b916b420a78c305fba096fbe634bfbb35052e91a5329a794573e32823e3436fb2e01b3ad28ec0e905316355d864036704ce833f2bf2aa277b8ff9c0e28780f3c7dbf2cc4a4ab6729122cb6f19ce78f2f4c54d4dd7238e6811fec41083ae47620eda7b930fb6e412c3c2c6012e473b9b47b7abcf0f516cc718d0b7f11d4c54fe8e80081a54314d2d49e3fb80337b719c915c7b08a71a2b115102449882039677398425730976b6c0e2d3b5b9aaf22eee860f3b75cffd8817b8aa2735f56f8e317e1ae7cb954573b338334dc51cad0123937d6ed41389783f8a47ec784240e4380cc555e4044259150312e5d9a3f80f1d129fb20f2285a6eca31c37294a94d922eaf6d0d7fb212e2da8c0247834b58bb9f06632ccc69e1efcbfdb0c8a01d5cc5e488523ad27d086c3eb039a9d0348ffd1705d1bb396c7df8a5ae94b316d820b43678bdb41157762e7b101da88cb51d6301fececeb42530660ba61c5370d86ba293b1f6da4d27d2b77c0403cdf777b1eb52b3888bb3efcd3eb7538b47d9d02416e6984ecaa9a15b3056e43dea0d342c00344e99762e59d02af22d5849e79f1adc31b77aecbb481049458124deed3268506c69bcace4285eb94af7b397c10960f1e3b5854103d013849788316f96d21e758abf19432e82bce8a6aeafce049a1e86a16f5858ed698182395f1e15ed1686013c1efd10cb357a3eea499b49395b27585cb3227e66c348edeaa9308c9d52d06dd584ab4913c6c823b0e1eecac75bb78d6a6c8c1616adfa80b2cf1fcfd46d803f7f6df40f6de5d424521ec48451dfda9e19192066c33104915c55018814c6eced74f1dcf15389b9faa911808f71591d3a483dc09a0ed9e24b5e952c682bf0267c8afd26952eecc6c98db26cd65300efe6e37c10c7d94100a12641027d02f60896b5a61618742144e81a8afc90714959e5e3bc0d5d8a2ba40c87510bc743c760ac6002eebb003908b7982cc9d118fa44db4cb08d11ea46a6edb1bd1e9ca129f6a653a7ff63790cdaf7536b95acdf19b42e416816debef4d04c007418fc96547db88d56b8a5e40e792121c5b47502dc34903c63468d726df39fe4fb1dcb6a7e37beb060963ff69ec240c9dbacbf88d2179940f941cc64926ad0c37622349581c8414f9f69c009613dbf362475871029f1b3b8225760cc5a952f3c8b14f9147716b971e2ef3fd119cb43f14a1b307a22636452a716a395021613d14c2b06eb88e9468e1d10c02ee634bc0eb607161ed9a5e8a67482899beae9ec2eb528dd6653719f396eac3f1580f853b67265abc9afe7a8a427d804b81d6e63167b172299ac8e60c69153c0ea7f07ac498dbc9acf4c21a454f3c12878cf919ce9860c52ffa1381c1f295d3b6b84d9a2903b9587257b6a6449746c9005cc27ef706433ad005ec7e3e0d6a2c4947b265d6fc48cbf73809ee8afa72c9d2b20d8108f9d1dcb6a7e37beb060963ff69ec240c9dbacbf88d2179940f941cc64926ad0c37622349581c8414f9f69c009613dbf362475871029f1b3b8225760cc5a952f3c8b14f9147716b971e2ef3fd119cb43f14a1b307a22636452a716a395021613d14c2b06eb88e9468e1d10c02ee634bc0eb607161ed9a5e8a67482899beae9ec2eb528dd6653719f396eac3f1580f853b67265abc9afe7a8a427d804b81d6e63167b172299ac8e60c69153c0ea7f07ac498dbc9acf4c21a454f3c12878cf919ce9860c52ffa1381c1f295d3b6b84d9a2903b9587257b6a6449746c9005cc27ef706433ad005ec7e3e0d6a2c4947b265d6fc48cbf73809ee8afa72c9d2b20d8108f9d28a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e870b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa126c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b0656a0cf4c32a485099d4b8e3389c827090d82d1172db3667feac40730816f133ecad465c6944b325598776b427052e58c94c13e930403f45b0a408f56709bd724287a8653234caea67c56793cdbaaa0456cdf7b43e6c05ddaa6c0253a47d6d505cf217419e4f71e44fd795ce3ce932c1a1bc93cb728baa1d0df0aa69bab50142df7a41daa41939712174d67499152bc832f079a0136eead02e44982e442929e040a5288c7f4cfcfd8259e43e9af00a99f1296f2d19b0da9d22eea413fc016fb3929f857ce3021a1ec2c9bc89b76c6e5277ec01edd2f637abfe35990685ae18e1b00dc3610a9bbfbfcadcd305379400e30def6fd40025399a6ac1292daa557402e4c4d322add4454a75e3e1e6faf60dac34f7356ab65d2ef20e7ba2e956941db0e1a7ede4b179257211a6cada714a7beaad368ffd2818c744f6356144d0c89eb3929f857ce3021a1ec2c9bc89b76c6e5277ec01edd2f637abfe35990685ae18e1b00dc3610a9bbfbfcadcd305379400e30def6fd40025399a6ac1292daa5574021100de44a90c742e7239c06a9ea36ec9ec3477fa9a1765acc534ee4953fa74e050f3816577d1dfdfc2f1335a8d2086b31c2b7113b5c78176d8e7206458c2e9d33c712de6dace1a342255ed1feadcc51b04401ff72de0eeda55ba84253c2ac583779a8514727f35500631363ca088e12b5e440a11c5196df6f7b1d3f0dfb347d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001140c5a7692c13bf29fccd79fc7b59c241d9b36c2138c8451721e79d56ee3dff93ab3c6a304539caf8174716d91fd0748ecd1c02867a2a9bc51c1ce339c402e0f1501629162ca64dee0f707aaa90c7d5630aad867eb70aebec0df2a9e8ddafcd338b22df9786325aad82e7706fae9df40ea43092bca22f78ee771bf95ac3be33c25f521f30eb5199257632af18058066eba6082f631bd65426a04f3b41cdbae831c38e8dc2e0bf6d8d7009571c756ebc05ab11e0c052f39e2471296d791ba9b791b1a3483515a690a9322491cedc5b8ca58505d85ac2eb2808d23919586d52c0a3675729934e077328c1c9224e5b8f99e0784d8360e1c7be45f78bdff68a0fd8a3ef233635e87dcac82ba936d53be6b9c25a0354ab9efbf996a9e31cf6796a4df1e99339dec81a5cf32006c696165f2f4fdffed4e31e608892dc7eec12b057c7524d8c73f137cf21e26e922f5445367962e2e7d9edf3a9d99dfc99732844f06b930403ff170f8453b93209f7212e30e64bdecf1f13a90827f8af5271a803f9a5417b2883cf87686ba01aa44b95631e5814ab0a6ab9ffcbdc888d1f88d166178440a7606c3266196b06f6bcd6ca8d7426ccd0da5cadf02eb5cbb8b2f63c7bb5ad811e4315bf57734cd08d875e9d166dadb8b98f5c714d29f1d7b659d4171d25e041b0d11e7260ac976f1eab0194dbd2862933e2d75d331545584286b4d5d606f010963d8cba260134c0c873ed541ad2f9ba37daf7c67838a3baee19647679d34600c48b3cb341b205699727da85b9a6129e38b746802999a390a83c4ee15498d2a251e4c427a5152a0114236c44f600f8a7c07a91f2e1fcdeee3d1606a8dabb0c80f49ac0c3bd3a2429093997492dcd565dc5ec93132dd4a5acb7d6670678e397b24e63f99330d2cb016186b40067d8d254a2b6d4996634022db437e13c224f55220f21650aa5baa46a61de66652adb1f204b520344cd991715763b3cae77d2bb81e94e1525b3b070973a066bbca258fab3e293b13ac0480c935ec5f9cfec9c2050e84f1e6dfc9fe5fcb4b97e73380a9defda1328e41b72cae7b232ca9c876eb11126580bb604c6c0fb0313e8183042fbe1d97413705c6d8214de25979fbbcf04f3f1f873ce2e8d95b7ad6769d85030c70a8892dbf02c040e85cd3583ffa3e48872aeb5ca5afb2895dd83e3c55333e671d9c27b9110d3797041767ebc21dfebe481cdb853465888cea5cac08957ddb880c7ce23ba26ff78a325ed0138d492b5b553b2aaab104f6a221fba503b915c766c85a59a8cdbc20fb5e6a38390ba511bdea0c1ae22b9ef6aea0b81855ee84aefcdf54724253e1949c5da3590718fb92601913c3a6cb190ffa51dadc8b2c77bbd9df2257045332aa63ffc4d517764e34a08f1da5d98c792e3bb6f562b751fe604f1226528e9a150fc23e03867dcaf7e88dac26bb9fd357878b46601a75f300b9b22088a3993b35d8446b99bdc2fc5439ff873e0aaa508874894f35d98e97daf4c4ff27bb59efc2bdf0c992d417ee02becd6007887ea83f631f68cc1ffc026db83015a119266db552e323667f7d84f631f28927276fc450288daccb3c57c6b6291e9682470bc3bddd8907da1b617ce13928452ef0466440c54d709d37091e8a0e5b618d8ed232433aaa2f235ba755c5a3433c1a5a3f384d050ec2d0ec514e8ec8d612550130f14d79116b27204f374a77be090de4a7370b5abe0b2678f3b109a6b29f888ee2469b55c80749a23fb2bb24b81f1a24d5eec5523baa3d4ac4aab7f267d029c4e92016191eecc8bf936fcc0574912d82cede978c24bd540f0cb28d0bccfde338849465b6fc0d3b8ee6f21821eee82547d26e911eccc7af03e9470955b4e5a9708959ac27f0fe1f9d003cab56f7df25c229a6d54b464d8e9a3f18ba29cfe000b98eff019d2675c348a01d5376763d356bcd72f389fa174f007bf72f04331d264019762cc6c52d3f6db1f76c29bef932f2c78c5af6f059b467f597f5ac87cf74e95c0d7926402a3d88874168940f26375ff5a13695e9721d8353d7e34a67bbdd3eac99ef5311a7a8fe08ed57130ca527b5d62c5d8a56312e6528e621f40fbb5470a93fc5a1f574c44ed0035e02a21837c835ff75991b61091898106cb0bbc56f8cd4fcd5c1b35305ab78773bd55dd02b872fe0d0a5ea9243aad32f68db51897ed60756f633d76b612f87ede72d661c3d67eba4b7ca818a4b1e96943c4715814ecd7e0aab01cd8b72c0ad116ba1d2f430b3f71e7257dbc15d48d1a1dd9b655b6e8ac51b3643da16287432b78486c4700f4c08e18da8243ea2b72e5e22649aa4b3bbd3e0d3091f0570b8fe357b793b913383d3983bb74ac6d26c18295408fac8c1e20e93f36c571bfebd6ace96a1d62d0c7c2c67c448b5392d93e7d6abf7053760648a6815e0a1ff9a6fc61e695e29d4019321f92a9475e21c1c78cea42ce5eb404fe4f39be9cf1d94fe5254f1292edd3e6cde06d56b8a1de3e387315bd31a14e1f6b4086d6329fe042ede980ed6d12407dfa9ddd4e64d6a8c8e5c0934e07d98418f78c20b910b93e8f79ba8b5cdea51382056222b19b2957371a3f6cb1f8267e0b72039fdbbed87b03595444a3215b030b3f71e7257dbc15d48d1a1dd9b655b6e8ac51b3643da16287432b78486c4700f4c08e18da8243ea2b72e5e22649aa4b3bbd3e0d3091f0570b8fe357b793b913383d3983bb74ac6d26c18295408fac8c1e20e93f36c571bfebd6ace96a1d62d0c7c2c67c448b5392d93e7d6abf7053760648a6815e0a1ff9a6fc61e695e29d4019321f92a9475e21c1c78cea42ce5eb404fe4f39be9cf1d94fe5254f1292edd3e6cde06d56b8a1de3e387315bd31a14e1f6b4086d6329fe042ede980ed6d12407dfa9ddd4e64d6a8c8e5c0934e07d98418f78c20b910b93e8f79ba8b5cdea51382056222b19b2957371a3f6cb1f8267e0b72039fdbbed87b03595444a3215b0274d3dc3a846fc8924f1055fbf4f5ad5848b4b6ec07c76e6079ee428f532d63220e6a6375b0b5eaeeb6fc87a8cbfa390fbf15474932bbe08a8d6ecbb879cb51f0ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b22e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d570355318fbeb9546267d1f91a3b3aeb3c6b8d2038fde5d8e6452f982d32f801e116745b5d9e2068629c6da06d336b8c7be2eb1b5e5cbb7bf0f3471505361db6e23ee76432f734ab6194b820d904eabace6031ffb363742763636375f186c8d2f320aa44ae8036c90e4adb768a40f346f55d29f398859575e48ebb1e27132ea3b91bc54654878e6a646bc1f8fd173f8bc473d96b6016316261019188f962c1f5c3188163288502819c09079b78ed45bf89f2306d58620b24af0eb015eadf5bd204325070870b4bde3308fad4bfc1eff65078b1bbafb37dd85cc858b01bdd9029d1020ac843606ae0225615f79f691b254b7ed95e72082b9863ebe401d3929cfc2b08b450a13aed8c83b4cf8ec0e066f511cccc6dd97fb7acd520417cdd13b1b4953c3775e7e21a5079429e7383592d2e39601451340e2f7ce5de4f4d4581ac1d8d325070870b4bde3308fad4bfc1eff65078b1bbafb37dd85cc858b01bdd9029d1020ac843606ae0225615f79f691b254b7ed95e72082b9863ebe401d3929cfc2b0fd5252d6c0946fc90fd8f343f19871fff59652da3eda531b3edea469962bd6a127482c9b4815bb6bb68e678dd88650ad1f40e2fbec26dd5f6086dec509c6bf207028617c9b38b5df3e64ff4355aa739424fc96d40abf61ce88abe474c4d0d183510aeccb3b0d41a5cbfbf4055edbca9dd75e5877ca571c1f9e2471e06c7d507000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011ab29e3d3d1d83eb85a0adee37327561774f53c5b80b2c4dd4617166060c8c051df6100841e4c45981deb94ba04cc531cd1ddd3e3fd0d81e36bddb4ce0f13bf320d177e59c10ca9a48209c1416cc95b9c4f21b7d6c5fb1d12193a20527e9c1e609b838f53772217db70211af5967df18bc04984d4cb65f43b231c88553f74a5d38e5205119abde37052eced7dcbc5920e50c544ecbb81c7b67270a27566b5e28296800697b1b80e4d2805f42a976c46d33afaaac761fb40c0fd4087481db535a35922b63fa5dbf1f1e16fb01a63d4c777bb7c6a4228d8f71d94064aa3e2b843e20aa3829a5e87fd60708b951f74d6d694d70faeeeeacc846641419cbeacb759a3ae937819d5fc526e9ada277bf13363fe1606f9ceddbd7c246740d8570444a4e24f5836bc6096938c560454278d70cb4400980e883aaec29f755103f984cfb231c8d8dd319d52b49bb42a071dcd4a70f8b37282798d3d504ff8a6c0558078f1313f2a474cc64d0842670065d60249e348f9daca7794090883a6f95fb904dfc6b0207d3a038713e6894ac189ce861f5580feeae085dea84cc3c4b22af8d58fb910c7459144ae1fa20828f9f7a46a7a1be1e816ae90169f5d40b73c0b565d128b62332555e2cf2bb06cdc786a4672c69a1ad62ce9d3a10f962b068e8324f6f0b6e3d9814f773fea6e4766a7efcbcd81f8aee9ce2f14ec66288c3125786fe3f78860c7e3a0a9ba31f819f44ca2ec4f480b41e76001e05edfa78379152e092c003150544269702f1da11e57e852f79ab0f5a5b1f4f0a87662d971e13a08ab2986eba0c7e044c60980496d5c3b7280993cbc1ffe11fd974e4125f942b96f3d53b355d243238aed1ddc8f3ae757ebef38740f2e96b9c85102d152a3dccfa9006a960b40ce6363b55660a713891a3872ab0e439a05d8d07adcf35cb1e85f8070e15589407661407b4dfa865343994adb88831cfc0f8bcbae8af15158291c760be3b23d62cc82b6feb068fd212c4e5dcdf1c47555942d55c4af61b1dabd8237eca0a40b42bb677810688364c9a7fd3f4e7a47b1979d037ef52413d891d73d0413dc1fc9c2175a12bc91f3e8c15cacdb62e63783f053703626bb5d6ef6b4af021ccd27e4c03dfcf1dfe3e965e2ca0818423f90fcf4af4e5690dccaa9c48c9ad0b8ebf017c015db0d6e0141dfe706ee6cf24cbcbdae8bcbe6bc2c39dd0a02c4417713360c3284c28485b94f5555da407d50c2bca6ddf0388076055242ca949471dfe8999c40d4ea350fafcc19a024a7e6662109d34eac2ebef9ce8cdeb07383d3a990cf1f039c44bb43b67276d31bb6035b6db1af88b43bedc81d6c627a1b46fa4a531209a0497a8b88cf6eb7ae7ac51ebf13659b0d30144ac429c6449de9cf724593a3af21ddcb3a8767561d8bda4de7d7251e5f141c1409002ba5342f1379cd54001eed31f27e9fc4e11b57ecf337d6e7fd3b682604537bca8efd8f790b8c80e384cd8cc337f6c304e8bc704baf8a0c2a9f918b831f1afc88502745bd463c64c16637a32307330ae6c85228b7a36c0dc08bd288d98e89f9ba60450cb305217b63c42f85025eafc0b739576db7f8e55e9b0fb73edf732eaafd56af332957e02deb182a3fe28767c1115b977786e54490ff5f503322dda4f660723315801d4f710b7728c5701ce421f04623148c2982659165bcd02cea41180852187d785194ad0db712bb80efa89237dee0eb2e192baa1a7eeb902b5fb9896886a8d60a8e610534c4dd5650548317d607974fed87161aac3b581e1e8e3796dbf530a30909b7d11f44e59b7221442a3c2cd38f82e0293b632e40a3deec9a8029032502f836c42798ff529200eaccf882f8577b60c2fc89c93c24502b04feb17fe302ada06e07fa460df67b32244f4cdfc67e0bd7bd354be4b14857883983f5782cc41be815e4ac445a3b0e834515fbde3af28e7075ae7c722afea6475dd822009a2ee79a75874e229537fbd3a260fe7e443a27d8c96f5b37e9249ea6faa0b343453c99585ec6ed8cfb008b6320548874a777e66ce5060784af49cc49db4eba87a7e6e2c679da063523e36cd05055dbba90fdc786fe383af7f7f6f2581aeae4992c33bd28bf0979865d445640d26593904a3646f44d6b937fc7c6f5e03b4abdbc8df1fd44a535184e1f09f0e041092a13c1176341252430183fb11ffe66abd93575a942ad0327e4c32dfb606105a4ed9ca063972aea7cf76e73a2199d2514481faf92aa9608285113023d5343e8a50a7af3b74aced7eeba731946e35ef6fc91677fbbdcd3649ce4ae29070ec0175af5850c48b5312811458ce6b91ca32d6cfe591513b4e62e362a21d6f8f1538b393466c294760a37a9a43f7e6270d2414898032b6d093aabc43c26cd23498074c6cb993d6b89f5c8565bc0819d8f2fe320f7bd6962887ee70ed2a932dcb691b81e0601cce64e331650353d77ec3412b4c4b90d85e2e73f0f88f18201b06f4247e1f9fe3319b1cce9afcac28813cbef6fa4d6b30eecaa7a834a1d4dfe4f90d098961e09007f86ff6f910a33579d04593f047dc273cf60c8280699ea08722c236769e1f6ff807900906ef5cca862fba8e56511fe210030f16acc74e5f78dd3f3e8a50a7af3b74aced7eeba731946e35ef6fc91677fbbdcd3649ce4ae29070ec0175af5850c48b5312811458ce6b91ca32d6cfe591513b4e62e362a21d6f8f1538b393466c294760a37a9a43f7e6270d2414898032b6d093aabc43c26cd23498074c6cb993d6b89f5c8565bc0819d8f2fe320f7bd6962887ee70ed2a932dcb691b81e0601cce64e331650353d77ec3412b4c4b90d85e2e73f0f88f18201b06f4247e1f9fe3319b1cce9afcac28813cbef6fa4d6b30eecaa7a834a1d4dfe4f90d098961e09007f86ff6f910a33579d04593f047dc273cf60c8280699ea08722c236769e1f6ff807900906ef5cca862fba8e56511fe210030f16acc74e5f78dd3f2a541dc9aede8050ad6648812a33cfccec8163996bbfab69265fbcf2ef361c4e077596ab5d4f14c7435038a9742be3e6b737f77900011bd2975eecabf38cafdd305d9e4e7bb0cfb3b7ab6f2a16664d9d00ffe6e15a8f452fe648d4b20ee2b0793ccafc6418112053d1c539dc198ca765b3a8d0cc38d47492143067a7a046f720082c04067244a0b5097d8b2535880d4cabeea64b093c8e2fbe2f9efa66a6c0b331badafdbd1585cbb98145ff82a67b2f4b94bd1185102716f6439295fc619aea04876f1607ec1f21a67e209f6284fe4c7ccd257f0cb85ebbb023cd3dfa9833341c6ee9a4ea8a1de768f02ab03dcb07adc00e8df3875dda40e7b43f757aa22b9d040e9a8bcd91fc37df3499f205924265fc241caf3d6bbfeefcecac04c976ac69267ceff7a04b06a8d83d580e8df1512faded984c128ca45819e749ca9567c1af25abe23651217faf5299b77ed5cc30333e56dba19fe08bf95918c03550c9e3b4088a6954a2b0eb38bcafc7568bd41c195159aec6025222744eec5f8f4c735024254e43e7d570affb9aee4854bf65e296570be77d4c4b019e25b1d03501e7333c3bbf6cf08a9fcae4eaea8d7a724774b3d9ac69b2d9c461d286cb0d866c2c590625abe23651217faf5299b77ed5cc30333e56dba19fe08bf95918c03550c9e3b4088a6954a2b0eb38bcafc7568bd41c195159aec6025222744eec5f8f4c735024270c074a19e0d608eef484c90c5a438d6a5dcac528ed52d17fbd08e48f2b9b44310fd23d32afa05224d6ff3cbc157be23a55630fd82183a3b2eeb340680c7a670ec31754be27918b72935054df458667c3b4568ff57c4ffaa9a1c031b2ac570a033fa136bdc30b50643704d5a158c18393f508a98745498a0b22cba9a7941a3c0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000135c88351452e25d6ece38c940f0f91b21bf719f781b6af2b9efaefe0923050742b361203b6c88ed965a1e9ca25a491a063a4ffa7d70a2b25ab5fbb6bfa6382f21b9a93c702f355b18dacace4fb882661d433beea9a3c99d117c977f370f348c02e412c8e5d5d346182e552eba7d750b5699becff24ac9987b7e2ea9c0c5270d40e031608ce4dc3f38320d96236577781cafa47daa0c6594749294a14d8132cd22412b8b9b3ce468b13e348fffc7ff5406c282e71d32f93a53c34b897274bf1dc13180cab478d94470db55e812d1b9285233898d1dd7f1f3de25190a5ff97798701f0943014fa296f1974bb55f0c5c09f8a5dbfe3d071bb5d7e505285bc440107024f677d7a3c8217988accf35e0887ffb85b1be6bdb1600db08f6b6a99ea148604ee5a4273bf7c3c53c0fee996792737c7cbbc07137549ce8cc56e8b3da06ae93f6c6769e946f256b71b923578c930734900559dfab96bab969d67acdef09d32395f6cea4489b9bb9ae52bf70e98fb86a57f507276182971a5c0956359360ce623bced039d4955259e068a8e8e9bf608d7722533e3776b648f35af33f25b81a43beb07f902b820ede4c94a5312909394b8018f11f8b8591f803fd775bddb83450a80d621f6d63ef0fb9f65fa2410f1e4c31d71f55098642f0578359ce336a37d3bb00afbd8a2e7469bee8f055e55d1338157e81ff8fe7fded3cc07386b74c20112352dd4f524609fb1093aef958ac3464070bd30e9acddd399b3407c01404d47174d21f3c812f3743f3ec0bf89b53820b16d0019f077802a2fb9dd37b588ebac212890683e663987c92d2cba3a7b4dcc06ff09f25c76895ade4d84fa27a5636815d82c213060c812cb31b5b589c5ce981d043bb1066f8dbca124e028f9094b321530252c0dd58f3ad480808b30e4fd3022f381b86e2eb1caa4b97a9bc808392c162b162067444abdf82a0d078473c364f2611b8b5b484a115b24fffb4ca34639347f2bb09a5b9eb682aecd3c79891d968113c875ab2b035088e166122647ae7e335761944434dc407695b3bff43710be6a689b3d9b4336bc825cd83bc7548b9834eb4a46d679ab0149ac2303b3d3e3a1f1852fa02f2f74800bdbcd2834d376fc0fa0251177315fbe203708a4eddd4fb8dc9bf733cb9471ec4753bdeac0ebfea20ac86ff871d0cdf3a6e8e1534f277212f50fcbe6726f3f8b55c5f214765f1bdc0ef5a4cacefa93a294067ddb41bbed2a55225ae659f41b02f3a05bffd5b8a37802a87660e6f845472a21bf927ce9eb9c1e730659222f2389515b26a670c68c72188b9b30ec0a5e0eaa1714ae355312e9455b03f20e52b48518779e39131f987b052735e8e28ddc32a775463484e080b750e3aacf3d65fc7edcc25c610fd1ad9d0a25a244140848624ba58233c0d93231479441fdcac6d066570f0d015cad1075054fb2bec102478858fbc73e88836f5440a37464023cfbe2d6bb7486c89f45cb1cc1b13ed6519f8541e85b5effbccaa539e4f39d3d996d221861abb0709bcade3cf02dc67faa6ae089ad6cb06ca53cbafaece3242c322bc801743adcdc47fb4c10adc635486d136ebb6b9870237c8977fa4834155c6055c4bf95f94aa3261d023a8d3737c1a13117a1a4776cd03cd8ea97f9c068f631225ecc9374913b05df6d00c96e23b98be91c6a93a2b3907892dc136b865e57988fe33977af4b747dc85b17645bfa5bf93b4a04229d193d29897c5ab16f94c309a8e0e2a3e9f4313a229e1e5482251fc3f6a5d68a49c57bd1854eaff585d8df47f1d9121a55085fb0ab0a0aa1b0167c35a2215a63acb83110860ae0b03f5c81e9926eab6af89c7df6bb9b1456b2ab6a8abaad6d0fe410b2d79e8d26ad17963a7f27e878ce6510978ecb8a395eba04441ab26fb2decf60aba67ed26fb0b927a3faeb4e138fc8063d9add15393bbf83f8d2bdc54a7b2ee3aebc0f5f2d52348bfeb0470e0a5589c0987b135809e442b9b2e2f4248bb65426aa4e25c34abf20bd76ebc7557ed6c6c5a537fdab3e253e778cb9ff4e08f26deeda9837e72026ce9222c081786d5f5218ba5dd4f81ea140c608cf9d5640a274b060d5529c904c66814288691462f27d672cd81b2b08ae113f9f85af01b66f4b88bb2c6a18a80483738ff6541369ad6f52e640d27a203eda3145a4a6f6f36ea0dd02e1bdd34f77d24a2f8a7a2cff9eb072ebf5af2f3be95357ade555934d843bd702df78e792f8836ab23c62520101d411e2b8ba71392fe0c521b0d3013cae90a1574708afd01f83082845c7177f28a9c547495b2606d01f3ade4f2cfec3516f5ea8b8f750522715f3e10732041a048727b8b6a4db1def63d9a8741f062f68d326b4632b6e87832b38a428ff0717168d26646ec7ba22109c26578be0f9d0972cd94b9cd4919ac36dc36523fa148216a3c69b91384715acf3404a449b1eed0c1fc185efd9286102a623223308ec41165fe5f629e6a02a530cbfb5bb64e112f3e03e7a1026d7c143f2d8e719f02f5816d10709d619612c60c0417357079aa13c9ec79daf3dc9c2c6a5b3a1b23381ac42ae90ced1811f139f3fbe8ca8f8655ec361386250c2365f7ff348679ac599ecea825c312e7ee2392fe0c521b0d3013cae90a1574708afd01f83082845c7177f28a9c547495b2606d01f3ade4f2cfec3516f5ea8b8f750522715f3e10732041a048727b8b6a4db1def63d9a8741f062f68d326b4632b6e87832b38a428ff0717168d26646ec7ba22109c26578be0f9d0972cd94b9cd4919ac36dc36523fa148216a3c69b91384715acf3404a449b1eed0c1fc185efd9286102a623223308ec41165fe5f629e6a02a530cbfb5bb64e112f3e03e7a1026d7c143f2d8e719f02f5816d10709d619612c60c0417357079aa13c9ec79daf3dc9c2c6a5b3a1b23381ac42ae90ced1811f139f3fbe8ca8f8655ec361386250c2365f7ff348679ac599ecea825c312e7ee231db538e220d9050deb695a20721092fd516be72dcbf54583fa16ac019dccee5387802b35ef46d465536c7a5125bfe9b85eeefae2986b2a5c1676fce05f4e00025d748e65cffce8e1cf09924474a2e4fe7a8905061b1795b5a6792092ffcf4f90cf4744978dfa55935648e4fcab96ebd33e91eef20a37884bc15fd66c82c3f0324a70a2f54232261e930d8e266dac5ed0364fae58746633ea1321cffa6afd2e01f5d7cb6ff8ff6bfae7b1d8a38d3c4e4bf7b1b9bbe389d3a746532311f7fa2173c53e30c8f90f0365d804528cfd3d5eead638cee8784c9366a3d01a881ecc2540576df83b77261476d44c4a74cf9bbfb393e946479ff1e36c8bd9bbd40e6bdd2059ed546283abacab0be9d75c8bc266a495db0e592be93d634c2ca71415f0b7c283ced1e861f661296b0c445c9f4b7695b12e37504bdf7568c4fb1feb6910f5c2b2291c5d8af8f90e40fe2747b6503339cf6df65d26ddd0eea83b17cc572964b2e0513c28b2d48818c8ebb05d0d4649e33c5f8f1c6987aaef1cf6f7339e16bf3284d638b80f2a1210458d139b194c88087cde334d429248398516510b6263c253a938903282bed607564aa0b22ea92a78ab5235ac86fc70cb4dcf4a531dee1002b2291c5d8af8f90e40fe2747b6503339cf6df65d26ddd0eea83b17cc572964b2e0513c28b2d48818c8ebb05d0d4649e33c5f8f1c6987aaef1cf6f7339e16bf33ee534c74a7da73f32e714c882265fb514f5ba5260d5d2075c7f3679ff101f29002ea89c121a830a800326dcf8093aa2234edcd8776972ad89b03dccb005efab115b03fb0d13632efd1ec53a5bc161bbd0fbccde6fefdf08961a3b1cf1059fc731bd604ea337e03c4d776cd7be1cc36d07e247d1a4816d09cc7f576d843fe403000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010c5dd275295a380cbf61a6cb19daea54a210848aeab0b5a88e2f2e2fd023e6b626c1e5aeea2363f56863e2c671a8d8ab9d6ca55346562056218992f7b7e50c6b3b4d4e9685b1f5b28867379aa7d509579a87c788e4ac37959fa3c80bb70774700b3d08f6bb0ab4c986247ee6818a72bf22df05809585958a9c2720936e93fcb93790c2816c1d27d4cfba63dfb3ddfd005d0727df8112b92b7953580e4bea0dea2909f7707e387dca2c453c167d9ab5e98757de40f68661f63d98002e6763b4f738fffb46b08bfea9ff3f1809764137cbb28b10a17f63ce3ef972ba3f1cc1179032892e358dead99bdedcd78b7c5cb03d28636f4f2237f22811249281e7b9e2122cd568e02726cf8bd158e2b5b56cf510be3d04de916b5db18ff09347a9dc9dcb23e4e6fb273254cdde13e680429d0c0f9c1bc137939b8ecde29a5eda1cf0f371326abf66b1befe3e0b48419e59d32c9d44224be4ada3e1327b52c0e6f49a929b29e6410c9b63bd8dc3fe0109dba8191f78f970222b910eb6d30ec5492fb68cf2317aa7280bb52f1b3c3391f26512c613afed003ba91194bbc1402cc16e0ecb7e147d4f095bd53f082c93a11bf71355d6f1943e6f8ae5550ec0e4303938515a3835238f4ce26749ccc160aeecc0d9708be3b7f97c39cfb877542f7da5c7998cb62acf1a23ec3c887047190ff520ef1bff63234f12b8f82f32a0f6c19dd37c21a904e9c14a161ce1be3cb5e53954d2c1c859037073e26cd0038b7f8eee5a10da133970bf4f99af78a122f80dab28c18d349837d111414a1b364ffdaaa4a86a2a19032c242e6df093962c7163067acd24e9f93fc999840bcc336972007956b4b982343ec188dff9848fa549be8a13eb4c39badef74630ac7f8d0e256cd8fe9151e31451ffb76b824812a937b7d1bec4facd6d5ea0666215220870044dac6f435c423e6e1805f99ebde39fa4f9db3e458482705749dfae66cc9584b019261ddf99b43a26b20a58ca051f7b0467adfe4ed7d88e199699d2d1f73370bca5f65fa91c15198655a913d62b3fa1611221975b81f3ff62f846cab696632acd9dea989bcc76248121a20ea93bca7ef92374f59e0f8e52473dca6b224aa8d05ff8efe63fb8f230ff81087a76fe685c93b14cd8a39c53b69846d83523363a3e4c8d220fe6976f2cb50a179aab31de6796dec08d8e4e55587ed6c5d9d7a73b00dc26e689d852703c5e8db029f8f1623d3e8db3edb19d13075da29b75e92549869f3e560033d8f71ee5c7d59a8e467b6fa5a339df0032df893d81ed3433c6d563ccd5cd7c20f4d73c48dfdc51cee2e325a21ffaf79c2324ec53c24b7b4671a8ddb35df23338f3bd012cb1c092d14141e8c8169b4207b3f849bd3a4e33be0b3097c8d0493596f2f516486e6569503e8803fa9227f768411e18dbcfba0e67a7a1c7614136bad15888330d920bdc8a9b9b7c20558b5e0e42af0298a1214752cc6246a4ed5c9c7449772df1c1f37efc98590bf15e7c418cfd2c7420c08817fc074896a83d701c9ada92032453e3d6ce223ef52e6f1212e9fe865417949f6fd6f87ee1e038df8ab1b067242159d968bf357ac1253b6b6f1e7d29744dfb8e7563e93df31ecb2fc2c0a8760feb1a6d19555152e140e851c8a6b1460ac56235023324fc101094ee519cde9005326938cdfa6eb8a128db967edb6c74da06103fe81d9eb42b9539b7899cdece01f2b935cd5bb1a5674441c4e62112b23b0bc0150cf3d4fda4c084d5525dd5ca299737a1aafda2c148b28a9e1b04de1cd46bb9a39d1089a68fe345596b19a3e8024bdad25fb9cb73c2c3f092e8c2ba97d011697b6b7e2f45e4639e3671f2d7ee3529fa5b02faa16c1ca19f760e9b87ab601ab49095219b86c20d78cdd02e6d7632100b630531193edcddf33be74e2aff631e3af1ff2f420dc0338a49e7931ea430dc20e4e7c2e809a81698efc10a87e2a62b37509a6f1522078896d474c9c91e3c78421673d4059987cf2cbec042366f819834e396d7ad5b7f3b0cf5ceac60a41f3af07aad1d7fce56bbd67315d874ceedb830e563c5d986096c0e8ad3c255d82c11ce1328a9e35ec497515bef939bb61b1d058763455206b04479e7a10a9eb0143d441e9039dd2140934ae548dcedb21baf45445dab534fcfca9652c596274b3ed71003620192f1e2754ba04563a2b236cdda01411cacb6ee9acbdff9e8c2803fc626a5ec37f54ec385346ec8821cea4579d0db2ca58d6ca8e1ddee5ab40c1909c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b09c5e5d7f6711a139110a85a0a1571eace507230e3aafa33497bfb86bd6babad363a1a28098ee5ec6eef57a5f5ea8e1553f626cb25a1fee84fb135664294545430dd7d37d0358261d55349c2326b399607923af47256e3006f6be9a1b31a5a610f2282c82fca7d9e2aacb63dcd94c66a1ab45e0796f6161b29c1474b4ce5a5a034537217110b8be92aa070cafc181fedbf075bd21fcb83af6193fd617f83c3e20bac8de8eef47416d55f8f3503e7e012633f3d29e981756c3799338b807c3c1f05a13a735539bb8dd52233f6ec789fa4320a672a79c5adfe832f2f337d92d3663a5ec58caac644722addcc091387605bf03c31d18f874b1d15fe01b9826d2c9b0461dda8d89f9244340ca170b871686ead72c0f6aeea72a59dcc85f5bf2f6861125c534548436e43bf17fe0c04c54749cf0b77aa2d2eed5e1e60a2d2e8abc05121658174cef8b7ca01d1325c91a7d18b8dc8db38e6a8a2490f75e8322349c5891292d7ad405fa37806d82528bc3fe8435a85e151b1fdf1f84a5868f532008b701712904481ea91840a767ee6fb814cc3d2571a51c249d288fff9855569f29e602dc0305b7814d160885c828f8813c73f8b14b706ab63d2e9b2a9ed101d552303318a2782ee9f07fe7791ee9af1046298eda0d2bd364b019713221215c83e29d2131511cf8891eeeb9e35101f1116fcd9ee74bb944ca0b7473a6704d45e2ce8740c5237c904e44f8c390ea5afe6d43465bfaba69ea892100bb3705ddce24ee8440ccbb6b02792ad4dce07ba2548d480a5e46e5c1bf4881bce63fc0d59ced2a6aa2bb184a615bdb14baf6be323fde7045de6d2b3dfe994d2135fbcd31b12dbe8b12110f9e4034c391bd12b4f831b670ab88ed7298059072989aa40eee8a6918de41a38a0e25867b5f1ca222c32b5e6c605e70afccc73b9e42cebeac2c51d86d2181b10d50d775cee443a0fdccb3efad072f8b540002a2019c530742524e553b4412bb184a615bdb14baf6be323fde7045de6d2b3dfe994d2135fbcd31b12dbe8b12110f9e4034c391bd12b4f831b670ab88ed7298059072989aa40eee8a6918de40a9ccbc9ecc16a1f555fca2117935cc0d720603be643101832dfd64bc5225cf62f5ad83b4caa5a9c2aacdd733971989b085fc5498fd9c89362a287375520910e3e9c297edb5164abd2511940eb41e071ae05ccdb5257c7c19268b17dca62aee3002e3b265819c2f4408e8fc9e95828ed6c9f91068825bd411c8fed7dd72800830000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000138af5d8a5c9c8237c4bf92cbc14c14327c69870db8769623a1165e7879cdffb7022bb6a96467f4a082f2ec08a72d18e4524f10920db8819ee074dd8cbb955f2637185f96f3942596f1f5f5a0af86ae2fb9fc731ef6adc74829e006378e880c88126470a120588fb32517b5a92ef7e5320af2efcd3fd90fcccf053f528da95d292da24288bbc9ac99d1fa2c8e1b16b65a4fb2e812b89b645137e8670f9ea7d0f01c35176c396dbf9cf9a37b678a590fd67c56450f5cbe7235ac39da5d7b71c1ae34e6e6d9d0f0a2b9082cd73ca1b721ca2d39158f5421100f89a24ee3194e2fc229d2d43ef9d5c87e6836b0f68f679b59164aadd7186413c247e4d81ce78ec0b011bc1793d5f3038a47ad6f9a894acdfee6f1f70ead1f9d995d74c3ec818aa3bc03004180fce8ced30ce02fe114c71dd208576a213ec72faa729cb229eeb3ddb60769a1da7fb6115d82d044ee6699988fab6f68e9bc79e2a60f111f374be60ccf05d1e6e7beee05342dd3dd7bc6585706ae26ec7ab07b06036261d7da0094e9922446dc67671da8b7acbc07bfbd58f597e17f816d1805cfb646529df281695b5539d0420b0c27fdae916e09b8d7f4e60e126e2e3af0e6f18399906421a793b38d28d93646960b635bc30ac1362a1e66af0c8c8c7df134666277c865dcbf586c140a58011db163424184c8b2d37258aaa705ddb883453d26bdfef94c913bdd51310446926984360f138201638cffd70906ede8c938685624e9b67e9dbedff3fcc70cdbe4588825732b39449fab4f2fa301c0a6522a2dad742bf00bf5d3427f4bfd30cf2df8999021bbfca195585fc3eb4d026d70c322bdddb3f05ffcbc10581d360c132600463f15a48669b0f07292dfde295215aafe804edcf8cbf67aaa0e1c541ff480fb82c3f90052f99f9981b4b3288e991e26af38b4731bc7b644ca5e33653b4dfd2dee3364179fdf3c46975c0bc2ab4723651d14e69dcce85de1259f72930d7e38952b81cf9897fb9757658cb85e91fc43717edab8027a428ce171571b40230083e608b9bce9ba49f5021f43bc48fce80ded93c64646677c99f5b5fbc7860a23a25f05b2d5d61fc25b2de5be218d7ff02e6b45ae6e0eac3504030ff7a478042f24058c21681190095fe27319e2f84d22fc58db9c0f67c99d3508c8f3a1e60bebeaaf27108d87fcc57f800f756593df91e0a2868f3dda27ea9aac8d54c0a23e629317ceb4ca358edf224fd83797d189df38c6b2ff4c87efc3003a59ce75d2354237211767fa0edb47309527dbcd2edb26792aab1977da2ac085bbc965c0be34b613970b0fc5c0e25cc8b5c504e8958be8dd278457f43c515c8d656cdf9ecc01d2654b58f1db54e974e2fef0c3d2960d5f6665036bd8e67cc94a0385c54d2302515b528e951771a94b5d0461cb662a906d747faa8c8b69e1793cfc8793de270c2257ea5a8b33ae171b5e34dc19a64611c02f24963908221ca98292f3b6c38f24a012e500f7bab589fa492979fab0155c13abd55a8d4172b291970ba8c7ae0337cedeabbf05f8e23a1bf9cb80fe70c8ea8ed5c5bb454b0068b6b5eb9180a37412ade19c54dbdac6756bddeedbfba99e6ba646a067c731e12ef11c69f06a007634723ced1541a294df2eb55f96c5ece2a50debc0734261bd53ed0901ba5dd0860c01f103a703ad1a31f2014f12a05268a4ce2eccffc5474dfe7b1346c0982bbf02afe18085b3af2a17d503a87f7e6bd98bd77bfb285b38e8b1136c13cdef636902e4745a778adc6df8c8cdf1d5439e3555ae4da79df5926a0cd3ca1d62d5131b0091485d3f5206a43775cb776b8c4c30cacc5c7377248231357f34c9a00b9d133d0656d438fabe87b6a4313e0bafef9d4448b27819251e9f5a07a4e89268c4cc33bfa06564ad7bf61b756b0721ca7846b329f43f063d401bc5eac0847a4cba011ef4dd57077ecd63716f6527f0086e86052a716de78a94b12e92fe7ceb66712320e5ad617c7e377fcc27994123a5da4298a731391da2c06de846f9f3881716dd10d603f71183b8b7c9f61a0226098f920272a3629d68a35724577c8d80af63820941ec7bba58aa6589649f9b2f438ef5fad9f80e04634e71e3cd5a688e6d8acb1230fc5c222929afe214aff5bed29f0f57835ce696877d343d3b4efbb1c0d6f13245bbfd9be9db2ef9f5d6195c413d72183a2e218bb2fd265225c2a507340b6a25b19c7cd3e4850ab4b64bf1c4e75dd7c84b37a2057a301876daac96290bfb980bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb0bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb1663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f216211fa42639b21ecaf1ed4e983217b62a6709fcf49a5422b064a6309c8e2c557662260f666d094d1a6403be2dc098fb8f586eb4ad8166745ba69d9a8268d67ce95224688bf433df1ae089e293b28e241cab5fcd9cd6a27caada7343d9684dde77a20de236c8d5a6a0e502a2e3ffe172e2714300642e4b9f8986569c7538a0b81fa33ee9d35863311447a1f0d41296828ef14e845415c2e1024c8b39e27624bf3130d97ba61a8a2316eb79f39a161619e8bcb7a52eef1358e006dba79ce51baa33c10c697823a4c4bcf76cef00e67a7c4573c7f2b17dabd0fdfacb93a9679d4e8a211bd6a4c417911b42b7f4e8354b2a758409284328da8c61546bbaa13ac0ab63936bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db17a1dd82353c650035565c7bc00d9e983b457e8c8e8400815db42975e7191dd723725bf4adbbbe02d33ba140065e3e1cdc66f45df62ec7fad6156e418389100c36bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db16e08890aa848dc2cf6ebff393973a719895979a2e346a08da82cd7f791497511f9a4131e99449698ce8ce1eaa5edf794bef39d7950170d87650c3653eec76d50bba2f36522d59ab82ede2c4985d52a8c1af4cb45768d4d34000a3c4b4678bc92de546b81283d93d323202c8cc923733cabbcbd1b161d0388443c11d1282ebd00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000119855653a92b5b37bc84430dedfee92e5fa2a1627ef010cc358ffc7ca795f8ff10f91417ebc5fa0a82c0fc211c1ffd54bfedcb8a1eacc12001db3d3dfcf6410336fcd7247b582bd4755c005b613b80ca2f8820cddcb43e242679713b9c095089132f24b896d0c5362ec7896ef900a2aba3d25adf53f77108f34a222c4498678214299ad45294b6b41dddc527a1ae46013a4622388f6d3f7fbd08cb5da0b408e8111e3f7e1b77c40285c0545eb39b341c4a7f097d9bd852d41d534ba5324d57cc066debc195b53304b7c8f3785ea52c698fab1c33036da1aadb1d57d46a57fa0b1b55c2439894e8561eecc4e7337a6c428414211cb9e391ff0d1e54a1dc8492741382fb675176bbf903e404bdded09f4a79609c13f8dd0adc9bf398380d0643c00e803f15245b8ee7e24b7a7c9b475907f23b775017e95e80844dc3591d4578e518f961d2961eace213ddef4c9fff847634c6aed28ea2b36c47e11aa8476227f61e1a563dba60b85dba030b80ae9ae90dfed627a0c3282e96dcc4f6f5795a0aea303db71302220fdc36cb981571a7a39988356de91cbd34414c176a4cbfbd0b1606547e6644a457d54b633df37048afd98c0a7b53fe4373e2fe2654b7e11f75890f4a5c550e927e552d2bdfb5ad5b579ec4d13e605ba0e8be836ec282edc0bc8c20e9dfe79ff700f343168ec6a16ab1dfcbd35a3498546dbd3834c9a0c16f318722b5bf8602797964cfe223f7f39caed228cef4a518f6375ea58a12923cea8cd12d374dc211ef11c761695eab8bc0a9a0aab656a0122a5f78e1d299ba93419f1a0d1a3a23a33ac356a53f60b4d8d4635586b2e25f81d3fe22d36ae75e7cf442be2e35b50d9687b4c7d820a14f2e63abb3597f2ad46eeef9d20d6372707e81089a184020a4fb3d8a714a4f626e3ea5bb356c6ef4c6747cb8aedb354a201f92f6e62176aab83a16b5378cbd7456d7163bdaf3976424bdb7563de4371f703e5b6e3c05a54c3ca90caaf0882824ecae0496d22fa11c473eb0fa671156a4345449255933935e3d12203a4564b3f7bd3e5188139552f235daee4ea1fdf45a81915341650b88d5843256b8f16a31985616cb634b4a614bdb510b92f6e2c2d2268695cf210ce82eabb395d8486c049a6304082636414c908c415de6ca846f31620d3fe25903aa258c4f5cf8008e3f972b21e33b538622309766d0a7dd0cef851a07dd74421a435475fb6ab1e7162ed84df5693d343dec523b4069c64b9c89cd0df7fdfa610bd0cc0e4bf690b74cccc9f4da3b379896be27c571590c67e76971b5caed42ba2bac1db6f1236abc4a0927a957c66dee1dec17d2890ebbec9617ce5b2781620303d3d397302499301ec0ff0a2f2a6171831491c3c698372840da2d0655b68ccf3cadec78445ae88b4e7beec24095bbdae8981bebc7a1b4ea4fbefe3effe7f40f02c35d2cc186cb97ee70cbab620a055322aae8a6337a853544e15a280f4a93972f17598b444349e9adba8bb649ef188d910c0e3d0b79989f0f8604fcff06ffee3220e40b6e3b8bd5b56e9d049c833f29339266b485253e9871760ec1a5c9b1522a0cf327b065fdc58065610095ec4a60fd601c623a664c5cbc801b45440faaac201a60c7a9c8790d2e4b2ead49dbe70a7267da3683781a11f5f64e49c64a1b472c4e2bbf32761299b938962a6b3e204de7e452718bd691428f31b78e05d97c3a3d732743c82f5d48ed9a893e0be8edbac1b2687ef0af6b353bf98639ede4427f240f99396e8262647d1ba5ebb951165380ed43913e404c2172eece648b8f431a0e9d13f24d8f4cbadaa2dd0b29bc97e0bc6655051cd7ec595ba8de236553f1b63eea4050be3b1b13be6c78e3df2888e1650abab2218939e2b61702514684dca807e123367bec5811decdc8d749c29c23b23750bfd52fb11e10c429b7d98d419a06bd7b4e1dd77eb398b7f72bfd3e106249cb9737d11d912acff5585563a76e991bfbb9289dd155b42171679d712ab8ff9c4333bbd29764c3031ef81e91eaceb23655e9153f46b97ba2ad0a01a65b132807b0cff3264c4050421e3033d3e4307c10c685bb1338e347aa2c5765e3d9ec3d3b00716a4ae009b3c2120d02fc58526d3db2f9de3c0d7d640b53605e1cc84df1907e3ee914a236e7832439bad289fc523378d8b5238ab2438e658a8f45f4a8ec8f007da873d23e81eefea7862b977dbe26660162bd1cb7ec1dfad6a884665218c6c67233f897f80a722d9017bbf94e090087ae544ea93498c65afeaf9509667beb82df3516b3d44d414281f416174e503f7851abb156cb6739a501506af6998436c3b9c6f29924ce57eaaef8e9e8b1b102a667a5894e06fbdfc6f96de92f006b998e5c0971832582464c89c46e7487903d59985a76b1f9042039069216d0ff9488b83cf297c9d39952e0a728918b78710d40063bae8622eb5ee2df258deb0219ffc7cc2f378fbb8b5f7eb0d62846a5d032bff9c45179dd14a11d20da7214fde6227eccccd1bd3d9039ae8016d7b95a3102401f2a689eae98da6e5bbbc5970a81dca063f00c81b09d444c4341c9613d0f3dbfe0d5976151672591a4443a68f57e45a6350bfccb487e54e0edab369ec2f20087ae544ea93498c65afeaf9509667beb82df3516b3d44d414281f416174e503f7851abb156cb6739a501506af6998436c3b9c6f29924ce57eaaef8e9e8b1b102a667a5894e06fbdfc6f96de92f006b998e5c0971832582464c89c46e7487903d59985a76b1f9042039069216d0ff9488b83cf297c9d39952e0a728918b78710d40063bae8622eb5ee2df258deb0219ffc7cc2f378fbb8b5f7eb0d62846a5d032bff9c45179dd14a11d20da7214fde6227eccccd1bd3d9039ae8016d7b95a3102401f2a689eae98da6e5bbbc5970a81dca063f00c81b09d444c4341c9613d0f3dbfe0d5976151672591a4443a68f57e45a6350bfccb487e54e0edab369ec2f20da9914a1efea3e5e652d1bebf32fb2c4a8339fdf7e114fbb9026c3948d1e57b2c9c5447ae1258463f3aab447a9f9906b7afbc722f2eeaa83dc7e2d2b05d15551b32ecdb06154ad4de0590c2867c0b6df9c5abeae1a5be2bd2c68bbf2f7682962ac0ac6f9b58736d8b9902a0567227960edc30fc3065398d32cc71a56204011925c4068e93fc72390510b6dcf7548b9fe416a538e12783a0801a41c7e1d00a490dd0ae184d005c939bca7b69cee29254f77bca2721921649c08956f39f7f26f8216eacd9888cc8bca9478fcddd3ab67aa2d834db55bb347387aece5067ed2853344786f08804e466db8b8c9e644ddc6cfa2b36dcc7c728b7ab476189774ecfd535998f1a4af402d58a1d3bdbc15b9a0d1f4a581b877c3b1611c4e89b0eac481902b6d53a273e12c7cc35c2e499ce4b6ca3422eb981e069145cef3b4f05f262113f22214230e9aae720d7c4fcfac7a22be206e8e953d0e945cde4803b813906033ae491c4d89a8190a659d03db77bdb9e825b902128ae97c5a97d5c752b29882d172381dadaec11453ba79d7eba50f965ddfdb3132fc625f40d6438f487b797f128a2ff48b695344c352c521b2eee3f637e014489b305ce01c1c60d61ed9ee9953f22214230e9aae720d7c4fcfac7a22be206e8e953d0e945cde4803b813906033ae491c4d89a8190a659d03db77bdb9e825b902128ae97c5a97d5c752b29882d12231646f213859320989493a10bbf7640ba070b8ee78c8f375bb5dc8926614a1b166eb91a9a40a596ab9848fc583b711b8ccbb038cae98ea601b29dd5a12b9c0e968dca49b9a68c9787830d6141ed42c931b1f31b939e598cb93a6f6c3e56f91237abdca3f0ee78c097dc1602592b994c60f72ca58b7892f81a95d973d8672d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011dc4797cd50639f39c3f34ef7810c3b7c7257214aad6854b2137a6fd72d5a90b175f23f6556b0cabc02ce6e1fccc7a3e498c9d027647c8133b68f35c7fb93bcd2d82432244777e2efaa9c4edb325942f6f36c5086409a6571a58c671d416d978314b14fd64651cfe79e100493969e59cd108a415d3b625cd3cace16a7d5109ca1ceb3e9fea25ca8c979df9acb0f3fed3b765bc5bc3cffd49617da66c30d1730327c6b1b8cdeb55bbc7ec5eda6e07f3b9f4e850b9607d7cb70a5eaa5098854fb73258845db47032802d93b668bcd91609d20ec10b48e80a664ad046e97f6f96ff34a9ee97affd509c6c064c8d24cedf9c1063ade15105bcb9db0542c6d0b65a7e0eeff6dd112e801da783c04575f8066954951299747c33890166c36d0290072a07cf65d7454f5170576bd2b1482f71fa9cd9a1ec558e680d3eae8f30fc1b084b2afefd14ba08b2449f6b810fa740fff9088e3c135ede11c583aa686bbb3662291c06878d9f6fd731d4329fead761ab1247ace036e7920c294a192eab3c069a07359a2794023f44668dbe7b560320e71b338e557d219c86f02307366a73a7c083377152da278e88cea3bf0c0809482975d672fdc1c345052a473bf0e6d806e3bb3e5b4fa6c296873fe8316cfe0f0b90930eb2f5333c66c845fa00c15ede4038700509246b6d31e6782e9648929744edc4e894e31bca7a3b4bdb744be64bb2d2a61a5ceac187d72d81acc0341bd96ec0acb31a51f0b9ac17855c1bc1277d5be4a93905c8c6b5f3a53e3a0e60e5a53fa5e5685b1804efdcda4f902f8b92fabfb3791f9f3121f079e75590882dbdd5613220f3a7adc0b8ef4b14a718459614a44ded3c8bb66083ce2e95c6cb7ab17e5b7851113eacc3e43af40ccf5405daf51b1a070a0a59929f82b6b6e58ef1caf246b2e7a155c7ab90fcbaff3abd0e3c61230caa313f6c985dd93d39c7ded1fb53f8d380c2f7b9e12cb45e3ec093ca97c07c9c0f09c26ec92534bf1ec5320b07cef15fed49cebbf8545ff499ea6a42ca1fadb63522a8929c46234c715f2dd6c4dd0b5be57744d3609f4038ef7a4d218c0db4404e0c12b5c0d1f56add6d0defa435b92c14fc4f9fff8b7fc2ded5db83b0f678369f34eed586532a6af17f174fc7ab3956f89661b3f833cb48abe681967243cb84ea290687b47c9558cef2d227a891f23bed95ba6255bd559d8fafc947e100a44edd010f983d905078a1c1a4a4844742f545ed89890e7bb0a43118b7ae9d4b2b13e537d3759338aa84d1f1f00844233b23cf2ab9d85d136234f95b8d1cbda50ded2a133938aab9a6f04b12af64b10b31859118d3425967a97eaa3176d415c54bcef72406d1b89bb1eba9454d47c1b8686fcdfd044c02f422780022d2c18afdc43a2d190bf1afc203821fdbac49b707820b0147d4726618890cf968fb21ff5d3db1fb31179bc0ad934631257fc9627b1eaa57dff968ff6dc984b8646e184c6f6ebbaa0ba9459ddbdf5eba4a9fa5700066eaf607a6e97c57b6d6b1117f9b213c178c0a186988fa35e573a7539241faf775223dade866310293e1a93c495c2f855399040cdaa876badb1097b8b03f87c81a531b949950778ce40e3f9d001f736053f4b23d3cfa66702ff7b5db5dc529bcc4e0266b495ea6947c663f8a8f0ec73d2229f52d732692cb984977673bbe9650c7ea1cab36d8f54fd3afc582be9d95fc20310b1ef342ae7f8a882d64c8274f88b08e8cdcc8816d637700bf474fcab770aa2657159c58bda25169b53096f8c70d5cd6b1f7ddddfe64a74c5422c60b030984cd721caff27d6b0d3fc97face67f3b0e7fc931265fd3a4af1fe299a95141d22b19a41420cae4e4ec4176f10b53245dbaebfc78948e5d886e8a2a289c6cd87ed0217618842bc89dd2fe3d0093d2bb12c4a976853e274e6f7e74ca71fe989ae20d3d8901cd90a76e52bf5c2cbf1be936e265ddfa8e325f9d0fb50d2191546cd395276518b2cef8826e1e42a917f710bc00fb57c1aa427c00d85045e9d07e4dc26058db266651bfb0e979dbe2af5926d639ae305e58cffd144ea917ca6f049c8dfdbb7a37f994fbee372e3049401c4323c1828d09bf08f6525a869686fb9773135a1eb61b2a459145612f2357da92ca380208498d3a2323d4a3e03ca5d0fda896eba10b0b15dc385f7b11c71a649b8aac603265747c2e37fde1b6af7037920cfe2074262d8dac1d0183dd67426b1be88fbb8c5f0681f39c5c0e5f3c75fe6446ea7f6a7a35fdacfe5d9d523654e968cee4801bda3a702c8d324eb684cb8f198e119c1ed40a025301a262adc9ab1697311b7fe425e7d66c6ed6fe4296cd9e175eee63e12d0df460f7d4129b0fa88f0c0a76808b429b167ad1d655ac299516bc12580c9a20320b9f082bed64f05770f3f5897f74bd87301e2a32f74cf2041674daa7f365e105c5e4d7245d074e4acb3c345082b84ce529cd1d265f63b450447b6eb83f029f3a3a1b28dba2f8b1b534c3cbaf7d47b33d1ccbdee2ed956748e8b57e47c0fd621cdd7833b5d1248775f82d05928d998079d10191bfdcf28591566929993b0d1b232287cc4a2edb788a07d2fa6d72667fa875976a4970069607d6c7c366c4f2e635fdacfe5d9d523654e968cee4801bda3a702c8d324eb684cb8f198e119c1ed40a025301a262adc9ab1697311b7fe425e7d66c6ed6fe4296cd9e175eee63e12d0df460f7d4129b0fa88f0c0a76808b429b167ad1d655ac299516bc12580c9a20320b9f082bed64f05770f3f5897f74bd87301e2a32f74cf2041674daa7f365e105c5e4d7245d074e4acb3c345082b84ce529cd1d265f63b450447b6eb83f029f3a3a1b28dba2f8b1b534c3cbaf7d47b33d1ccbdee2ed956748e8b57e47c0fd621cdd7833b5d1248775f82d05928d998079d10191bfdcf28591566929993b0d1b232287cc4a2edb788a07d2fa6d72667fa875976a4970069607d6c7c366c4f2e622e1e3e0c2da50d7d1f1c4021a132e35e8878c4f713eb748ab3427d8f6b72d570ffe719b1ccb76f3263f6bdf6049b018d0eedfb3c918d560714ccfe6f71b753b3a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f21621663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac5377081ff8f64eeb38aba78d10d3e83a080413ad79e951fcf6038959643c52ada2ad9f13b09f574b71da85b15d3abb34658f227e01576acb02dd2d56431d385d43a42da6325cc108a912bcb06aab5d323439e43203745734a369ef5a103de9863110b0cbe842a1af8691b0e23b27f5bc34a5ca91fe7418b3932aa6441e1c7d0df06c5a0ef02911e040f765ee71384bed36e78e0ae3b40c85a028f4ce699d6a07c1ba90ed5254b289cb51347547d2f2df8d9c8d92d37b90c6f7bab01c63fe3e74f00907813eae16d2b0149dd3dec4b0fe6f3df680e84f010b22ae146688cd1e2b507a36be71870ee0d0f16f09c5fc3ee7f6a569ed8c56b2b20ec67598eeffda89c22f16e7abb763ed14185c019f5dac8dc7acab2e69b57566c94baee8f1a39b14a199dae4ab392dabc2debda1f813f5125daf66e226aad562736ca6357d2c3000200907813eae16d2b0149dd3dec4b0fe6f3df680e84f010b22ae146688cd1e2b507a36be71870ee0d0f16f09c5fc3ee7f6a569ed8c56b2b20ec67598eeffda89c397e08619c655f78605c17faf4ad123b4f78f9cd1eddca9a21a1834116aa43a91fd13331c06f24a63d10b2fb16b844d5b689156e8c7abf5c5cb9d211cfb6b4892eefd583669a38c5c24df6a11f480751df43634c58e9ba096b7380f1358316340ca9d94a8f94aec38381a83bcd0786a5bb64dcaef3e0aa356e98dd82267692aa00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001026032bdd7d9b7ffdb83b66776e0f195bafcedc76ed876981d2503b5867429a70c7cbccc220deed40a54004054e9dd47c2b0cac74586224252808e7ecaa858801990b1ce63d4909ffe9a3bf868c77f101386c395765a90b6ab1f98eab1b2fdcc2082323dac448e912698bbbd54f8118d84473241bed58cc37c3da213201b642a2f5e99d300159c74fb2963525eecbfd57a48fff09c7f9911c684b5005c2f5b6f1eb177c3cac8c0f9fe1c5937d8f92f683f9bf810ce97bbea8794b06a2b644d6a0eee515e7828881edc016f3d93851bec7837cae25d48d89d8d33f7c93c0318f21d8d3e3ffeaee25dcd6ea6a176b0d0d773416212b2bfcf817a0d4f59601f3bd922caf69aa34014ba5104e49e7f6163bab1caecc34ac7dbf4e23832fd08552f8b00ab78b6d1d16674f984222680c05561f7ff2f3b84cb41b78d8621db55ca9bd41be2e022eb09e09ab8bd2dedef3e2996a92a40b5de61f38420d2f046f1f562922c0e755600863dde74dd98dead3f4e78540648be04c785a6392e24daac600bea3e741acc1252cb988448da854fa62e21d981d1e83d2102e88d677801b64c04ad0b286c13422fe1eae734e355c52620523324c6c9bef939d5545e6cd29806f4b43a7d039aee8e07e40e19ab27c674a0bc8929389c00c01fb4efc1904a103c529f2ed93359beb4cdde6898a4b9ac5ebfab740676fbf154e261c64b32e2b41fcc530b603bff0a03f69520fa77e7794d9701b177b42bd66886dea86c741dfd9a1f1d2065f59bb72d27bd25233f07f40b8be58e7df3c6d4ce48ef22660670eaa0a4a80935ccfe056b1e32501f50f099808e0370b8a8a79de8c7c69881bfe806ad5af93012d6884e3627268b3a309f4654e2447c82d015030a79781454465728fcdfd52f4bbd872e0d110ff686fafb6b52ec7a6575bcffb14818fc724bedd1472e9b541f36c346be95efeed94ffb6beef12f67858c108c764ca9050994a8a04e46e4502b3d6fb9c3691371c8371c92d983b28ffe8870d1d43fb84a71287bcae2e0a3be37f82c8b233857acb286c67af6cedf8771b342101fe8a7bbf0fcc17fded4dd78080370d3a2470a62b4d445a5f3049829095c9c4652bb1c3a4d40d4354f3f8fdd0dfda4002fa70be16b6f36286af41998227f65b00b1f3d5a4bc1ceb92e64f52c0b796145b31f7f71c363e4773e17362f40075c5ebb0c08a8f4e1de7ef77f46e31a0a0605d0de3ad5e54da84c8bfe96898d7fee596326a880d7adc0c87e27ee161faa67c3d1927c27503929236c412304118072545c765453ed372f7a657444291940514a3293792779c02b42bba82004bfebc64132de0105bce6ab0c2f85d2d10ef35fb22e49eec9ca6a1d9c93cc6a7710610c7d0f68616a3ba8b05c82a8615a1ca3a0848582402f267f866f40046baf466d0d8f220e8b766531b037704142d11fd71ac7cc3f5e41e2c50cc72c1dddf920008ed2ab47afd434084a1b661f90bd1730b3e79597b145a9eb98bef8e5d6b12c5ecf68b39809cfe9111a9c31b8e9e31be3ab015be7357c0d936ed20dd35501e3f2b9ef643558e85858b815ab2aad5c23890207f9d0282fd0d5cce79ecea876c62ba58a58e0cbdf6ded23a141c4642a3afb82dcfd0f689fd01dff2c258a78be1dbee198b204f019c02750f5f2a4b82f0e9bb2ef3ed3aff18e412556061bfbd0afae913fdd8adc4e514d7998e6719f0a18b13cc12f40f9064c4cd27dde7f7a25fb5162eb114249fb80076aac1d45953e16aada71bc18f6fde9fa593e5e675cc2491961aaa53059d1f9cbf1c93de5934f0c29593b4578ccc390abebc67ff9b65019d7025d66adfa5dbb2bd7ad54192c890fd771095404cef6635c7675b447bd36d9b442d1da568bdd4374b47b739182db10af14d333dfb9e7ea0e7ed83292a33f5e0d89852f73d4d80231db5458c61dbb3a25f7e9d463a6d07acb4311bf33b5de14942536835f32c7256bcaba3ac55cc32ea9c8e875e9f424ba462bf48466480a275a80defd7ed0e7feebab8b8737a51232e6ca2f4d8d0debb2f2b64f96f457d77d05b5ba8802b8fd0dd5b5c5c5757e9f3e16d862332f3bc7feed9cfd89096b94e53e0676c8a66dab47f4a5fa8a64aa862aa1abfeca99e681435a70be09fc6468cc578206f71a1bcce11f7559d801bcfa064069818e794c024eb8474e264a2f58ef3f0b4ccfa907e8875b25924d9cb8b62e11df3ab90954ed5fa0d101a9a301d7fd8e14cbaf1884b613178a9265c70de422349581c8414f9f69c009613dbf362475871029f1b3b8225760cc5a952f3c8b1dcb6a7e37beb060963ff69ec240c9dbacbf88d2179940f941cc64926ad0c3762b06eb88e9468e1d10c02ee634bc0eb607161ed9a5e8a67482899beae9ec2eb514f9147716b971e2ef3fd119cb43f14a1b307a22636452a716a395021613d14c172299ac8e60c69153c0ea7f07ac498dbc9acf4c21a454f3c12878cf919ce98628dd6653719f396eac3f1580f853b67265abc9afe7a8a427d804b81d6e63167b33ad005ec7e3e0d6a2c4947b265d6fc48cbf73809ee8afa72c9d2b20d8108f9d0c52ffa1381c1f295d3b6b84d9a2903b9587257b6a6449746c9005cc27ef706422349581c8414f9f69c009613dbf362475871029f1b3b8225760cc5a952f3c8b1dcb6a7e37beb060963ff69ec240c9dbacbf88d2179940f941cc64926ad0c3762b06eb88e9468e1d10c02ee634bc0eb607161ed9a5e8a67482899beae9ec2eb514f9147716b971e2ef3fd119cb43f14a1b307a22636452a716a395021613d14c172299ac8e60c69153c0ea7f07ac498dbc9acf4c21a454f3c12878cf919ce98628dd6653719f396eac3f1580f853b67265abc9afe7a8a427d804b81d6e63167b33ad005ec7e3e0d6a2c4947b265d6fc48cbf73809ee8afa72c9d2b20d8108f9d0c52ffa1381c1f295d3b6b84d9a2903b9587257b6a6449746c9005cc27ef70640b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc28a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e8726c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa13ecad465c6944b325598776b427052e58c94c13e930403f45b0a408f56709bd70656a0cf4c32a485099d4b8e3389c827090d82d1172db3667feac40730816f1305cf217419e4f71e44fd795ce3ce932c1a1bc93cb728baa1d0df0aa69bab501424287a8653234caea67c56793cdbaaa0456cdf7b43e6c05ddaa6c0253a47d6d5040a5288c7f4cfcfd8259e43e9af00a99f1296f2d19b0da9d22eea413fc016fb2df7a41daa41939712174d67499152bc832f079a0136eead02e44982e442929e1b00dc3610a9bbfbfcadcd305379400e30def6fd40025399a6ac1292daa557403929f857ce3021a1ec2c9bc89b76c6e5277ec01edd2f637abfe35990685ae18e0e1a7ede4b179257211a6cada714a7beaad368ffd2818c744f6356144d0c89eb2e4c4d322add4454a75e3e1e6faf60dac34f7356ab65d2ef20e7ba2e956941db1b00dc3610a9bbfbfcadcd305379400e30def6fd40025399a6ac1292daa557403929f857ce3021a1ec2c9bc89b76c6e5277ec01edd2f637abfe35990685ae18e050f3816577d1dfdfc2f1335a8d2086b31c2b7113b5c78176d8e7206458c2e9d21100de44a90c742e7239c06a9ea36ec9ec3477fa9a1765acc534ee4953fa74e3779a8514727f35500631363ca088e12b5e440a11c5196df6f7b1d3f0dfb347d33c712de6dace1a342255ed1feadcc51b04401ff72de0eeda55ba84253c2ac58000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013ab3c6a304539caf8174716d91fd0748ecd1c02867a2a9bc51c1ce339c402e0f140c5a7692c13bf29fccd79fc7b59c241d9b36c2138c8451721e79d56ee3dff938b22df9786325aad82e7706fae9df40ea43092bca22f78ee771bf95ac3be33c1501629162ca64dee0f707aaa90c7d5630aad867eb70aebec0df2a9e8ddafcd31c38e8dc2e0bf6d8d7009571c756ebc05ab11e0c052f39e2471296d791ba9b7925f521f30eb5199257632af18058066eba6082f631bd65426a04f3b41cdbae833675729934e077328c1c9224e5b8f99e0784d8360e1c7be45f78bdff68a0fd8a1b1a3483515a690a9322491cedc5b8ca58505d85ac2eb2808d23919586d52c0a1e99339dec81a5cf32006c696165f2f4fdffed4e31e608892dc7eec12b057c753ef233635e87dcac82ba936d53be6b9c25a0354ab9efbf996a9e31cf6796a4df30403ff170f8453b93209f7212e30e64bdecf1f13a90827f8af5271a803f9a5424d8c73f137cf21e26e922f5445367962e2e7d9edf3a9d99dfc99732844f06b90a7606c3266196b06f6bcd6ca8d7426ccd0da5cadf02eb5cbb8b2f63c7bb5ad817b2883cf87686ba01aa44b95631e5814ab0a6ab9ffcbdc888d1f88d166178441b0d11e7260ac976f1eab0194dbd2862933e2d75d331545584286b4d5d606f0111e4315bf57734cd08d875e9d166dadb8b98f5c714d29f1d7b659d4171d25e040c48b3cb341b205699727da85b9a6129e38b746802999a390a83c4ee15498d2a0963d8cba260134c0c873ed541ad2f9ba37daf7c67838a3baee19647679d34600f49ac0c3bd3a2429093997492dcd565dc5ec93132dd4a5acb7d6670678e397b251e4c427a5152a0114236c44f600f8a7c07a91f2e1fcdeee3d1606a8dabb0c820f21650aa5baa46a61de66652adb1f204b520344cd991715763b3cae77d2bb824e63f99330d2cb016186b40067d8d254a2b6d4996634022db437e13c224f5520e84f1e6dfc9fe5fcb4b97e73380a9defda1328e41b72cae7b232ca9c876eb111e94e1525b3b070973a066bbca258fab3e293b13ac0480c935ec5f9cfec9c2053f1f873ce2e8d95b7ad6769d85030c70a8892dbf02c040e85cd3583ffa3e4887126580bb604c6c0fb0313e8183042fbe1d97413705c6d8214de25979fbbcf04f1cdb853465888cea5cac08957ddb880c7ce23ba26ff78a325ed0138d492b5b552aeb5ca5afb2895dd83e3c55333e671d9c27b9110d3797041767ebc21dfebe480c1ae22b9ef6aea0b81855ee84aefcdf54724253e1949c5da3590718fb9260193b2aaab104f6a221fba503b915c766c85a59a8cdbc20fb5e6a38390ba511bdea1da5d98c792e3bb6f562b751fe604f1226528e9a150fc23e03867dcaf7e88dac13c3a6cb190ffa51dadc8b2c77bbd9df2257045332aa63ffc4d517764e34a08f3e0aaa508874894f35d98e97daf4c4ff27bb59efc2bdf0c992d417ee02becd6026bb9fd357878b46601a75f300b9b22088a3993b35d8446b99bdc2fc5439ff8727276fc450288daccb3c57c6b6291e9682470bc3bddd8907da1b617ce139284507887ea83f631f68cc1ffc026db83015a119266db552e323667f7d84f631f2891a5a3f384d050ec2d0ec514e8ec8d612550130f14d79116b27204f374a77be092ef0466440c54d709d37091e8a0e5b618d8ed232433aaa2f235ba755c5a3433c1a24d5eec5523baa3d4ac4aab7f267d029c4e92016191eecc8bf936fcc0574910de4a7370b5abe0b2678f3b109a6b29f888ee2469b55c80749a23fb2bb24b81f2547d26e911eccc7af03e9470955b4e5a9708959ac27f0fe1f9d003cab56f7df2d82cede978c24bd540f0cb28d0bccfde338849465b6fc0d3b8ee6f21821eee8356bcd72f389fa174f007bf72f04331d264019762cc6c52d3f6db1f76c29bef925c229a6d54b464d8e9a3f18ba29cfe000b98eff019d2675c348a01d5376763d375ff5a13695e9721d8353d7e34a67bbdd3eac99ef5311a7a8fe08ed57130ca532f2c78c5af6f059b467f597f5ac87cf74e95c0d7926402a3d88874168940f2637c835ff75991b61091898106cb0bbc56f8cd4fcd5c1b35305ab78773bd55dd027b5d62c5d8a56312e6528e621f40fbb5470a93fc5a1f574c44ed0035e02a2183d67eba4b7ca818a4b1e96943c4715814ecd7e0aab01cd8b72c0ad116ba1d2f42b872fe0d0a5ea9243aad32f68db51897ed60756f633d76b612f87ede72d661c00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf3cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da71320fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf236305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf3cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da71320fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf236305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb0b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4822d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb1dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1971ff13de4018ac2f204d8e0cb4a7c30f750cb2b2ec36ed94c33f890ef98225aba181ccd4d1b3c80f4b8c727f6526322ec76bec9aa4b2b38cf1447328166df4fe00804a96ca16c5a8c7e9573fafa97145f3de7ef8b9a2c4f92876ec904cc8e00d4243364fff85335141c1dd1584ef14afcac6b8156563c1859d08fa716ef4bddf906950214b2ea38a5f0f7c7a5a6a6ee9328253d0e0cad482ac7e284531768c1d903696c13ac367d18219cc9b7f7bb935a0cb57b9e7d3ce80eb9cf043b476aeea23b371581b99384b87ebf50a3233893e1b81926a8343faa5cdd11a28ad748bad3359e1e56f9048a6cad77bb79ff4fa19cf2f49f1f3cda8d9839cc3e751b48e93929ccc29d5fdca54237500629f8b665e1a0a2b8da0d73bcdbe3ba78313c766d853495dd25ed74aa44720598ce08b31b8d4542494e72066f37b2aca7f0b51fa1f23b371581b99384b87ebf50a3233893e1b81926a8343faa5cdd11a28ad748bad3359e1e56f9048a6cad77bb79ff4fa19cf2f49f1f3cda8d9839cc3e751b48e9393d42f9edaf7b353d72b4f5705136b9544064463b70cee08fb306697083486b4f1b8a58b763a9292e92394598721020cf3d45bd1dc23574467f0f344bad60376f0a58380a94981b87a2e450aa1b995b9557c678c3630cc221dc505112261580c2068325cb9b5386cb1fa9f320448cd271a8e04d76cbf7b2986baaae410994cc94000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011cc51988adfa9bddbf04825e0364b0d6f78985a7302ca7f0f40abf0f0e194c9419c740145c297d228294e49ab0a74dcdac5107ab7147aea9b9666cb7818888050f23e6f32d636615bf3ed80f5d52b390300856755b4435d1228378aaa53af5d117945fa7911b5084fbfd1cbdfb91bd187259f5c50b13c21ca5f0d6d33761d4ad245ef57a3800023656419f40762d7ef573f8b632116ce4752fd67c2b30ebdec106ecbd33771d748e21ac89f798906235cf547a88bd0d15c6221cf1da6dbce806185437524ed7a9e5a54cb9da9f4be9be8ef8817e38dacc4aca8fbb32974b5487011dc8efba17b47935a9f10b93f7f876fcef86d2f70becc610f80e40201e619a3f530f091a8d214c3c29cce1c905fc3f09cae923cfdb4e05b20ee4a1f16724b309ae5be93a7679e40e9f0e0cfbbf123a2b04674b54fda7764ed3e1900588d3510caef3124b9e6c78e982f2b8ea2ab2ed955c4eacce0ceaff2a6d0904778bebf83e6b3bb7b3f865b5c8eee07f2c07977845441ee4110ae576cc3286d0bd9ae4071935a2fad27af26f8f8c0867034137f81634a36e5b935117c4ccebaaf5d736440e845fa7cc6ee2706090567921ee47a6bf9f871f68bbfabcf5caf023ca66928b1f7f253cb6289b9d463b12db4e3777b354c00131672784a8327041ccff367c471a50ae75b7ac42282c922e51b7f319ac23b9ad6f3aba4775e2cbc9baab95eb1f2f0cbb0abd9719d8bba3d99486596344f522850be36e4b4cb2aaa9f9e462ec8b177ca00447e5bb513462e473011263ef82bb902d23f5902efc86bae6c3ac8e7338039db99a20cba12fecb88aa3441f43b2056c77d815eb848ee15a1f309e02f939fa82249f2b298caa9f5558a812dc4adbb50cdd2455f7a26f4b3223f8ea6d4e1d52b98d0b4d83e6b738a4adc5782a37e20310873eb6b807cbc330abc93709203e919578faa754cd2659c4487762a0d367bd09f5e2f3c777b2495b78b67ad75f2407966530071cb09b047c9e476000ef7628b62fdb301f891e0c40cb5cc5e3bf1877ee09939876de919946af38b39633a65754fdd482995490ed826de848e2c31fd9336d69019fda986c1ca431e889e2a082505bc557fbd43b799d00dcdf670037d087c964537c7f4c6c24bea0f21f46f105246cb418f96eebe7559a190c9dd43d6aa1ca48475f7a7ecca33c8eaed0f24d6a443deef2c127666a466967b87c7223633e49e295a253db94b12b9fadcfa5456c4c69009332b3a35be6b44f65876e369349534cf6df747b73d50158a38aeb7f477cb866acad5277cbc578eac412d32bf0cd032c2d8e149f5303d345ae831b60e2bafc61efac80f52d7e689e52e8c70857a39242466c4058487f8df987a06d1abc6cfc08d01927e765085eaf47e1c206881c03c1f3cef4999d4305df16971770c08af7b9b66debc25a88215635370c26786fd3db8825bc338b280d453faa87ab32e075da25f6b5bffb777f881faa5a2d2f621f1ccfb40b6a58e08505ab504bdbc677bae9a7ccc141af2c47065bba91138637211487e10d96fb6d68a8813794e10aee194ba2f044c63a763e315e24742319c90ee3ad05b475c1f8cde24d41202fd1525a7849536aed8e6232c68f51de281805deaacb59e1ad5a66cde72835ec1287ff5347f11b774c1d792705a1642c3dfff2d62b613ab66a9a14a34c6347c440cf5ff629d2d91d3de8280974cda6f726c9d34677212e7db0a583a55ad83f819c71dadcc959e6294523b8309f1f0f431fb0c80810344c9e92ef891fa947bfcb1c5c0bf95e195caf51dc38e8a47a1b280cbd6854c1a4d2e84aef8f8d979fd10c54622679a5b77a214decc08c70cdcaf40ee420fb9486f4630464a102d312fb3fdefadfa41c9426038118f13aaa38fe86341139c9939fe2b466aa3900cfd9c4354133c19a3d1fc72fdf58d29e3ab8504909be8b92d4a8e8587de1661c7c4347f0fb3472a3fe9d31827e278b83608f364a13ad4b1c2ef1cdbbb11936639f789a64f5b65b3f8e6df8d9365847bb5956f1331acdfc34cab7cfbbc3655ba0a379c9560f174bfdfc84fcd725cc378c9010d97139663de3a45c5c3c390a8fdbbdd7dc07bbb3201bbf9b95aabe5f033f005497da061c3d7f82e4975084a58e038daa12460b882f722b102aad0ba0cff471d6530a036d57db9d851fe86e85d2af13db67e635574767cf710aed89bc7d8bd0191ffc094ade89e36dca61f77200d6e24d389b2bbd94be91295dd2564cc924300413663f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da7132032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb0fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf2363f5ce32610798686b21149a90294fe36acf6845db3e882688508e135f72bb03e00a31cd9ef8679794deeb656fd6b01c97550149e556476b314244fb708d44fc33cd06fbe525fa0a17a56704d0ce8f710d7b631e45e56a79c3477a259d3da7132032f9041ada05f5e85a98fb2f31708ef4a906717aaf6517f64b58e932c258ecf30122eb79bde232763b03181408cd353ad749585b27d619ea1a1680d234435f60fedd1486421dcd89c4fce7ebf732cac74d2037656cf977cf78bc8dfdcbbca0b305ae9960b56afc4f270f78642c020a1fc7320a8608bfcc65c9f757ab0550dcb0fa51669f4a9503b0d8f0879bd3fdf5e25d37853a8c0fc553c8dbb724faaf2362d98a19f0b2c4e856b644d3f30322f64772fff5be41e50cca1aebdbeb6317c7a0b3b8e7d3d25ea8a04f66d4e9bf09ea1fcf3625db18f9380f3304d511417d4821dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb181ccd4d1b3c80f4b8c727f6526322ec76bec9aa4b2b38cf1447328166df4fe01ff13de4018ac2f204d8e0cb4a7c30f750cb2b2ec36ed94c33f890ef98225aba243364fff85335141c1dd1584ef14afcac6b8156563c1859d08fa716ef4bddf90804a96ca16c5a8c7e9573fafa97145f3de7ef8b9a2c4f92876ec904cc8e00d403696c13ac367d18219cc9b7f7bb935a0cb57b9e7d3ce80eb9cf043b476aeea206950214b2ea38a5f0f7c7a5a6a6ee9328253d0e0cad482ac7e284531768c1d9359e1e56f9048a6cad77bb79ff4fa19cf2f49f1f3cda8d9839cc3e751b48e9393b371581b99384b87ebf50a3233893e1b81926a8343faa5cdd11a28ad748bad33495dd25ed74aa44720598ce08b31b8d4542494e72066f37b2aca7f0b51fa1f229ccc29d5fdca54237500629f8b665e1a0a2b8da0d73bcdbe3ba78313c766d85359e1e56f9048a6cad77bb79ff4fa19cf2f49f1f3cda8d9839cc3e751b48e9393b371581b99384b87ebf50a3233893e1b81926a8343faa5cdd11a28ad748bad31b8a58b763a9292e92394598721020cf3d45bd1dc23574467f0f344bad60376f3d42f9edaf7b353d72b4f5705136b9544064463b70cee08fb306697083486b4f068325cb9b5386cb1fa9f320448cd271a8e04d76cbf7b2986baaae410994cc940a58380a94981b87a2e450aa1b995b9557c678c3630cc221dc505112261580c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000119c740145c297d228294e49ab0a74dcdac5107ab7147aea9b9666cb7818888051cc51988adfa9bddbf04825e0364b0d6f78985a7302ca7f0f40abf0f0e194c9417945fa7911b5084fbfd1cbdfb91bd187259f5c50b13c21ca5f0d6d33761d4ad0f23e6f32d636615bf3ed80f5d52b390300856755b4435d1228378aaa53af5d106ecbd33771d748e21ac89f798906235cf547a88bd0d15c6221cf1da6dbce806245ef57a3800023656419f40762d7ef573f8b632116ce4752fd67c2b30ebdec1011dc8efba17b47935a9f10b93f7f876fcef86d2f70becc610f80e40201e619a185437524ed7a9e5a54cb9da9f4be9be8ef8817e38dacc4aca8fbb32974b548709ae5be93a7679e40e9f0e0cfbbf123a2b04674b54fda7764ed3e1900588d3513f530f091a8d214c3c29cce1c905fc3f09cae923cfdb4e05b20ee4a1f16724b33e6b3bb7b3f865b5c8eee07f2c07977845441ee4110ae576cc3286d0bd9ae4070caef3124b9e6c78e982f2b8ea2ab2ed955c4eacce0ceaff2a6d0904778bebf80e845fa7cc6ee2706090567921ee47a6bf9f871f68bbfabcf5caf023ca66928b1935a2fad27af26f8f8c0867034137f81634a36e5b935117c4ccebaaf5d736441a50ae75b7ac42282c922e51b7f319ac23b9ad6f3aba4775e2cbc9baab95eb1f1f7f253cb6289b9d463b12db4e3777b354c00131672784a8327041ccff367c47177ca00447e5bb513462e473011263ef82bb902d23f5902efc86bae6c3ac8e732f0cbb0abd9719d8bba3d99486596344f522850be36e4b4cb2aaa9f9e462ec8b39fa82249f2b298caa9f5558a812dc4adbb50cdd2455f7a26f4b3223f8ea6d4e38039db99a20cba12fecb88aa3441f43b2056c77d815eb848ee15a1f309e02f93e919578faa754cd2659c4487762a0d367bd09f5e2f3c777b2495b78b67ad75f1d52b98d0b4d83e6b738a4adc5782a37e20310873eb6b807cbc330abc93709201877ee09939876de919946af38b39633a65754fdd482995490ed826de848e2c32407966530071cb09b047c9e476000ef7628b62fdb301f891e0c40cb5cc5e3bf37d087c964537c7f4c6c24bea0f21f46f105246cb418f96eebe7559a190c9dd41fd9336d69019fda986c1ca431e889e2a082505bc557fbd43b799d00dcdf670023633e49e295a253db94b12b9fadcfa5456c4c69009332b3a35be6b44f65876e3d6aa1ca48475f7a7ecca33c8eaed0f24d6a443deef2c127666a466967b87c722bf0cd032c2d8e149f5303d345ae831b60e2bafc61efac80f52d7e689e52e8c7369349534cf6df747b73d50158a38aeb7f477cb866acad5277cbc578eac412d306881c03c1f3cef4999d4305df16971770c08af7b9b66debc25a88215635370c0857a39242466c4058487f8df987a06d1abc6cfc08d01927e765085eaf47e1c22d2f621f1ccfb40b6a58e08505ab504bdbc677bae9a7ccc141af2c47065bba9126786fd3db8825bc338b280d453faa87ab32e075da25f6b5bffb777f881faa5a2319c90ee3ad05b475c1f8cde24d41202fd1525a7849536aed8e6232c68f51de138637211487e10d96fb6d68a8813794e10aee194ba2f044c63a763e315e24743dfff2d62b613ab66a9a14a34c6347c440cf5ff629d2d91d3de8280974cda6f7281805deaacb59e1ad5a66cde72835ec1287ff5347f11b774c1d792705a1642c1fb0c80810344c9e92ef891fa947bfcb1c5c0bf95e195caf51dc38e8a47a1b2826c9d34677212e7db0a583a55ad83f819c71dadcc959e6294523b8309f1f0f430ee420fb9486f4630464a102d312fb3fdefadfa41c9426038118f13aaa38fe860cbd6854c1a4d2e84aef8f8d979fd10c54622679a5b77a214decc08c70cdcaf409be8b92d4a8e8587de1661c7c4347f0fb3472a3fe9d31827e278b83608f364a341139c9939fe2b466aa3900cfd9c4354133c19a3d1fc72fdf58d29e3ab850491acdfc34cab7cfbbc3655ba0a379c9560f174bfdfc84fcd725cc378c9010d97113ad4b1c2ef1cdbbb11936639f789a64f5b65b3f8e6df8d9365847bb5956f133061c3d7f82e4975084a58e038daa12460b882f722b102aad0ba0cff471d6530a39663de3a45c5c3c390a8fdbbdd7dc07bbb3201bbf9b95aabe5f033f005497da094ade89e36dca61f77200d6e24d389b2bbd94be91295dd2564cc92430041366036d57db9d851fe86e85d2af13db67e635574767cf710aed89bc7d8bd0191ffc1043c1060e0b904d84046899e774702473f9eb889953e9ca842ac3dcb8fba3be2fbc3ef9f1f46fb27bfb9766188b8fdbae4cad736ff90f5115026d1047045c431152c51e4639d18394160b01854630b6219b00aef55697d8fba8a2629cea32b52ead3ae1b9c62e7c6be9f4fe7ab9cf4a00ab984d13f661429d848e8a6315cd4c169dd9975f211791e46e37079a5ef38e85c06a6ec163fe21511dfb001092fd8829622668a0dee86e1b91c8f865a10c719c862e8d47e8fafa480f35ecef6d027931153ff4dba575d97627132603dac1c87a7b7b2dbda6fd8afc68b61352def3a70eeac00b245a8a2689d8ecd9fc253e37a7cb1dce4ba5fb909cc47ad9ad210c5a1043c1060e0b904d84046899e774702473f9eb889953e9ca842ac3dcb8fba3be2fbc3ef9f1f46fb27bfb9766188b8fdbae4cad736ff90f5115026d1047045c431152c51e4639d18394160b01854630b6219b00aef55697d8fba8a2629cea32b52ead3ae1b9c62e7c6be9f4fe7ab9cf4a00ab984d13f661429d848e8a6315cd4c169dd9975f211791e46e37079a5ef38e85c06a6ec163fe21511dfb001092fd8829622668a0dee86e1b91c8f865a10c719c862e8d47e8fafa480f35ecef6d027931153ff4dba575d97627132603dac1c87a7b7b2dbda6fd8afc68b61352def3a70eeac00b245a8a2689d8ecd9fc253e37a7cb1dce4ba5fb909cc47ad9ad210c5a3ba6fdac0b77d30417b290295f5091155d781ed0d0a66a28e5a091ccf9031fab1883d6e1d3620a99d127d8cf8f9f75ddfae5984b4c8b4ceb80eeda5649fd19220b2495a3b6d027893e6c545dee8a84af052fb0a9d53ee6ad2c9c14f485453cbc28a13ee148eb5844e565ce5f7f0f7db7759641fd3a24fb45d0e0a85a9f3f2e871e6e0637fbd2eec7f53d9274a1ec6abff0bb5a737b45b8caa2d0031846ce7ac63e2a62af0c0ec157b4163e558a1589e5f2ba4a4494e1c6ac46d6793eed0d61503aaf8c3339f1ab672444e10a08c0dc0efc9e314ea9c148b218529c30eafd8e0a2b14b240c176e1fde32638dfea6520d5983e5f855c8c72873458769e662a2ceb1d6a0e5afb7cf7e470de56335d310ff0d4c2db1069fa5d8157b7ebacf070fb0905658bc419c6b4c20a8cbfb280bf03d8dbdbe0984d0a63bd1af5ba6f8911e8a8127381323f9fbf530967dc8447c416a96fa1e32b0b281b6702eff53454096a4115c87650577b39bad636654ee00feafcc869db0b5eda86039ff8dfd84b6c28b939346cb03db80572a9e11b78b224ea3be1e5627d6cb4a161201dbb1881b7a39c3edaea3ce3b29d21497258d0f1510c6ad41157af8be9aa05e08adf2916c3b85a127381323f9fbf530967dc8447c416a96fa1e32b0b281b6702eff53454096a4115c87650577b39bad636654ee00feafcc869db0b5eda86039ff8dfd84b6c28b90aba3c0ae3f5d44b2eaf76521f4a79bb1588c87035dc42cfc5acb78db015bf4f16336e223958af763698572cbb2d5db8372a6343c009f1ab4dd5e65908446cf61e224492f0ecd28f7e1ae56ccb5b965df65fa883d72bb44e8db5d426a899dbff1f63ce81344361519080b8dc3b1e35bb17828eec25950687d646152a439c2c5b0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000107cd991467d98ecc1f174f69b3cf8bf0b1976a8ea4e81104070b183741ea18a9177b9baae372d9712012fb537e9fdadf97cea8d618ef30458fc621655fcea19c0eabec8a14610c3856648a3897d69e0eb18307c4ae4cf817f17cedf7c5e4cc4f1f88050448226a97040f75754e25139bb0570d8e99af8eac208e84acc83a179d070b1d3037a8998b521c14d2a1d07f574413b06993e70eaadc2d95ce211d3dbb2777822f755ea05294d70ed7b1e66e7623c2d6aef461de92da5e2d26a7bfd3d00c834ab853614d17846ec48b4788755a7a3fb4ccd908ffd802465fc9ef4b80c627bb4b669f0c3f74e19118b70e9a8c5c7cfd5b445c1a5e4bf984d8846ee3309e2c0256abaff20e849f8e28fe8e78405369bac6ee4e4af3bea3388060dad1ef01132ff7407f317c67194eeef4e6f06ffb863ea1bfef1822c21a8dec69d1b30a350b5eadaa5d71cfc010951794a17606984a75fe920f4fd04b2eb8c97edcea0621142b4dfc0c27060ec48ccaa8c6aeafebcc4e78b9597c47eadfc16751aea555c02d873d6695efa3a93a852470debc527b02e0b56ae5a845e7b0e1a28e4270f8482b2356aa9f2c4e107c4082226888c155e061648bd4aad7047766daca7916121731c9a260c5eebb702bd9b707a0d331a13b9ba26b30a96e5ecf4e4d9609e29a2a07184a2826f745b37aaff3d111048ac514386316cd9b7554a900c4c089c7df2525d254bc7d742a082c49e4329a2f1fb98b45cc8474f076dc7f29b81c6faeb61e006a327739e8634a68044a97e38ccfa47d2c62f492be109cfdb36fa2e50498c806bdc2f66d59434df2bddf6154113e9d882953541aaab57a10903bfc9787117e331cecafab7c9037b4b82829d6811744d132c2b36c52a94f878dc49b3a3276412f8a528c4c27323ee24ca610384ed0116e93ec75d4d167e974ca3d327e9a2caa1f5453c9706a4a025229425ebd9492951cc48ee280919729bd85120d0411e4af0cf03eb1f74a7f111a7d41335f7afe88c3acd0a698584562ecf39a35066af6a52705e3c19f4cba43af91ead2da566f45b5439a5e4315b433d9a0537bf30052e521f3a508aa2a92778a66b50aa6ecc219df8c4e081bc32bfb1efa007d32f54b93338663d7480f6323c6af4a541b408fbabcf655c549db437fe3a006e5ea2616900b6d00e793bd8639360aaa5e93af62a62837fade57aa044435c73b08bdc6d5ef3d19837de103456d6c9ca8fe8ca15476f5bc8e645e93533b9e8cc1af889842563a7e1eec500462cd49dc6019e6f0ea97155fb61a6e13c0bb5c0c6747c6e47cfd0bc677608f8a59938e462678495e3104f0106d7c4c98e34af7dae75f8111aaee36cf28f487309ac7d025ae00a496aebb27fb8b9fa6c6ca549efcd3d07ed555b632b8e0e65632e5e563c8e1128c381a8f46b7e97a9ce30cf202c347fee9090f291306c8d52d1017fd96f78aa2bcd962cb2bf443001db53dcc10d06e80c4d749ec02294b70212e847623f4419352838b39dd682dfab88df5c65fbd306c42928a2c1b484ae52268df8a449e365ef86abab3e56ec4845701b32a21e8d5ceced66da92f9018badc0322a95be61ddf228951848a00d4179b72e9168969b8a2e7aa8b6933722c8bf2a85ab5294f55913d8f20c65c5bc0f3375ef3cbc7bf3fbd3bb307780417652f8b0b413a761ebe096def04f0e48030dff3fd94e662f8ed5d89a6399029ed6bb25ac21c417bcfe687ffd5ee748c8f69f36abf46c0861ecbab95b3eaf90000a4ad422bd2c7c7727c8fec5dab3769956033df1c40fb5a98f75bbe358a0d283e254cad7238fc7e2fe80df46539f941457df46ca2e6999bad8b756c8be5a51626aeeafeb81001936b6d0ba479319c73f1c4cae6632e229bdadaa6615a6d9738fc69db4646d84c91edab319fe360bb3acaf8835b08dcb38e5b4e862e25c8b011f29ddcd5397f0f801760416167871f3f3576afcbc9ab5dd0d28b3e64bb4966111df108ccb2859ed1f350974895024b5e2ebe74fa45e46f1da5eadc3bc78d290257920a7d1c296d175d0e80e61439db6ba1b942b170ae365460ca72d22c386f18639ed24240f76d15bb2e5e08799be36a705156178dd55c654947a7c6185fa424e725cfcf9eab025c3a75eeb1efa7481cb0c5575b037239a2291c62c651b9a61e56816992ddd56206d8aaea597da34c6e5007ff6ebcc913e67db65dffc279a71c632d3ee1e97561a2d55a63b3fbc02869b32856030bc899f3f50ab4e187e348307d80c9ac50813ae0d14a35e3f0eeb11ce22834eb28d15731630b30ac86fc960f827f3653af7ec51f2eb5ca1c0f114f056470c71e2427c467ca25bc5379036b327383f05d9286266416730d73b4a9752996fe147be52b612b67a52c5ea2eeeb0d8c7c0fa26d79d99be98cf28c4b568af8af9ae78d67cdba6dc58bc0a15d11163c4193b1d3dc9ebff4703f4342874f49691f2b724f92ed930d7ea716d92eaa9403be6c4e2c2361400b8fc0bcbd78b0b6b9276d89b9ba0b888bae89d626d1556d2d47e279234f19bfc6313c504ca48c6e8481754b68aabf70dec47fbe3de954e012b81d86dcb0e64039cec3afb35b73919dc523b0a0a239aaba68b12ec216ab21307d80c9ac50813ae0d14a35e3f0eeb11ce22834eb28d15731630b30ac86fc960f827f3653af7ec51f2eb5ca1c0f114f056470c71e2427c467ca25bc5379036b327383f05d9286266416730d73b4a9752996fe147be52b612b67a52c5ea2eeeb0d8c7c0fa26d79d99be98cf28c4b568af8af9ae78d67cdba6dc58bc0a15d11163c4193b1d3dc9ebff4703f4342874f49691f2b724f92ed930d7ea716d92eaa9403be6c4e2c2361400b8fc0bcbd78b0b6b9276d89b9ba0b888bae89d626d1556d2d47e279234f19bfc6313c504ca48c6e8481754b68aabf70dec47fbe3de954e012b81d86dcb0e64039cec3afb35b73919dc523b0a0a239aaba68b12ec216ab211daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41040c9277dc8c6351fd039b70656118046072e337c872d37814fdf794ba768ca31870947f95bdea9c3c192cb3bbf7effe29d0fb7bf7284c1d7e0d66acf118ab0301d31d12dfe16fb786dc57c6e8747c7dbffd151ce61faae4cef5f41a07180ea0a1512d88975ca686798718111f5436c9ac2d9b4ba608e39bb61ba7ec94fb5cc3b4efc924d0f7c35013ce4a6204e41a0d2af57decb24efe2da4b04941b8196660384ccccd98686b104ecd67cc9166541300db26d5a288078ae60ded9504acb2a01444d02b0f68c8a15244aca7777246f0f229f53f481e8d97c637933f42699f6303f57e3f35b5d7b1330f25c1de91dfe5560a11d88c671b2ad2b21c643f4334935705bc03969e10b81c3063b89f4985eb328621906caf853ca0348347f0337803eaff1fda99cf274ec44143257d36d2aa688c4542941c328302d04ff1aff04471214cf85c2e587bb2df17725784a51fde890d617760a890461736a885b0292991beff4fa88b7d946ab3e1673543d230eafebbe4488d4311996f27ed5e57e355f35705bc03969e10b81c3063b89f4985eb328621906caf853ca0348347f0337803eaff1fda99cf274ec44143257d36d2aa688c4542941c328302d04ff1aff04470310e392b7bfc261d9d4450166493780a504deddcc6b22b0c0f59941b6e8983c2592d74d6b734b6831cd72cb2971813a80c8eb30d48f2b1936168bc8afaadc7401b6a62cfdb824ebd6775569f045fc1f088839689943ab9bebe6beee6684e561211f595cdceeca42153099601ff147d071c1a2b0872c31fa7a494eef69cfc604000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013d832d5751f38d2361a891dac2847eb390a392ad3a680ce7b277e521a48e02e33b49c52a5fad048356d49bf9a0b056bf520be8edbcda73b5dbdfe93c28e6442f08ca65976458382e22a76042fb1f6a82ae686bb13d93837bc049ec2896a86ac902ef5a0c2ad4b0d970548d26d87d6353b221679190153c66cf05ee0c3bac42340933843c157921d307f024dce0e8d968a632b164c70ffcaaebde5010aa215e080502d6682c21d67fd90176c66ea5460f34074809187fe09acc244ab1f7a04e2237e5d479e7eef3c7ad6dd17bbb1cc6efd848dde8ec11bd3400e250c38e545f5514cdc59c6c2557cb7244f7dd9728b147150d554399b2c089a4eecbd7e6e08f940c9725d3b7a60b9432c3aca3bf6ba34692dbb9d4446c6a6a5571bc64396b3d9d162ee13c33b69bfff42a279db7db55e44c555f7ea1d182048305060448d3f80605c0dd532ae7b8295dfbde57ec930f63fd79c955453ea1e3715d81275959f3bb317986b64c95f04b5fc539f366ec24625d2752f76ed8a815c476e7ebe67fd02437d571d180ed1d3464cd1044e2d28e29cbcbc65de0f55a7fade0bb4ee42d9f8332d7d942f9ce7632f49b210eeed444205298e7f3f87b881127a0f6313c473fec39e2d897a1b21575783c367761c56a361f5fbe2b3fb1bbcffde0f8ee710c1c3f3a6505cf500be5d21da03dc1f5a913fa6e3af38901ddfbfafbddbd710ce3dee42f1b2b67b761ccba01383ba12e9eb6ccb33a70b24d26de4678b568d71f03a6253aab9682018a212897f017dcdfac5cc313a62d54b0d9f128de883aef62085ba90ae15642cfd907a81e9c4d655f43b5f9c99c08ce8ba4e3bbcb64d95e7a6fa0da0a1873919d5622947f1bcd7cb769fc6b53810939dcac7c29bfb593f434eda821078de98bd2ac0489b0128cdfb2f21b0f9f976b8ab4f6b5616e5f4889597b0fb12294ee7ebe73e073be321087cae9aa48f5e07cdf03cd5cd3044dbe181a82f00c2c94b57047a8110cfea361f2e078d8355ab6cb5644f361ec9d85d4f0898805580e94c838a485ce7b04a81e882d135b86715f7ed27f923cd5f7c4720d8e8224dc3c39010d0e5ca80b5acfc72edcc144b54c36b0b57c8aec130e9fd92e18e48d50380dcfb2df092211ef6efc72b6170aa6dacaff216443daa2933adb3b42c15c400626f0bf01e6d053270e307205a8ea9f887f3ace9421b6b1eca6aa51152b041a0cd1fd2355ace86f7d6450306e0a022dc607cd75100a659ee048bf893e449d9d3468489ae215cd5f5fa9a6da9697ec94e5f1e5541ce6e02c7814251a00bc3608245bdfa1041f78f109958e6aafebda3706f322417949591deef2be4cd8e8e9490890e102b7f312cbd513cc72e3375fa2ba010d2bfae0e07b392c9be8e0e9a05318cfb4f5013b62a06d2b9cec8ef3f8db366a1b7fa1c8db216b7a92658642bd4930fb6b51c9ce6a1d87fe201982b87ba35f2c4c101565a6807411aaf556f15b6031138301b2aeb237776d12d18bd9c6b039c97a2b5feb20b9bcbe0e3fccc9b25c1d83f680d7f38be6f24b0bea509471808de1d4820d071252ea4bca973daac3321ddb6d87dc323255a975c205f1773eb42a167f54cd1adc720eba18ba2fd1b10314e9d8f1edd4c0493b591abfd5d7c900b53b3e46faca612a81a7acb412096ed43bf0f75d81b24d8ce266094e30386b17ee055bac325443421b09ef1a8f9e75c43d1284a9a4a46c8aa5122c4719d6539985eb2eefd25e31cf7b68c4cac305c5223e8e8e32355d70c1d84c88a2fac660ce618db4e31f3d1debb0b1b66e8410d74606b1217095a59093685ea591242a9d21d90193fac197fe5aed4dd22a59614b083bd99a16efacfea03b5f61a42dcf2f9ce11920e978cf72552e0feef0cb1009b80cb1a32e6b39090ba241a25d524ba4d9a7a5e5247a6ca616bdd6d9d15fb7211d0c0152f9011a05c39e3c32f5ee31bcc2ba93b8717621e07610d31682c11b326c010ba34436c47d361a927f3819d850515dc5e6de9c9989a234c18435e1cb97531e87181643506ff74f917c55aa4dab4eade31eb8cca435d556208c97d526696101f73b5a77865b4759fa089d025b70c7e75ebbb2b28090b91d6dbf26908dbe7f0d0d5a7fda90c6d3ac56a5ce1f7a49629c63b9c846322a0ffb1ede0fa0a2ea2407be20a12a5f4baa852aa228ab93eedc4321c81a391906ffae06c6fd797e58a215bc770ad2b789c8c4496ea3ebfa5438089508f18b66c6fa3415134007211e691ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c692150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f398196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f61ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd200d79c02ca403a61ae0c96c40c81d27e074e3001c0bc0244386f82e378af5441fbc9f3f20cbedc1799c10e2bc176e39048b5bf38fac2a9d79e4b9dfea4935af204360c0df34123e8663ef1d43e891c71dbb3d0879a0ce7e1f48770d15b6ca521eaf1c3ba3fba4c7600c546dac75271cd22b99c9bbc2e2dc2f1d3f85936e0c692150e3c45c045b389ff3ab92538ad8e3501aff324d8a163f6a0ff1676c91f398196b8d2a33ea37e4e03da6245e49c38fd64ccef898347c15b937dbc1e1263e0b269472d5cc15c81b1fc259dba1b63c704bf9ca0371187d05dff5552b1ed9c1f6288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc73502405abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b32a541dc9aede8050ad6648812a33cfccec8163996bbfab69265fbcf2ef361c4e077596ab5d4f14c7435038a9742be3e6b737f77900011bd2975eecabf38cafdd1153c84f592e126fc3f1f0f20bbadd94f35f1eb7f65990d2549a7aba8284127f38fc1c0df7b9b2919072952602cbf7174ee45ebbee63633b443106eed2c1c2ec01270d2f56ecea3e1b2a75e90d93be05ba29bbd650f57dde8784b3a68dc781f7075dd1b117312a9d8a06c31011344d9a01dfa69bf89621b429bb8f33dbae0d86192e3ee660fd39226aee0bea6ad54ddb98f9abab4929986c135f5323816ea52108ea80bab1eb868323ca07cb55c73606bee844de917a21bfbfa6dc19489d7fda3cc3da9332bfc4c2de3e80fe3391c67d16d585354e9f5bb7a35c091c3573e31936138aba397e4b359850d5fb9c7b4480ac78da8f3e8a5266fa48e5c79b6275532d2178e1ae70947695e9f02849f81419f58ed31a9fe1a7cbf077ace14456939132de871e518f6b896a160fd7b607ebe63ddb125f6e11cddd754c1c823ba96c723cc3da9332bfc4c2de3e80fe3391c67d16d585354e9f5bb7a35c091c3573e31936138aba397e4b359850d5fb9c7b4480ac78da8f3e8a5266fa48e5c79b6275530c625bb64ab2b757e5284ac022d5876bd6a163865cca8c33d1906267b895b0c202e1a0ad09302e70affa09e470781c2aa53a461958dd93735097393e52bb0f591148c5f0078079278f0071002b6a0b381757985374deeda3f8434a2ca9b57c9a084b1ad09d4a31a25a8669bc766a6d0a8480f5c41c392cf52982a235b6e118eb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013d9ba56a20ebf966144e9b57a8eb956f338749c55b81838fe3c6802201fb6f84319158984f800818b8dc621c8b6de6de564390e0af79033ed30d33eac409a05617c38fbecad253a41da5e0b7b3224a0e914897fe0bc9e7206484766ef9597a0005c43187dd83b9ff4c5dc0e43a1194b52bb768b0d9aa89c5796f5a7ee99d0c6429d046df41a1d723923b344a4a33e191089ac7549fc9259c2f0e1cad0c0144070d1e7f2e0415b0b0911dd4655390bcddde29a06493bd2fb6469895c6eace7094108d2c3c7416e9333963126d143e609bdac300b17b1f12cf538520ba8c89f2ba3bc607a23e56cfc0fc6ef3d645576e54616d56f8a6e7c2a8a0398afc0847f9d616068f3cbca5c44bf0fd38bc6b658c6024ec821bc803bfe980b5bac296956152340bad9806b42d9054d88184b02dea8d92260c8f6dd23deb76bd0eaf3cc3db6a1489077f79d9a39e61e3c852835137caaf01d68fdf2224c669e41d2153bc8fa83b6046b76399e360c7b370cb5b82da8e7d512977baf726151c187588ae1dbcae28d356df4b6ae98e81752984502997165cd2c4062bcdc259615a016c3a93345220d9d89cf8e9a7b1e093ac45f8443d653aa5f84996a1ccc178471a53b7182a862346199401f400fa598fc60bdd8fa464a6459191b1112f0f865d39d1dcbf450529eb3df50e2d9d1483c04b7073b2f0663c54b40786024508a7a4e3f0576f4ab334f332497af673c656398346b0b4b53f7c467e0d1de7fe145dba6f798e50f04911acb02e546ef6ae608ac6da5d124fe9dfcdf9ea17d63cde2f35db46e1422ce93c0d8428cb9f6adcac3a829c14f461ab04fb9401bbac5e1490a845cdda35d5cd0c982502ebc94445d22b726c61eaf8d6a57e991506dab5db04c7d060666c487335d347b2fe6a7af1aef8b9facd2531b0c68365e380504133bb03f5599580a7ad3a15b070a6fae36f514a1e57a78ec403f7c14fbdb1fd51c788ecbc65d7adc64f1063a867e20a9c9bc3f53506d2cc6867874cba4ee9bcddc16a05f3b1aab2eecd0e6a9a9aeb645a509e5e96639ffe121a8280c2107b72125adba0453601d4d2511414f57c0b834872381154d15ed479b91a24d78f742cf92339ec426f33960d2024970fb294195240b0e274c811f3e63529ac015a78c7f4ba59ecd8a6a2efd2af2a40465f19008b8918645b814279d1c88f1b179b09dccf7631d3c076fafd68a82cfc8cccb748b78afccf881a0879ed4368411ce3b8d60dc4f0ce7da72df3194011c6cc3b12b60d746ad0cd3fff60dca9d469eae207902a5207be011af4ee0fce34bae4db68539e20e4416218f9855bf2a9aa6fab403a0e371616b30eb7f7111f0187cc4b674c2c51718f2687906cd308866268a419f79c23436e57b98f41a2cf37cfc028a170389a4f418596f3b77189c89f93ce8bdebf1619b5616afae1c3bd132db7816998f30f4b766b0dc7608c4992222460d99b43f5b02119af9057319538f63df414640beec935f678c8e800bf2c7a01d31e82e9193f0794d8c8064ceb3073c5ac8b33937f30a990fb3dc3119c62a373d7415eda72fb00400a8c3006b53488be8c296b67d30c025026adfbf58f553fec767d500edc3324a88e13288114216ee5170bcb78e2f86a3b4a0fa17a44e369fa1df9c43cdc0153e6d0bb02ce4017855decc6858f4763210a0161158aca7b7ee605ea1024f8d18d40b261e3c18133e1618f64beb5a16cb0db50d737ce2bac26238ca4bbbaddda3902759bfd6c8b1b96f4391a0d6ea97cc2d9a112c143984901e6f34082bbc06b1af3a312027952340e57b36eed5f486af653e8410590ae107d3b7668737e8039e448a53b5b79e10095f991ded6909625a967c5455b335108ec1097dcebcdb5d209aeeb4c8192eb3f29310ab81f56a0f65855ba9f17a1b41b22c0976e343921ece09b9e8aed3e402d8728138571c687e8d0c5fe7abf8a63d04e6f0cdfdbee4e4cba628f505e4b5d102b8c8f5fcb744b41e0ab029f96813b0251f5cff4db33fb86bacf704d42875c0ce8f89d097f3bdbcdeb80364cba43b4b771f07a3b83bba6c6be688fb1c5b55f16a1df07e5433bd567f382202d8fda03127403a4dedfcb9f42dfa2bdee9118e8058025a18a0ff3721199aa85c26ca5116243584a34e62f173e86d46bd3e0ef0429e2292e975bac6f85e17094ea27ee591f99d85e431b24e0ad5f84bf90fe1f7b058ca254ff9c5b0bdff70b8eea25a96d40d3f082bc8013ea1595777187c12abc1b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac24fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a60215507121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a7235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec21ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f30c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c80f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f046391b039f6083a3eb391590f50b21b260f1dcae2b9149806d955ecfb02b959fdeac24fc609f7c5c14c6ea6f0af4de4d9f0e45986d6abfcc8b863a5d80c16a60215507121ce29233981d6bd4c937a87be4b90ad9a7de5ce831b3a7b40effec1f595a38ede31d6dcc67e2942b36c857841b47176cf11dac64c767f17921ed13e0a6a7235a906cdb01f8931b27ee164a6b779d36404757d088f88246844aff9c9cbec21ca56f9324fe076ce4d811e9b5948862ec0651a438c4009952a8e5ed6363413f30c4d2204709dadf87c7a66f74195611cab432bf0012e8542e3b15240f0fb9c80f3b2ddfb8f62520783859908be6a9ee5792663d093a10c76af21bc8f0f04639132e874d9269da5a10d95c3b2141ac7064749d52480c901df5025a9b65a5c83614840fdd36afa8903e9d67a823a1e4c1e51801a66643be9dd09b1a27fa4d31263feab91e6ac886bb5fc8ad7d39f7382d954476cacad469a167e9f97bc36d967d0b7691af05116b000ab29c5bbc0ec1be600d5fb3499306b256b958a1b01e5b3c342bed61af12a068269a5db3057451efde070145726d01d52f5bc67a7ec63d333d5eafbc96ee19566bf0f54485b4c58d8048d16c5850aafd92e5e7db1c530647232e8c181273ab6072cf1e9c8a11b654c69644830c2f5f9948f98b2f5eb063160d8de0c8564e8b3678fdc6ac135c62295b66f230827010b96ebe77093f50cd8b240649b5bb4f4d871d4b6896d7e024258a7958f57c2ed8c48ee412ce7fcb8e220d3e0f4f64e777b3528529c553f8ab0fec08b3cede187ffa0ec88648ba611172230086247a469bcb4270f361e752adaddcad693d24550e9e2dd444b25ffba12e366fd69bf31349f99c35c37b1c54b8ec1ae6392344ecda412b8bb3f63a32c1752ce6bf9402cd9eea8f5df647a4c71b624ad41ddaffb8f877d56e0dc2d6eca15020055e73c43eec6fb6affbfc204f597fdd2137a2597633cb71d8be23559473a0230086247a469bcb4270f361e752adaddcad693d24550e9e2dd444b25ffba12e366fd69bf31349f99c35c37b1c54b8ec1ae6392344ecda412b8bb3f63a32c17507b84ef2185dc20c88214b5382af44e5fbf1d259af3cbb7957c71a8caedf69af2ea5f052917a6daa99c6a0e6a946016449ffae0bda0c1278d5e5d6b2b63b693e09bdf445c2064d1b051a48e22cc01ed0e8b9cb8f277f5679dd28c73e6290594e1e2ae81d2dd29c5aaf58f64f8a5e3ef676fa559019ed3213e06b767c9da3bd17000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010fbdb94e47d80b00c39594e72690003494eda25bbf1b259e297c3742706923dd3ec7a54e87f6d50568da743b2c4630bd8d37bf500e872e4e1c275a79e69b89ec386197dcb5abdc2f0a67527782f03fdc53062b18c35cb4182378c1c127a89cd22d237a3a12b3630a0336dda2b8c52777ecaab5434fc58c004db30e9e613a09ef26f930d6f22fb7db9e570a574b2d0692afdd65666435859664f9c69f64a76b933d44b92237cdca4feb15aed4c26dca4f642f3e3a78ffaa9752a970472f77bfc304523907e3f052ae73478779ca0705438651f4406c1a62934b321e6e5abbb5e139c82d98b13a960dca7dbafd9506a4acb4d75a12f08966e24eac4de237593159132399a54ef4f4b95d86f91e3290b590b019198e9a1d7042c78e67af4619c5033cdf702839ef497009c404fe00b1b04536e527cb8df5a58b7c783afba0fb94a208a4fd8febcb74e1fca4cf006fc2199b6e9a578630861995b2b608f94fa81a793938127d1c0de81a774cd0a8086038fd4d9aff344a0bceacc2bafc8abe60cf811df9ba35c665b5624f17d8544a1b3dd57055dc290c4d6ece429dd8df0367a4f22a621f5e27783733d3e79a40d1000c7bc07387b437a126f627d5b9b7e64f3e0434b3e8a7b30a9d0f9aa8283af50e04b0dbaf2c2ff1c07bc026cad685fd666f4e16d5ecad89e6677f22dc4e94ca3b59280d630f5e0929d84e1f91fe69a698effc03be131f420526b5270946e40e0990c45b3d90c1a2a3fbd56b5d111135097ed037a95455f20157a377dd68b0f4225596bafb3e9104566ba819ab45e308e0c436282c90b1572d2c094c013d649814f46de72a76a306c4e1a0fe161dfbd5aec7223319f63243bc2280ef8c4636f0b535a2a9b1197a7158c173ee9bbe309e620668330771db22d8fbcadd9cefa3f70d4d61c40eb1869c5c56252ce3628f5dca086d02f413d9cfcb502f6f0a04ad70c6f466e3f3adc26eef29721855baa0bb486ba808ad0bb61c2db6e2d7b839d14b4fe346b53146b82dcdaef35390ae1f4d230fc213b4d4bb5d26920d6554dc8113cb30f6d80c5747a636488849db49368e30e3191a2ff394c241edf20eb016b8c51544f772c8d66d0e556983a2e2c40d8dc91f9a0de00ed42a34d2566cbc8a2215cb6c40f6d467bf10f12030999eab6167dd65653bd1dac68d0e555569e04f6f57d2b28e3574b944b46e892f19d50701f00a2c2d3990b0e60200f8c3bd9e02270df07e51bc4bcb2dd829ef77bb57c6ecc116455b1343ad3ad1f6ce72289a3f0cf1c19f3c08e99364788734b2b53346116ad0a0c7085824fa21447daeaa45cc7dca8fb70877bfc237686ec6c035b4c753ef1c45f428ca366175053001a2314d4669fd7c12b1076c99ab774b4a37104b7a05cb007e3490aab09acb3e0b82fa5c37195d33455240b2528d86835acac8ad29d7b0ff54104004715efb9d4981396663691f54e52da3d70afa1ddef3b11171d00f54bf8f18d8edd49a19b99b8d9a6db2bdc15f25241d9b2411caf4e7933578b9e4aaac43114b3c64383aebe32819127ef77682d2ceab66cd4261d1d868b7f94b550fdaf80d706dbc76175de04bbbb2495700b40b1e20f1a3b208a63cac303e1d8c136c6839a88a2023ca96a66d426ff71a60f5cda39d09e0e804aae9f746ae8c64e8616432b843c2b588742e3a7e22a5977930fa8958828f9d759676baa89d68c767f59c2ae506a9720c8de1491c119a398ead306c2ee68de1e617736abc83ea6062488b0bbfa7442859c2be019e1990a62b34054eb8204a700d6235f03c87f4b6d0d2ad38a91926e49caa10649300d14d1d6769f2e3943357a5e261f822fbcf78de897f02b2aa1ae57ae62fe1b96dee6ebb8fd6f5398fc9486a3fe942dbbb31847f285c2429350ab905a0ca7874231188eba1c63841f1a163b1bc8ca536dbb18e579ad40b27fc6af819ddfc35c520bf769e4e2a886de807fa3dead2338c6fd39790cfc53a1996abd5c4243e7a84d388334f33c304d85959e66675cd1ae9fabd8bae11f72ee18f8f4cbb7655c3a0d398c5940dd681448dedcc5661fe8424d8e59f5edd1a1bd6ec904b6203a9d754458c81ea5fc424c36bc1134825356be592bcc92145762b429b5002228d9f67112ec9adeec6b7b5f468b9edd1408cd2bf3ebc5a5c493b30bf77b4fcd6ea8270bf7e5582ccf9d6795128519d594c4e3bb972409576517c1e294ffe5baf63aa7558ff0dc158faf7a69ee6d7a219a9dc4e72f8e2cbb469d72042ad6d44b85d8c2e6cf1da18bbb0083196e509bf2b27e7fb20497e0a4cbfab1fbd5292bb47a273d1930e25e7444ff7f0afb3f24a21d1339e0ce76ef5b34056214d63225799d3bce820b9427baa7028b3654738a93dd550b5470d9c337fbe551eb29cdda8662c4317df46bd84558fd76ee151c3600f23cae3e62350cc8041ac2682efabb60122b088a39e4c6a5430cb3c6d32233b9b385c5808e233017eb7a7197d105449fedd4f775c61b395abcf34e5d966d8cdb1c0bf41244eb9fe81485a008eae5a8e05ad72ab32177e13a4f3f7c74e2fbc0e212e7aeca4d838077996403f7151a571fa528d54cde881ec5b0c085af8693ffb2bcaa0ac8858b4f88669c12042ad6d44b85d8c2e6cf1da18bbb0083196e509bf2b27e7fb20497e0a4cbfab1fbd5292bb47a273d1930e25e7444ff7f0afb3f24a21d1339e0ce76ef5b34056214d63225799d3bce820b9427baa7028b3654738a93dd550b5470d9c337fbe551eb29cdda8662c4317df46bd84558fd76ee151c3600f23cae3e62350cc8041ac2682efabb60122b088a39e4c6a5430cb3c6d32233b9b385c5808e233017eb7a7197d105449fedd4f775c61b395abcf34e5d966d8cdb1c0bf41244eb9fe81485a008eae5a8e05ad72ab32177e13a4f3f7c74e2fbc0e212e7aeca4d838077996403f7151a571fa528d54cde881ec5b0c085af8693ffb2bcaa0ac8858b4f88669c11dd1813b075f0736229619f2c71ab50e881ae94dbc753232ddfefc2a94aee1970af7aee562fd7033c3b98c876b58fb7c84b07dc44a49a8bec2426b6aaf71bdfb3ef7becef4701fd7c48ddd54096379f07494432b3e78dabb120d9a6899d6b8ba2e95ad1ba6492089b890b586d57dd2000ad02b2de2810b9a9fd60693652db2b3333a6c18bf778e668d61325e69e25d3175cee5aaec8d1f3ab9c818b7019ff2af38225810aa0ced9279f11d7bb6bd5fdb922d34fcb89ee3ac44c8fa2bd5f655bb1f13ecf097788ed6fe452dff23942fdd3aebe7d16e25130c9d72d7314d671511286dc7c63ba70a6f3ad2c69ff9b9934f66601e89f4eb87d44b977e5f7d9dc8451c70686c6ccf34410eeff581bdaac669356723247562a74c0d699d751c4452860d81d8e6f70b78783550c923d3f6e1e2e57f77b631c25142f146fe065f2b794c225eb35e5e6699b01693ff2025239088d5968f6bb9195fd4230a1040425b06e116757cbde9eb9f5f59c6bb6da6ff3d7d9e8cd24ddc94847971d4facf87ee4a1c2336bff60430d8f218dc08b92f81d10147de057f17abe549424dcb46d17a65b20672a3fef6b96f4283b5bdf1bf29328392c5f009dc8244c23714beeeeb608f54225eb35e5e6699b01693ff2025239088d5968f6bb9195fd4230a1040425b06e116757cbde9eb9f5f59c6bb6da6ff3d7d9e8cd24ddc94847971d4facf87ee4a1c3fa55a619d63d535c420e506d77f602bd8fdc2fea70d92ec808b1d33d3d955d304b98db9612503e92443ca7cf18ce40d2933312886b225ff2f4405a7ebd2f86820b6503a8bc3e9c20db16cc2ef7b7e2fb237deb7411e8df9523508d8144d455c0f055c09dc496b55e205929afa3083161367fe1f7f333ba229d0cb0c82f55147000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000013fe09b2a7b9cbb636c3e1e8036bbf71c286bed82502c6a779d39c46e3e4398cd28e487b81ef2aa59cb55cb93375ecf3499cc12964e11847917e10cfa34b479e72481258db8323dfef2959a14f20a698ea5be08659071e32286dc1dbf76d2d7a60df177d352543d1e324da0b7b4debcdf1e8ca8c2fc2cf8c6006a13d9d6c9e60805aa9065091ce82966ebafdf61f58bd8ed6511ba7aa75d81c10cc225f7a5099f1c36fbfb00f2bf5b1963d92c31c94bc55f0f720ed5e9cbfb5b4431e601a82c5e0aa7ce671053eaac33001ce7bd4c77f27defba86cc0840215dc44ffe1354912a18973e4aa85b9efedfc1102516ec70a20ad50af95f87a69530993b537c067de01a92ce4798baa574c7bfbfea7bde8024dbca94fb85a08bf6ae99f566788d052c009032154aecbbb19e8444e316492893f5a9e6f773ff01c5dc73895e95f0d20702ea221a55e8a1784f03d48e3ca79ff4b6fa4287db15ae1623a025c31a1eb35509f4abb59da884fff9d09609b14ca72a5ed0808b28c02ce5f304d41099f2a7b823636db5703ab1dcd748411083287be900a02762e8a354eebe282467005dd82b3952b411e8671574f9c096b7b5ffa147b5d82e146d0d57dd187822c5c5fbfed70f1cddecf1d23ee920ee629c00b2a8aa4cc1d80284792274d80502a6af0415c53f76f15c754d0d00e9acf1d39d79d7c344c6f5eb92fe2ea044cdbc4b45d419ad3175a9a970dcf98610ce032e7b7501452fcce482eaa6ae8969d623a8b4a15bb7281efe5ce357c84999a9f5f22925e0cdb10ee12e64e89a8ee051561dbc90d2d6032282ae9aa6f2e9164b5fb86258f993a747b5a78c0a12caf7695e913b90219802468ec9b7750a9e304508aeadf3d15101a84852018d1a89b13ed20211db92e937b11f30ceb1914247799f1649b3ae04cf50aae2222eb355139d9a25515cddcf2fb47ac77571664eda291aa642dd392ccb29f9cd60e20cae42415e11f381c479367703b72014e7ae6c3407a2ea73ddbc35ace7280bf425cb18f23b15162b3fab1bc7ced06989bce94fb771a15690467dff88a1c122afd6c0b5d4177764039bd415cc6823cf0202eed28c577f713b6a4b2d6ffa5a25ef82ea7f0f0380cc98406a29e1c6ca3f676f5853b447695a956c6b6136e9319d2ebc7a8250001f8c159dc714c83453c2c8af778ce5a8d649d54bee481a83717f0f1cb012e024d947c4bf7524d1fafce0af398adceb4505c1268e4d1353fde9ba983f475f71073a032914be3f4a858bf6d93babe8a3996c77519dfe1b929812c0993026c55022b328481eb620190a77ce32b6a3be2e67b2441ccf39512495edb76fe94e5ef543df96aa79b73aba9d477dd4ef8da37dbf1613ea2be99c1338f759ec5d555a9f10afe65a12553dfab46ec40f69d02008288ec1be314a8bd60712436772b681cb8324ae8b29ec14391d672710359c0b8db0526198bbb746440139ea742bba1777bef0c637e5f738002451223bb3342b32cbbcb2862ed80b5fa89a466eeb164acb65c76f1f17c3246e8dd73a882666e8e16f822ede3aec72b050869e533696cab035ed85c1f7982b5b560714bb188a6cc63021b97a1280b5c05574bfa49fbeacdc0c83c0b5d5050841399e3fd3c4bbdb2f1e11cf304f6f4d1bc6d0e4fde150080ff7f396a79b9c311c50506b15dfb172a7fa4a4fee7f014bf4b5dcd7e16e74770161919a7d305615afa325ba6e002e14b3498549ce998a04223f1d27bd1bcc5783bf95401e8f86096a43f355d82d7614ce0e6df2d7972fe083a836361f96dc16c3a7fdadb929952b13ecd2393dce0b1fb57aa0c82ca6b16a01525444c9b6a20fd858db9f5575260d46187b1d95d413da017309b61eb6854a68b8bc86affd35c69f5d3ba00965963de82ffc1ec28af40f5dbb578c2500f23856efd6d2077174ceb49faf17ac1cf904e33ecf51fdecf36a3673cae0569e9b5e8ac9ddf37a71d369022b97bd692cfc0a13b05400945176bdd81cdbee19f8ca9817b3331fa408b1b82b59ae68a7f1421cccd40ca515de17f60941b8499a2d000700aa6a8d79874fb3202486c8ef790c12c08f19a8e5ce10f8a71c512a34accb2ebfdd7486eacf31da855a3a28b82cd01974a46bf035a081ac401b7bc0d438c138ab0b42109f065a2b65b4ae322200471721d9b8ddf81f743bf530c3c92566f6d06b5c43197cbad2f84e05b9421d132332dc171ad2023254abb71daf1e483983d3743c39be9a15bd0cb17f40bb82bdc13c6bc7584f79c77bf2e7abde09e7eaf2620f8aec15c3f2fc398c882675d2fca6039438a7b08638840d185421f618150dc0370e0ff389061f5fa0a8c68a2d035b2e1ae4b98d60e56bbe865b56318796bb613352ac479fda7ebb09e50c4d1eef3a11e51b46729f1a944179a4a9ce786944c113464fc1ad1e9cde234be0b2e110c72686779fc2e47b1ab89fc8aef7a5f1a87f2cd2694a385926dba9e676819aac1f197988603d1b84e547603751085a0e57a319c692bf149ff4bd834a767e6553e200a0561ece7667859b1eeb6ad63db84a150c511a5732d26f7ec9ed8988055c983f5fa9e13189987a64e1149529c247b60d3a47e1b21a26ac1a63436377faa3693c6bc7584f79c77bf2e7abde09e7eaf2620f8aec15c3f2fc398c882675d2fca6039438a7b08638840d185421f618150dc0370e0ff389061f5fa0a8c68a2d035b2e1ae4b98d60e56bbe865b56318796bb613352ac479fda7ebb09e50c4d1eef3a11e51b46729f1a944179a4a9ce786944c113464fc1ad1e9cde234be0b2e110c72686779fc2e47b1ab89fc8aef7a5f1a87f2cd2694a385926dba9e676819aac1f197988603d1b84e547603751085a0e57a319c692bf149ff4bd834a767e6553e200a0561ece7667859b1eeb6ad63db84a150c511a5732d26f7ec9ed8988055c983f5fa9e13189987a64e1149529c247b60d3a47e1b21a26ac1a63436377faa36911d68caa2862c78883eaee78094d9fb69b4c1aed67ae908a1a76c75ec489012536bc066bad4f192cbdf19e4a06169f22f64d1f342a06c9e1b7b20cb69f53d579376f5c90f6932be4e21e8bf4ba81788af616dcd0b4e8918429722fe8516960ec2ecffa2fbf06aae9090ebc0f4a5f396099e7dcc5407bed4486367ca93de06b20110e76f7b02ece9c3982ecb3f70fe1da83530d64b42225be0ca1b006d5dbe60e08a16f39db930aa46c04d98a0ed3505cce76287f52f1f5bd01502952c6adb8cf1a87ef68d7e5bb567fac868b158eee0225989799cc4336bf346c10bf5b624af20649f14fe91b305e9d3d81fd359391ee448e6af68430ee284c7dbeee81bd26c909f05442c5b704f241fd71377c641d2be4ff2d19d1a65d63a743118b73a8f2233a613834ed46c0f20fbb2de129cd6a2a0a80d21a19174d504d9a97fc5a8b6e591b7eb1b03b2495bedad51ec49fb3026e615d58d5d5589a3e786dc083b44e142e3f881a04691b3abed6a4ee7d6e267383a04b7313dff32acaa8364ed8f236493336ba16c4e10a0c9299f685933c30e7beb32a3a39f602d028ee716a92ea0d9df21a73ff6493aa3bea38ffa5a6af8a277cb45835fea8173b10f471d87a22cbbf6a1b7eb1b03b2495bedad51ec49fb3026e615d58d5d5589a3e786dc083b44e142e3f881a04691b3abed6a4ee7d6e267383a04b7313dff32acaa8364ed8f236493329f6a9800d003070cdcda76110aaf9aa7d36e81b2f992f2fbc193b97964147a82949cd58fedd1464592a82c0a259555dbdf0ff8d00b7d2f85e6c24fc2514f30e3d0fce52e8d5d063f3df4a42dc12ac3f72d87fa110c46427e42a8914083973c22fe08eb7aec94db1d8a0a61cdcd4d5001a189deb26a0b97b444cb0d94fa665d1000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011e5e5ca3d6d68cc37d95be7f9ad216d6f9dfa3386728f9f6e61c9314cd2a739a10710b41d3177ebea26696f874b807b7f63c97799b02175c3278e6a28729ae492035414a5b1408f785a513a4101d25de8d35a1cf91967f570b494cf548b712cc38b756ec6d7a07c3c9abc26c0187e912fda4ff8ab1b94bd2928b170854989368391b63e043f55a9e4dfa32dceacfd29ec1a46a74a5c060691cc4c916132d21590272298b3d7dbeaa10e0aa6b4e0c9a1df97f9874e6f99dc182bc4b035c6c0a3002a71eb0e5d213893cebb782bc7ff542bf9f17e4d8c339426eadc4e62e6dbaa8351698df5151ba7a4f92aab7db805f5e08ae55ce9f173d1647da725ef41a5b3409212357deeea463d84634616b2e455c701c277b733ebb5f06c076071cbbfc7c347d387f0dc314078def1c5ceaa809a19bb56870bb9c06f60f0eaa644d8b4b352e522d2d3e90bda2d91629cadb8fdf5d3de408a79a5646bbbf4cb395474e13e619667bbe394a278e2c476d2fdcd51133050c72b0195114798cd82972a952603f19c0421d72a90022a4ec52028dc8a65549639c675dd5bc013b46a1ebd1ef7e5909b11ffa9af7f5937ae0fbe962fdc6b87c1522efb571473adeda64cf8c4728db1e44c67e92d5adef8080670ac5417285b47ce544f191f8721149c48ce1ce3fcc217d296dcb681bb8bef0dc1fea3be8336d6c2296c26b242fbb545ffb6c76b68106f85f66e3129b1925c803b3440dc51a33647a103d52647c9697712be32aa2431be458d64fe7a417dd51e1e4eb29a5b13005a05546dcabc2225384e6d5410e430adbcbe0d5fadc3e29fc66f172688120b8881f108dbaaacd6c0d42feab8cc73f2168de2a48c3ca413954d243b44c3ceb36bf9932ea6f618ff50b7b2a45f035e121c2994e7d0db799844dee192bfe6c668efebb6b2b9c07ad45de1363eff5f1f11ded5e75ad3d41adee65fa47d01cda02b28d00b904e28dc84b0b68d2a5e3b7d816b1cfe0e18eb9972f25086d456b4b4979b594e0fd1954453bd7d1bf6798f0152492fbd0b99f1bb08c37feb6cd2461d5765b957d7a71ca61101dd0ab63859c361b06837f9c614ecd1ce30f5ea61ec3e8ea6f7abe63e266f32dd9ebdf9ce22f070b3c8dc9f2c8aefa5e1993d83b0751869846a068e389cc200f01f212ffe83bd4182d31e0993f65ab6232d5e9a5d46b4f943f7c7eb4ba5622559a3a23962a9add3b9912c3395ae8e1e194100b3ee4bd920fe43c65bf3331eef50a8fb53682682335a804fc2242d1fd07eb65b582927e8d4f4621a6359b04a9b7e400d6bee5044a275455592b86188c5dd8a8dcfd52f0e1234ec03d4cdd60cb5b4865bfec14ca1114bec47a8b355a78fe65fe9db9204c000e164111f01eda8be6f8f86ceaa380d017c8d4ee077f90a817617fa9a674f2ac640d03bd9cd8f5e0f6d645f756ee4e6400753b64d54528bee349d1a4eceb23f5002c8f12ebe652c81fa4823a7c7b766e07ba688a119fd96407f15bc478ca0ae4a50fbfa38bd6db9a2b67b1239e1e94902d40cd354048941ae0095b66e149d1241b3a99d6ae68e5d677b07571fb530bec0bc8332e37c8a1081d102be5fd16cb94cd41f80d36ad85bf28e75569f81300973569060a0c2d0a692932e24132ddcae677e5ecdbf472f2762e49f9966aa3efcd18ac9a7dbec42f785012585af2bd75836b68667ec4235fe1a57562fe205ee9db33f384163236e52a6fa73ee6425215d81bf12fb4c045ed696ed4c1d9ac1480143ea88ff9f4bf08727c90c6edaeed8c9301d3215240eb267ff1146f86ed917d1a2948471aa0c8e8ec27081d23afb4e1f554204cfe775d38c9bf33332e48c1d0302a966bc3537ae3aaa704887931bcd0b19022b2939a3c59b460ff50ebc55f4b072d4a0c59a5d418672e1ff69198450545f11210f4c39be3993587f81c59aad6d3053042527de7bbfc273bcad22e7692248b6a7896638194e277c29416a3c8d1fa2b9156d0883e2e597576460c0fa250ecb176f934eb8f97229e58da9feec87b080e2f92eeba6f16a3dc63818b7f24db8de3dd01053d37a70fd28fc751cda945051c2fa4e08f20e99f88d061ba12dd46ac60bb78bb76eb1d29acf11dcd6c12c7de027f069b45abae2527025d0be42b7f9ba7d4cbd85192ebdb8e4e558c9dee7f9132bc44dd584c65c32ad6554ec87b84d6f83c3f4f908fa793f680e3ebdfdd79fc095f58e683b963a33e36c98625e01739c0cf459d0b77770438d1b6860959ae253b36e87e22293239da1febd7ddc2d207efc9824ee6248300ef3b4a2b3c7b480104c91781ddd6cdc625e01428223d2df8327d16ad2328761aa9f1e6c1c384b80028128a76aacdfb21429f9b3754ce1a2725d5279a5982aa964773af242e68680117ed7589553204debd6064c8ab31e5d8fc717161afca4e8551b981c8d1979800085cb4515605e7a64d1e0814a80682c35655fb0fa3a6699c99bad8ede80a080237a34baea9fa1859b2e1f7eb57f97d3ccbf09dec65a68f7eff7257ff17f5f7ff29cf8596ae1d863f8196286748208dd0afade74e3240100f00a63ca58832280a16307a6951e279c07e69d798b7df722f7298b1add70ce90c9886f44777cdd7f73b36e87e22293239da1febd7ddc2d207efc9824ee6248300ef3b4a2b3c7b480104c91781ddd6cdc625e01428223d2df8327d16ad2328761aa9f1e6c1c384b80028128a76aacdfb21429f9b3754ce1a2725d5279a5982aa964773af242e68680117ed7589553204debd6064c8ab31e5d8fc717161afca4e8551b981c8d1979800085cb4515605e7a64d1e0814a80682c35655fb0fa3a6699c99bad8ede80a080237a34baea9fa1859b2e1f7eb57f97d3ccbf09dec65a68f7eff7257ff17f5f7ff29cf8596ae1d863f8196286748208dd0afade74e3240100f00a63ca58832280a16307a6951e279c07e69d798b7df722f7298b1add70ce90c9886f44777cdd7f73fa261b1844f304c485490d5e999b2633afba4d7b5b76ec065c640ecb11d4f893335039be7eedfac2e3ac623e673589a8852baecd7723f5e37deadf71fb908e205abe23651217faf5299b77ed5cc30332d338f239b3a0f6b8c8227bed0c9e3b3288a6954a2b0eb38bcafc7568bd41c19627cfb4406f89f021b82f805cc7350242b34f3b5c32fec58d1fde9006f2ca9ad4ee7bcedcbc67bf20323b940d6e4f9c4085fc63c2bc758e4cdebe5491ef1d312b8c5202a31dea6a908f8fe3ff7ae185f2b61aed5c571148a7ac564096d53c93c7f8b79906ed7509ee9ee34198ba18a5229fe10990c4fe0d8d457b75f10897c8ffd38320b2558a9e93d2329bfaec1cdcb26d1c1199f02c6dd9511f415952ab224894ced50c02360af85cdddc97e915aef37157f454e14797cdc35f834aa38c9f9635e541d77d2d75bd98654d3b7628036333c256ccd403b3d21c17f01cc6e398325260683c1a75838a8b30c828a8c1cea39ec7545c681b4ca67af2a046384bb7f8f82b129d1bc618951c62fd7249d8ab03ab1bc182a8f50046511b7ab409a1d69dc5dfdfcc1a8740b4011f92e7e18ccc72440930f7560351b151572858db88b4c59bd7bc7342f13d6def8bbdd13d3a6fd333c256ccd403b3d21c17f01cc6e398325260683c1a75838a8b30c828a8c1cea39ec7545c681b4ca67af2a046384bb7f8f82b129d1bc618951c62fd7249d8ab03da25df0442be8b3b878f477fe003148b647cc696260b5bf4f48d490dcfafca40ee2e24ae7af46019b015fa6a7fccdf90c0cc098957ae925d96f07ccdf661252191678764b6e33b0806843555161cad4caa518cba775e1b2013942e7e3ac3e63270381b6cf64404272fbdf12e2b9b12cdd15b85244bde6b29a6e2009a747e2b5000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010d1d003f32b0328e66cd74f1227438545fc219bc2a122603998a572a1d2e40531a4357eb921ab79667ab8c16ab48dcea82a3cbde07b417ffba57b5d5522c9331337bba61307c48821f3c40efd004ed4bde2007a52541fe9f74548fd9f2fda8e4333be876a397d00a7e7f739886bbd30c5cb6a4a7f7b793778690cf271b1dc0ec292d18346086432f85cbf906f769f61a7657bb68e57641a600d320a4e94037160e75f18209edfeef73d94fd2fccdae45a306ca1654e7c17a1842438d61becbd215d69d9d3e242b76e4391c2a414e84106dcff26ff4f0ff5a590a76de01197d7b1956357c1f3e6143f4e3d37de18e32712f32439770e5087435b11d3a1a7777c43e42f620a5fb98afdb43eab4d1a54e80d92f32ef0afffa53255c925521a3d158039f855a8434bede418526c49d85abea4ac9d8a01ddbfc7708d08ae7893fa60e2ec8f92cf08accc2367d525cc348e11cb695f24539cb6135e5f9a2481ef0890910026f41252233e1f13ffae6f356cdb343c28bae0315e8a19b1d6add61e7c0db39d2d866797ed09d18c6e387b6a6f360af643d9e818372eebb3e26eaae9ed6762e628ede598c6bdea2ade0bfb075eab3aadebde63b429fa005ded2adbc909c933210afaa6b3c4ab81a5ffbca49932223dfc54b1ed16d34ba45e89832cbd6d4b1377b461507691af8804d04bfd685a2d1c03ca32a01921a199acbd5c2483d774d1a72a524e8dc8c653047a917ff120f325d67cb79566aab33a21f6a0e23d932f827312cd5593e47f3f248ce578dd5388f7b853c27e3ad978468292dbd3eac15d9171870e189c9f8ebb6c30e5d3b010bc9f838b17a78d1508f910d298a06b3b75b1ee2192070da2ab9a7833741c9fde9edf1666b41a2d359b42a0cdb05f27332110f4aa9804cacfa7e5cb011cf1efcd2d32049406786953d0a881b5f2b169d8c0d2104848414e701638c8f7b57bed6996ec94e8443c0a8663a370e0eff4ea8b9a00577a9d2f24cdd4a2c58011d109623ae4e93817c0ff980096c2d5a39d578c5dd136a81abcbf51d10a5ea44821ccb7c89ac1cc3d788e791d270c527addf5139bc311c68133bcc0aaf12d9d9fe779376196aee8a797328a9d008701141e79eddb53bd626a48cb8bc5d9be59a750fc7fbf0f4983d7fe0fb6a55a30741d6a414c5742c15b6f134eee641fbd923bd1aaea6d1521be34531be6a960560267a593d6110156a3dfc665e576ab1784615870192a14a7fedaca0a927d7e5eb14a0c135d25a1c2318fba516e267c5fe6677595144c260ff2d4c00abd030d3011ec26e20391b21af7571dc2423ecee31f1d85df3c7489c8631134619621acdda029ce32b36991e02dc0c5a4d0c6718de0f9ba8c64df818a84ffa9c5b4865176200f827b4129116ea535f05c9898473adf5152d4c602de71b93d8ced8a31ce26e15e600dcac923d04100da26039d18722fd89181b25a7d563292cbef6ee790f732b27d941d8d7125d27697515563dc26681e7cf738d40fd011d02a9ec276ac1fcb4d92d580ed33d4edf7a57e9c475d27b00b8012a24cbfe65c7c60bb2495a903f88a9115122941192c9a7a6d376c3d8b49afa7cbf1463ae25ad23045557cd65cb19987ef1467e0bdcb09b1535ee9fd97ebc72d635d6543afcd591fba260eada976cc6285151a12f79f4c065f72b9432b95dad8a7f957270687135522751572b73b71687325627017d33c805104954d52d30569b012ed17b42737fc6d83bed8ba350ca54c205ed3ebb39ac2c99f78a170d7c98e0bf94bfa35a031f32d611fe453ead628d3409933ecfb0982159cb32fc540195ed116f5adb4359a1fc6659ace19cf20566eb9a412028b229c566919bcb1f8f32f6d6b53d4e60964cc94f59c5dbc99c94ae99ece5194d3cc41e76b81a7eacff222d314718bd5e2a5bccaf1ca0425c106ceb0af836194d3cc41e76b81a7eacff222d314718bd5e2a5bccaf1ca0425c106ceb0af8361336cb3c1f89c18a0ecad5a7d8f4884cec7f9da4fd1f60bae1772e33664b9e1e39977aa471cb55fbe73796178beea2cc175f1ef1707788ed7112e35e1e8464931139aeea0b74266bc7b4c686ee7e6b1899a72bc880f8e847e02ee51f28fb678e13caeba64198c7fab5ae87ef6c6628466d77dc9b502500bcf08451cf3efd18932d6ac108893cf4bb445b3cc0aa391511bf10f50fa3f375f9e6ad65a3201a80273a62578fcdde45b6cafc9ee57edc6b1a4fedd29f15e083c8740d38f7d52f621335eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5600a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa10da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c8525044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b61584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff772a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a35eea181928f3140f34f1c63b78d648798bd81d2d822d00e3493cdedaec3e5600a115e7e6d70cebf0cb0e39c48729b7889891729312a290d649962ff513c1aa10da92787dccbf644c08b8df295c2f6a57299252e137a2bd8a22e41f069d37adc3256d878233409bb3f74720d6a3d095aafad73cdf5d2cd42f6feeefc962c8525044dc5a74ffbcf57c2b9c5bcecced13b1ab720ea5815e21f91ba18c51121664b3bb23a58b00430a83d463a4313312ec5078f7811b13716fc07731827eede99b61584dc448feb0cb6cda0dcb0a00a16278593a493b86d6a9dd8a27bd955a6ff772a7b23bb7014f349325f234f5ff5e9d89cb2f46850df8e7dc08ab513aa59008a26c0eb7dfe18461fa0793ef46a60d39272437f52618c85fa1d2dc5e42dae395b291273ec8c376366733bf3821141216e0ba77ca42d0f24024091ff50cb578fa13319a2a83a6dd65b246c9f7d539b67b09c3b0afe9bcc31f641e4746e726732ac352254da5cad22b2bb31a255d43899f5be174c33d783688ffa31918b2d0e604e0e21a3242b6971d3fe4ccb9ef696b9135da7bcf4fca2d262a5eaa074516d97dc054d2413280ec17c6620f5d9331f6279010efdd8b39bd72e8d5068ef8a9e85021249a9fbefe0ae6d10083758728c436f632e70c3dee37c0fa87bf17cbf10fe1d040243d4624103ea078037d2db2be41cd84ba35cf91ab2d2197a06bed39137112393439f711e2b08f75b68f05cb3b276815f865555ed2e10a9d53c730721c23609b2b29c8babd2a0b67e37f0c6846a560b6c78a30f0ca75ad56ceaedaf1344f10da19af7f417d8eb69f248beb2644edf3b290f5bc8b5ed5b52594d3115ed7ada2624398d0ba3a6e2b9dfd9febb35b3873f9ce34b46adf497ab23701e0e96f06a262571d9c779e3853b1a218e4203c4bd360ea7a715413a46d34827875fea93fc21cb3739171b79e6d1926a281a86449c7ace69200e0765a4f796d0fe079a10140da19af7f417d8eb69f248beb2644edf3b290f5bc8b5ed5b52594d3115ed7ada2624398d0ba3a6e2b9dfd9febb35b3873f9ce34b46adf497ab23701e0e96f06a1bf90a1889423f7d0d781be9bda36aaff0d5258b1656ea0fe114fc9590d8da4527177fb2c298c3e589cfb206d276b9d07679c8d79643496a368a65eef2d2fb493baa8b5930a0b9898617b57e6630c42e29d90a9259c187073aa0ce5f0928421d1ad4c5a96eb27d29759dd9ea539f7bde9c2c9e9e0317560410399d89568fb04f00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001093344aa5551c9d5f5e550ed013a08dfbd10410b94fdc010412822d567e884b9215ebba77b4db36265d82f216ebe040b8e43301151f85e4da04175b72540d2b43dbed5249e75063b30ad99d106d9530cc22653c567b0f4e01557b039211155c62bd42515e3b696dd829d945b17c664461221a67dbbecc87c05d9d07f5f0a7185200d21315a898ee21cc4662f5ffc477ab2baaa06ae28764c04764f2aa609fd1417da6479265927e185d2d73d372bff4f2e873a95359b8b6a0f37ad0179950c3425cef83c7d3327068ecd76d87c5c57d360343b129e81ea96cca82a2e75b4d5f218a741d5987f7763923aa3a9e4d825a3c611007d2d1a3fe1c6dc3b4f63013135108255465a529a572ae1b1b54394dad36846488042a56ec14c6fe952d18df06905a6e70ca2ab65100f014f978e9796945da1c77551e3f0a9dd6e3fe21abf91432f1b50bd9b18486bc4d1ad07b8f37ba24a5eb2749bdab1f57267741639252447355b2b6332619f6e17c56f48b51e1ec19c549258d3efbf5371381317cb587cbf1c120860c5b2f4dd377e5bb6c685c77ab528d9a3c8445a577b48155d621c6c51170f6423726cf447b56acc165c82efb98dc57b8417f3660477fde88802ece7583aabc6d365494c3fe7a8b4b601d7609bc1d7197ad8ea2883b415324b5011208f2d00fa2f4cfdd0530e324ccc8d77190144133bfb458fee8ce0e5815f1958afaf16f8dd3503b8f3a886f6381060bcbc3f08922007b5bcdfbde3a85380fa7a39b708b38855ec1ef24871d5e05e65b5151207792f3d2d606d35a27411cafe2a00f00306246aae23311b3d68ec6e942727bd2eecdd2f46c917a2f188697e15467b181ea68aa63202dabb517b741ead5ebc7419f2f5f139d5498aa4d31ce2c27363262b92d8f8fb08ed61065655fc37c98dbf66bc23cfd92a39d6452ec97465132f5619ddae318bf4dcd55b17f3fa4e4d99ece632e45bff54b54e313e4ec274c10c0c0f3cec39d5447ba79dcd3f56481d4476689f13e26a03dfa79e41551822693b412ec078961936ee31a1f5c4f08b6f7808883adc2b1dc794be6eef4b647de38e5820cd61561e622fbf4729eef4a6b6262af44089635c720e09d25fb6260a60a02731fc43cb87d7eedffac21f8ce47604d5b52b6f28a05bc408c76d759890a022893505db2eaca7cb6c118a0773a439208666a25ebc401aed8634853835bca17ccf1a7a8e3eefe81bd012c1fcba3907be1af3eb3798a5351c2f22196f01520756063f791c9a36cd2080991066a02005ce3bd9e9f0adc2ed35646d789f172e818922179d60261259eae4300e1035a637144d282b386114aa91cd89a1ea421aa9b0be3edb9eb85b150517c9774aecaecafb4257e4501c81c4a7bbabde2660e5ea3ae825ca0650c0869e913ee053a594ba70e27f14edfacd1fe986f6450333a380f3031d575cd005ed347d37490087b7337d03814da192397db0618d95092f4370928d07121e6171151738ff202a2644f5fd60e1b6ea1710bb69bebe72a1d228cf17893cfcc337e7958d062f5ed29dcec2feb3009681f2ca026a5512013888cfa97bad061f655fbbc7963ae95add872fba10115aee62ad7162c4d708207857af60d77327c25397202a42f211f61cc3b7a43ba4c8900e38ff31a3ff7fd68b05b1bc0b0917616564587c5586670c03e25e4876314d5e8d82710537d261878f98e7f2037f2a8885194bdcf7f5d6079d10bea0d29a9635ed4cd029d8434a775c821a4e16da3a96b2855133dbb7ad638dd547d4c769b5dbc814147f8977e09f3caa55b3d95f07b1dc16bc129755a8ea24021754ec94a5fabca5cdf72b34a66ced589fe4fdc105a21c604c153979d4d5b4169bc22e5da3e920853c172c36774e5abe1b2aad200281fa11cec3160470754e0f11984bab0e0a38283e1e63ea8fac5f63707f543e17c3f1468f9773097839a306a1e1e8dd6d6e0213cdcb86851a96088ba8cb7a843a49d1d59f338127fda5bf82217f116db50d0be89b62d5dc5b85e022cfa092d83cf2c34064b11fabd018c452a280ab136da447d4adae8629dd21611d8f56f6951321004ffa7604461606ad6cae91468b08bd4a3bb88dd90406214dd855fe13a610f4df5397033e67469c4a07ac1a5e2e7c2d269c004fe4688e0de28dc37503b1281314f0ad7c196b92dc983413b825753eba9d072f5e8ee73470b2612ba69b3c3292e1f572c5d814410be7311ecf189116e8baa3a73167b838da308efb62ad051cc48e2a4e4646b4c815ae94927e28a90e83a57b3634b73e1e3e8f9ece560ed8233b71d5b1b9b94b37ea516b6d81d75713c2f380d31841dd7aeea14e31a9f1290fd6c6d3875f6187e86c68e6dc76cb4d0405096ffc6da1ff64de6c4007ae4a363029392c78a09e7817939719238934b31e418f8c0cdf571c344ec4acf851b5cb0f31e221a4dce7a78a1e0c824e51f880f1d29633e4d730e15f2aec532667730d30ce1dde5b23185875e1f37db1ae077f307402c82475c83a3a024499d9988cf40bf96aa838508645b2963e8b8799da8496d656076ee6fb4b42a96cb2c0053f4034069557c7af79ba4d69c1747866257b8b7042f49a65fdd05683c43a3ffac0c11cc48e2a4e4646b4c815ae94927e28a90e83a57b3634b73e1e3e8f9ece560ed8233b71d5b1b9b94b37ea516b6d81d75713c2f380d31841dd7aeea14e31a9f1290fd6c6d3875f6187e86c68e6dc76cb4d0405096ffc6da1ff64de6c4007ae4a363029392c78a09e7817939719238934b31e418f8c0cdf571c344ec4acf851b5cb0f31e221a4dce7a78a1e0c824e51f880f1d29633e4d730e15f2aec532667730d30ce1dde5b23185875e1f37db1ae077f307402c82475c83a3a024499d9988cf40bf96aa838508645b2963e8b8799da8496d656076ee6fb4b42a96cb2c0053f4034069557c7af79ba4d69c1747866257b8b7042f49a65fdd05683c43a3ffac0c12e26f67ab7b96cbd66298cf342505f2dedb559fa4be2273dd01899d6c3abb17105f957432b4d66c307dd8d7a9f77a65b49b53376dadd9b2290ea826fd6568a54328901bd7dec480f910056c170035df1b20463fbca533c5bc3870c994b703ff41daa6752bf51b20fb23e4f23815f9c81f3ae94b116bb42dfb669e6eb5956049f00344d74eb36915306adaf8e9269821e7f7d18fdbe18f81e064f72ed1f9b4231350512464b4176111b7ecf3178e1c6e6184b4c23c0e9cf8ce8968bfbfb15a651252145f4002eb00160145f0eec0955828f1a4069016d1ba01aeb4dc2c8b7d5d9318e6b93413a1ae9d9e25f87b4ff2113104ee04abf7d7bda6215e3899271cfa9256bedfdcbed166f3cf67200d7192e89a3a7176b008c5abbb6eb7fa995de2f2c1149a31f1b218ba1c8eef40229e00b9f2dbe6d8f3381345e94107f4c3810633a2dc8fe7fd0fe6c894514898011ecc3e0e47cfd46463f02f7600715ec21d283ef0c1b7842979820f82613e9aad8d2aba29edba2a09b2cede1d088e81884ac08451f5007c7ca5a4b3308d61c4b4dac42e0a4d37401fc648e9d9ebabb69f0e40e9e1c5c416a1560e72d45e42361df28bd22e4e2d0d417b41b1951d8c791d053710f2dc8fe7fd0fe6c894514898011ecc3e0e47cfd46463f02f7600715ec21d283ef0c1b7842979820f82613e9aad8d2aba29edba2a09b2cede1d088e81884ac08451df43507dea22f3a583eb27914338fd90d5e94b243086826d631eaa1fe63b6542a3a94618e653389c755739ca719ead12f269437235c37fb8f9d075b636c4b6c0332614ce7d08a2f70578ff2630152ffc6052c2897ef2f2e4c848f8f853d0a333a35c7d7bbaedff8d16914e3639770aeec01c8e6442b3f836f033069f743e00e000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010da2fc30f5f1da78edfcd3338b6c83105390b140e43cfb43a5d1af52483e3b0629302da82482cb813c829229fc382f35abbacf7a85924e3c6390dfbe079dd7e53547343398ec0b810500359a12bd7785629707ea6eb263b608a4ef0a6caf11250adbef287e4208f7045556b18a42eb5417e4ab912396740c7049642de19f3532263e9e0b8bf9b9f1a757f687c9680b8f8af213433e00d7a89067a2c4db9e4de1348cd82ff10c1760f07e3dc9a80395ca6570142e4013029bbf3f8ce6aa810cb01e6f04b71c89f8e7826917560785cd88e4be148b5498614a6c1c2a687dd7e61911dd91a0123e06760481675cb9afeb8b64d372e4d45cf5f17bf2ea1a4084870a38ee07640f46c71664a859a87dcf81f6fa52ed0adb17d822a8458ea05005dedf15eb95ac73b1d85c6d7328443e8cf4762256306c64d20af914683f621d88283b1495c0a20c93fa6ba10f060d00da4454e81ea57201e8d588c5d9a25c2f4b7c763f9fa3d8bc1a9d07d6aa148456a6c489d4611a8e87f25990955318ad96dc775331d007ec2fd2f29200f10bfeedb8c7df886f3656c5852cd3ab58a4be694b017b1e7c7a36421b461f040d1faa3b6ba725924626c946bf940c171111c002c754b10740d19dfed2a4c63287768d738a3d4a1f116f8ca2d2a153ad0e23b219f504873e42c19c76463767af3a92f8c191df0b608f4fc25983a0d1b7927cdbf07edbe53844f67fe121c2924504f4fc87d4b85f0bbd0ba3ff13a50623537125170ffc23221a86d80123637f202e6d0c723ea132fc17cb74489bfe30e034de464f7401bd31b7c22c5b1fc4aa24101c7fadd49a3af1748f3d5bb4dc4a58f637a633eab78e3311452ace09b790e06cb0a9efa5d3288d4a47977cad80abccb2393846922c680259de44da58f7e9596ddb898ca45714d5544ef75917e520da2febc41d347a7422ef5938829f86d3e6920acc0afef66c46be344f1c905c09a5b4010849b1907c1db47217c00f55794941a86b11bc15b0c9f267757c45f3f6a1108b547e568b9e2078c2a720ff8f5f548975cb7af55990bd07fe04b9cebeaacb446c64303e45000d6bdaf9d70465bca58479379e7ccb7a82b2fd0336c3ee40ddc054485e3ef808042ea0f96cb858a8de2a7ea2f841c1976ed834db8f28fd4d12072bb3453ae4ae287dfcba1fa8736043ef524f4006628e464f89f4dfdfdc9abbd11670c380dcf83843a27a7be7c9abc4bff7fad92c4b1364a174b7b7ef70d973c982c21f3c710a3d0c359af13bfd9429290520a3b2b16bf5960a05d3532bb12f8e7e601e6036e323b4241f6a461db452977c31fbde52547d77103d014850d43e26fb27de96483217645fb8957970d792a5379fb1bcc85e15b5fda78d3c86d0649ac9abed7ff9c73b2214aa6ae258a5baca24ba8e2e1051e2b01d731b5ebdd9abcd0625c6ddeea02796019a40f8886702de808ca43e81ce321ee1ac90f1c873f3dfc4e09905221a3197dac8ef94b1127e3101b1ec0a795d91205f7761beb2bbc3bc49b8ba42a16311f305bf9aec636f5ff95b4b49901597de08615206713d5456fa2e0c63d9e9700df7af33054e4eeb9605e838bc8c88408d52ef5c96e7d896b56630265ca9ef8a045b7bc1c8cc4bdae9a6071e4963e3bea62eaba23e6e7302c3ccbbe1a29ccae1205d81c787cf89f7c8ed0283b41d51dc6cb84f63733062b0ed3cee609cc19b1833740d9c69b019c85bcb0c4eb097bc0608b14c587d64a29e7c3b441f5374eab93a5ff36f23dc582e7d56fe6e944a0736943c1e62d45dd7c9c33deff2d6b3705520a264de5ca066fbd42ecb90f6a8306519119b5080a9bd8230133317dda013d73dad4c91f34e2561c3f7dcc8addba06fc16a4963c6636e4c22c22739c245176e0eec0b901cb8800c0ccc9aea12458d0495da5f32d889199fddd93505aa9f2f5514e7a4e2f902daefd6fc630071cb5bc315773d745c91ae8c3809d5bc904a3a3834f318343d36b7701694fb1cc747fda5bb1d9172178119e09217e3a7d96ae2a31d75b9dc32be4dfdbf17b8c0d772c72aee4f8bcfd20d6f2eb6f2f2f4157512751f8abb29df275828c3ad25beeaf5728c8286c35f772cc635e4ae5c18f62cf93f0b02531973cd7007e6cc9f1c35fd94a0dad9840eba0bfb04bc6f8b9b7b1526ab166d4f7b846dd37cdd6de15d7cfbd74089ba6f679ce126c9e7fdc8ca30ca5ac70a45d3b1781f27cc9c58bf9cd66f92ddbf2039beed15f6a4f01559c8eb03ef700bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb0bfe91fd2023cd804d84a4c24cd1b51bcc3a6ce55575dc402480ff4f8612502134016e02dfdc327fb27b5b3db32e4ae4560c2c16b3d71cdb74ac319d79edafe03bf8d9f1a0b30381839737cb8018898afd24207aab4d4d40b684fc8d9e5b90a50407260e5f4cfc7e7c68c8347fe77675252278815dffabdae2a8345f61a46f5c2bdc41b8237f118791f416f9807aafb6689a3e75334e9dd52be42b1017c9d3351423be47dc80ee786e0be9067f855049b9ac5a86d5fe5b466d4905dce8362ccc1b4d4898b17b57a5d9c472df82656e8fa42f6d55e4a229d70fed448976f1200624b2b7674e84a85a263b8d207d9a91707e172ba624aacf44893fec63890edffb1663e01a2fa1ae50abd4ba011e76fec176614b25d586cd93f115fdae36218ac53a2cada481af7056ec887be3f01208ede13af2c20603e481f26b4b71ef0f216211fa42639b21ecaf1ed4e983217b62a6709fcf49a5422b064a6309c8e2c557662260f666d094d1a6403be2dc098fb8f586eb4ad8166745ba69d9a8268d67ce95224688bf433df1ae089e293b28e241cab5fcd9cd6a27caada7343d9684dde77a20de236c8d5a6a0e502a2e3ffe172e2714300642e4b9f8986569c7538a0b81fa33ee9d35863311447a1f0d41296828ef14e845415c2e1024c8b39e27624bf3130d97ba61a8a2316eb79f39a161619e8bcb7a52eef1358e006dba79ce51baa33c10c697823a4c4bcf76cef00e67a7c4573c7f2b17dabd0fdfacb93a9679d4e8a211bd6a4c417911b42b7f4e8354b2a758409284328da8c61546bbaa13ac0ab63936bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db17a1dd82353c650035565c7bc00d9e983b457e8c8e8400815db42975e7191dd723725bf4adbbbe02d33ba140065e3e1cdc66f45df62ec7fad6156e418389100c36bb374ada31065149e69401334dfb07619ac31404a53b944e0a6da75f7c68b93c251e310574c179ae4a9be0470ee3477a2241eb3eff4a3067a3bb058e5639db16e08890aa848dc2cf6ebff393973a719895979a2e346a08da82cd7f791497511f9a4131e99449698ce8ce1eaa5edf794bef39d7950170d87650c3653eec76d50bba2f36522d59ab82ede2c4985d52a8c1af4cb45768d4d34000a3c4b4678bc92de546b81283d93d323202c8cc923733cabbcbd1b161d0388443c11d1282ebd00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000119855653a92b5b37bc84430dedfee92e5fa2a1627ef010cc358ffc7ca795f8ff10f91417ebc5fa0a82c0fc211c1ffd54bfedcb8a1eacc12001db3d3dfcf6410336fcd7247b582bd4755c005b613b80ca2f8820cddcb43e242679713b9c095089132f24b896d0c5362ec7896ef900a2aba3d25adf53f77108f34a222c4498678214299ad45294b6b41dddc527a1ae46013a4622388f6d3f7fbd08cb5da0b408e8111e3f7e1b77c40285c0545eb39b341c4a7f097d9bd852d41d534ba5324d57cc066debc195b53304b7c8f3785ea52c698fab1c33036da1aadb1d57d46a57fa0b1b55c2439894e8561eecc4e7337a6c428414211cb9e391ff0d1e54a1dc8492741382fb675176bbf903e404bdded09f4a79609c13f8dd0adc9bf398380d0643c00e803f15245b8ee7e24b7a7c9b475907f23b775017e95e80844dc3591d4578e518f961d2961eace213ddef4c9fff847634c6aed28ea2b36c47e11aa8476227f61e1a563dba60b85dba030b80ae9ae90dfed627a0c3282e96dcc4f6f5795a0aea303db71302220fdc36cb981571a7a39988356de91cbd34414c176a4cbfbd0b1606547e6644a457d54b633df37048afd98c0a7b53fe4373e2fe2654b7e11f75890f4a5c550e927e552d2bdfb5ad5b579ec4d13e605ba0e8be836ec282edc0bc8c20e9dfe79ff700f343168ec6a16ab1dfcbd35a3498546dbd3834c9a0c16f318722b5bf8602797964cfe223f7f39caed228cef4a518f6375ea58a12923cea8cd12d374dc211ef11c761695eab8bc0a9a0aab656a0122a5f78e1d299ba93419f1a0d1a3a23a33ac356a53f60b4d8d4635586b2e25f81d3fe22d36ae75e7cf442be2e35b50d9687b4c7d820a14f2e63abb3597f2ad46eeef9d20d6372707e81089a184020a4fb3d8a714a4f626e3ea5bb356c6ef4c6747cb8aedb354a201f92f6e62176aab83a16b5378cbd7456d7163bdaf3976424bdb7563de4371f703e5b6e3c05a54c3ca90caaf0882824ecae0496d22fa11c473eb0fa671156a4345449255933935e3d12203a4564b3f7bd3e5188139552f235daee4ea1fdf45a81915341650b88d5843256b8f16a31985616cb634b4a614bdb510b92f6e2c2d2268695cf210ce82eabb395d8486c049a6304082636414c908c415de6ca846f31620d3fe25903aa258c4f5cf8008e3f972b21e33b538622309766d0a7dd0cef851a07dd74421a435475fb6ab1e7162ed84df5693d343dec523b4069c64b9c89cd0df7fdfa610bd0cc0e4bf690b74cccc9f4da3b379896be27c571590c67e76971b5caed42ba2bac1db6f1236abc4a0927a957c66dee1dec17d2890ebbec9617ce5b2781620303d3d397302499301ec0ff0a2f2a6171831491c3c698372840da2d0655b68ccf3cadec78445ae88b4e7beec24095bbdae8981bebc7a1b4ea4fbefe3effe7f40f02c35d2cc186cb97ee70cbab620a055322aae8a6337a853544e15a280f4a93972f17598b444349e9adba8bb649ef188d910c0e3d0b79989f0f8604fcff06ffee3220e40b6e3b8bd5b56e9d049c833f29339266b485253e9871760ec1a5c9b1522a0cf327b065fdc58065610095ec4a60fd601c623a664c5cbc801b45440faaac201a60c7a9c8790d2e4b2ead49dbe70a7267da3683781a11f5f64e49c64a1b472c4e2bbf32761299b938962a6b3e204de7e452718bd691428f31b78e05d97c3a3d732743c82f5d48ed9a893e0be8edbac1b2687ef0af6b353bf98639ede4427f240f99396e8262647d1ba5ebb951165380ed43913e404c2172eece648b8f431a0e9d13f24d8f4cbadaa2dd0b29bc97e0bc6655051cd7ec595ba8de236553f1b63eea4050be3b1b13be6c78e3df2888e1650abab2218939e2b61702514684dca807e123367bec5811decdc8d749c29c23b23750bfd52fb11e10c429b7d98d419a06bd7b4e1dd77eb398b7f72bfd3e106249cb9737d11d912acff5585563a76e991bfbb9289dd155b42171679d712ab8ff9c4333bbd29764c3031ef81e91eaceb23655e9153f46b97ba2ad0a01a65b132807b0cff3264c4050421e3033d3e4307c10c685bb1338e347aa2c5765e3d9ec3d3b00716a4ae009b3c2120d02fc58526d3db2f9de3c0d7d640b53605e1cc84df1907e3ee914a236e7832439bad289fc523378d8b5238ab2438e658a8f45f4a8ec8f007da873d23e81eefea7862b977dbe26660162bd1cb7ec1dfad6a884665218c6c67233f897f80a722d9017bbf94e0900000000000000a012759c0215a1a86702a2500237030a7e03d85fe9d051c66296b7e3a93b6477a3049d2c7dd3c3702c25deaed9a5c26aa3cace293c144ba9fedccd9d695fb5c6fd1a7e99fbd4f431e180a0d561519c950249514312d1a144922021cadfdcc7771435c685de832aee99ad4ad16e045196e91c27e77c6562d73408655f1ae8dcea0612759c0215a1a86702a2500237030a7e03d85fe9d051c66296b7e3a93b6477a3049d2c7dd3c3702c25deaed9a5c26aa3cace293c144ba9fedccd9d695fb5c6fd1a7e99fbd4f431e180a0d561519c950249514312d1a144922021cadfdcc7771435c685de832aee99ad4ad16e045196e91c27e77c6562d73408655f1ae8dcea062a0356a4972f0421effb68d4d5f6f5c3bcbe7e912063ea82541e548f2076393f13918014f2a51b817d20796e29149f424ebd328958ffbc5a54b6f83420764b9a3721ae20720e35dde1611b5221e5d51c2766d5642f5c20aed5e2833b77e216bf192371b9e610ea9d4c8a8b7d340856cf3e12552b07a7fb1752a4a6bf4dc24a5b266dc96aaeb153895cbd2cae918ce0ba2625002923160c55f43297beb9fe1c5408a36e3187e124a289371d2a7ce9833f837369f6cffdfb17914199a72f6c4c403d2b7280faa8aec9196a423095f6cbbaa781ef4c9ef7d7cf8c845f2bb4c45b7f1319ad595d7671b21481649ebff76030bdf73b42980c43f69c02cacf10e0059b2af4bd3e350157c6dc4ad17d71d9d09f0365bbf4068e4fc1c65be7804e9bea392cc1385dfc4d334710cd10d84ec95a56d670743278a526281835a48e83c7bc16198ebce1e2b0b9e60b09b7445ce129128b765f67c20dab54dd7b0ec250963e1536b662f8756e669522e1ef8af90d02d8da02cb2774f670714b0c1b38750e230519f7996275ceb858f86846647bacafe3dc452c066e49770eaaf3570abb42bfb33f97adcf90b2e05fe074ffea7791ab775345e1b1f316e44041af4994f1c01eaf2357efb434a2fde9aeede8771e6cbb28df384a5238457f134f9d721b19da57292ced3026237c22917efdbe58378170c28640e03cfebe9cb2d8e9b7dfabca09f124e385070545ca9c812a55aa1ac11c99ae6d5d0ea07fc9e3c3e8cda29fcf1cee3e8fe80e82c9ceda4c6b9c9fd182a30a8332ecbd2a678670ef1f01f5d30b38ab36b662f8756e669522e1ef8af90d02d8da02cb2774f670714b0c1b38750e2305198ebce1e2b0b9e60b09b7445ce129128b765f67c20dab54dd7b0ec250963e150b981816a940df8ab3aeb045431c8e77922a3de0a2667242b4f5b4649926663108778f2f4bfc62db9739a4bdd5aff1ee913927e51313f78b76c04e60a62cfea5390c1e3b11c180dd00aa36dfc93ff970c62b664ff9d598b3877f8f82c71510b91739019f465d9f9e2d416fef8cae327a9f4dc43f3d2e8312a1079a77fe8f50610b981816a940df8ab3aeb045431c8e77922a3de0a2667242b4f5b4649926663108778f2f4bfc62db9739a4bdd5aff1ee913927e51313f78b76c04e60a62cfea5390c1e3b11c180dd00aa36dfc93ff970c62b664ff9d598b3877f8f82c71510b91739019f465d9f9e2d416fef8cae327a9f4dc43f3d2e8312a1079a77fe8f50611477735ec4434b59005bcea40822ec5db8cd6e1559b47efec9eda5670f59608a373f4b7e989755551406ac5cf738e8a87b1007ac673e5ff469d05dc761865ed514a0e10566701e8d6f1ddb86c994ce9401f40322dd1827ccb0efbd610a9591fc3ba43ed4f1af01edbecdcb488c595d576385276c59ebf3f977976c99bb0ecf1e13918014f2a51b817d20796e29149f424ebd328958ffbc5a54b6f83420764b9a2a0356a4972f0421effb68d4d5f6f5c3bcbe7e912063ea82541e548f2076393f3721ae20720e35dde1611b5221e5d51c2766d5642f5c20aed5e2833b77e216bf192371b9e610ea9d4c8a8b7d340856cf3e12552b07a7fb1752a4a6bf4dc24a5b289c84dc117c8e14414cd7755a9d79743cc41808276b14dee965bf166f0bd82208c4aa0a17623fe4335ee49bc2bf96977f9aa13ff9704a3b619880177765bde635267a1432074b6ae08d4daaf3299ddc5a0f8254fc14bb86e7e37316178f8cb71b1ea5c62617d5104d5e592462c48e0f0b69a83a3aef603f40a3b6e4ae14d46326c6ee19977fddf8caa5f645a697eb0a8e14609c7306b4da8ef83393403b2e1a292cd9d9b0f1ce4ae1de94853f43093be2801d236860816c5b9c443e7b5a0ae6033ec7580d6414554b1cf18685d99bc8981a1758631eef6433533d652ae693920d0658824abb0c25e2ceb548d0149022ab187a3aca9833465c06bba89abdcd871c8f802af927bc9e83701a248880c3577cb2e584558b882c5c90c9c48ad5a22112e323a9635bc73822db3f7a250a523c389f85b02a4f6603681d5dc749889a673ba43ed4f1af01edbecdcb488c595d576385276c59ebf3f977976c99bb0ecf1e14a0e10566701e8d6f1ddb86c994ce9401f40322dd1827ccb0efbd610a9591fc08cb9e62053a24cef26be596b4b7a9694d5277bf9c18d301fe074d62e51a75a433db95fd1b3bf2bf3fef6a7887cfd16de64c9bea757c219043f9662e633661b63620fd11220b311ab70496f4548c486df9e084a4fa2e6c52300e17177e8a8e531a2422c93613ef6076e70fdb0161e37d6b98a5ea3cd5af73f87912e34719d2c721e9956eb80c7652957af5da3f8b7c196bda3f3323076028cde0a33b8e69885c3fb08610fad015794c5598767a1d132570112d06c5b30ac6d71617cc09d1952a2ced3026237c22917efdbe58378170c28640e03cfebe9cb2d8e9b7dfabca09f12357efb434a2fde9aeede8771e6cbb28df384a5238457f134f9d721b19da5729041cfe2c86efe3847f1adf1eae867f3c6a0ee184e2f260219d94f9f096fb35fa3a65302611f829720937a571c1d8f0864b81ebc74c46786f18d67d3865f1ee931a2422c93613ef6076e70fdb0161e37d6b98a5ea3cd5af73f87912e34719d2c73620fd11220b311ab70496f4548c486df9e084a4fa2e6c52300e17177e8a8e5312ef1e7dddc34de23b4855bdf0f32e11492eff625322a346879e6d19d4afce8536d9154db2bc08aa0ab9c2d09e96ac7ce3a2284bcccfcac225cf7e728a1c975a1b1ea5c62617d5104d5e592462c48e0f0b69a83a3aef603f40a3b6e4ae14d46335267a1432074b6ae08d4daaf3299ddc5a0f8254fc14bb86e7e37316178f8cb7361eebedd397316f4a9f704b42880811ce4e2d3521bec84ce4c720a20a48b0332ce4abdc3944e4dc6dcc0cbbb6cd1b8eb7ba055a1f87c988ccb1f2f410c6ff3726ce83f33034969929d12797406b017d3fcc69efdde1b7854b3dd23f13a8285729769be727ea89e2041a7f3815832a6e25acc09f59226440dd4957bbb1fc38c334cb825923f5d4f4e17c7b161afca5f1903c77c9df4a9fabadd7118dbf35c18c2f4b17d8ac0336fcb0b05aadb524cf868a4ce0067ce5bd15d70f9819eaedfbbb35c685de832aee99ad4ad16e045196e91c27e77c6562d73408655f1ae8dcea061a7e99fbd4f431e180a0d561519c950249514312d1a144922021cadfdcc7771408778f2f4bfc62db9739a4bdd5aff1ee913927e51313f78b76c04e60a62cfea50b981816a940df8ab3aeb045431c8e77922a3de0a2667242b4f5b46499266631390c1e3b11c180dd00aa36dfc93ff970c62b664ff9d598b3877f8f82c71510b91739019f465d9f9e2d416fef8cae327a9f4dc43f3d2e8312a1079a77fe8f5061383c00920bb719499f368278bdd05cc8604fc66af40277748b17a1492c0aa72613dc2a837714930f3583084de0a029d7df47b06b59b74e40e7e0580b2fc8ec2d1319ad595d7671b21481649ebff76030bdf73b42980c43f69c02cacf10e0059b3d2b7280faa8aec9196a423095f6cbbaa781ef4c9ef7d7cf8c845f2bb4c45b7f0553049f03e13cc6764c4f07f085e5e5d329c2319466a145451088f98224098825e2961f6d0b3b7a97dcfaccd686106da571a104d0fff596c8c729ef0784b95f0d0658824abb0c25e2ceb548d0149022ab187a3aca9833465c06bba89abdcd87033ec7580d6414554b1cf18685d99bc8981a1758631eef6433533d652ae69392113d3479bf81c081aadcab8d86c1e0d018b8b8c63a79256aad04e75f50c25c262c4cbd11c2c355cf1c8ac3d0a3828be6430c7c2ea545e399207f1c2abfa1e32f3be4dc30e784e37c6b98e7b2181f10c731bdb24fec890edb6fa636d9af02308f146043a9709a3cfec252bf1d3dcf1b2433bb783f4a7b0ceab8e0f32116a2308b0b981816a940df8ab3aeb045431c8e77922a3de0a2667242b4f5b4649926663108778f2f4bfc62db9739a4bdd5aff1ee913927e51313f78b76c04e60a62cfea5390c1e3b11c180dd00aa36dfc93ff970c62b664ff9d598b3877f8f82c71510b91739019f465d9f9e2d416fef8cae327a9f4dc43f3d2e8312a1079a77fe8f506131e8f52123f63e60d9a7797f28509c1eaa3c0cbb7d474715075ff36e781586ea074f2aacb98d4ac71105d6e3a7a62fcc955ce91c60962cc9adf017c2b19a1d0d09de9e84f3633649af21ba800ec78d2857419f7ffe7a8082e165167adc42264d0666815564bbea317ec9ec4f47269ec2ebf0f2132f3ca227adf4e292e9623acc0c42022362c171542728c385974c9ead0602c821d8e6e467f7f6236d5616ce161ad7b948615f70ca489cbc16fccdcb869d831a12a91f85d13b92d39aafd3c8fa1739019f465d9f9e2d416fef8cae327a9f4dc43f3d2e8312a1079a77fe8f5061390c1e3b11c180dd00aa36dfc93ff970c62b664ff9d598b3877f8f82c71510b934cb825923f5d4f4e17c7b161afca5f1903c77c9df4a9fabadd7118dbf35c18c2f4b17d8ac0336fcb0b05aadb524cf868a4ce0067ce5bd15d70f9819eaedfbbb35c685de832aee99ad4ad16e045196e91c27e77c6562d73408655f1ae8dcea061a7e99fbd4f431e180a0d561519c950249514312d1a144922021cadfdcc777140873e05790b82c8f9fe464835722a2b6a6f0f25aa6b0b2f116dad0b9ab66214f0b37864fb85b65cea3903c4e797d18140d40d628fa8698a02462233343317e8b2b415e8104aed64ee15ea2fbed9cc6db366c99f5eeebf4409604abbfe43c11342503c15953704a2c4c8d03d3685165102f0c90994818278592827e3ae1684fe60873e05790b82c8f9fe464835722a2b6a6f0f25aa6b0b2f116dad0b9ab66214f0b37864fb85b65cea3903c4e797d18140d40d628fa8698a02462233343317e8b2b415e8104aed64ee15ea2fbed9cc6db366c99f5eeebf4409604abbfe43c11342503c15953704a2c4c8d03d3685165102f0c90994818278592827e3ae1684fe6049d2c7dd3c3702c25deaed9a5c26aa3cace293c144ba9fedccd9d695fb5c6fd12759c0215a1a86702a2500237030a7e03d85fe9d051c66296b7e3a93b6477a31a7e99fbd4f431e180a0d561519c950249514312d1a144922021cadfdcc7771435c685de832aee99ad4ad16e045196e91c27e77c6562d73408655f1ae8dcea0636d9154db2bc08aa0ab9c2d09e96ac7ce3a2284bcccfcac225cf7e728a1c975a12ef1e7dddc34de23b4855bdf0f32e11492eff625322a346879e6d19d4afce851b1ea5c62617d5104d5e592462c48e0f0b69a83a3aef603f40a3b6e4ae14d46335267a1432074b6ae08d4daaf3299ddc5a0f8254fc14bb86e7e37316178f8cb7266dc96aaeb153895cbd2cae918ce0ba2625002923160c55f43297beb9fe1c5408a36e3187e124a289371d2a7ce9833f837369f6cffdfb17914199a72f6c4c403d2b7280faa8aec9196a423095f6cbbaa781ef4c9ef7d7cf8c845f2bb4c45b7f1319ad595d7671b21481649ebff76030bdf73b42980c43f69c02cacf10e0059b2cc1385dfc4d334710cd10d84ec95a56d670743278a526281835a48e83c7bc162af4bd3e350157c6dc4ad17d71d9d09f0365bbf4068e4fc1c65be7804e9bea39198ebce1e2b0b9e60b09b7445ce129128b765f67c20dab54dd7b0ec250963e1536b662f8756e669522e1ef8af90d02d8da02cb2774f670714b0c1b38750e23053f2a32a8f84122d2924e0142e794000d42ad24e90c5a1d5e07957c890bc920932853c96178096f53e4eb328af4b32fc1f250f389933c6433b599ba444add3b7a2503c15953704a2c4c8d03d3685165102f0c90994818278592827e3ae1684fe62b415e8104aed64ee15ea2fbed9cc6db366c99f5eeebf4409604abbfe43c11343ad27b7818115430e0511e71f2ef6faccefce48d246229ba6deae61888a43f7e1b606c6d3f92951d658c49cf9c241e318a3cfb3d9a23a839201f24be2bcc57172b0fb5b790cae5da3370e475482680941ee43b054dfb1a11d6fea8dc66dca23525356a22c7543aa0fa7ac25a0dc7ab574694ef89e90901b45188811e5ec7bee513dc2a837714930f3583084de0a029d7df47b06b59b74e40e7e0580b2fc8ec2d383c00920bb719499f368278bdd05cc8604fc66af40277748b17a1492c0aa7261319ad595d7671b21481649ebff76030bdf73b42980c43f69c02cacf10e0059b3d2b7280faa8aec9196a423095f6cbbaa781ef4c9ef7d7cf8c845f2bb4c45b7f12759c0215a1a86702a2500237030a7e03d85fe9d051c66296b7e3a93b6477a3049d2c7dd3c3702c25deaed9a5c26aa3cace293c144ba9fedccd9d695fb5c6fd1a7e99fbd4f431e180a0d561519c950249514312d1a144922021cadfdcc7771435c685de832aee99ad4ad16e045196e91c27e77c6562d73408655f1ae8dcea0608c4aa0a17623fe4335ee49bc2bf96977f9aa13ff9704a3b619880177765bde6289c84dc117c8e14414cd7755a9d79743cc41808276b14dee965bf166f0bd82235267a1432074b6ae08d4daaf3299ddc5a0f8254fc14bb86e7e37316178f8cb71b1ea5c62617d5104d5e592462c48e0f0b69a83a3aef603f40a3b6e4ae14d4630b981816a940df8ab3aeb045431c8e77922a3de0a2667242b4f5b4649926663108778f2f4bfc62db9739a4bdd5aff1ee913927e51313f78b76c04e60a62cfea5390c1e3b11c180dd00aa36dfc93ff970c62b664ff9d598b3877f8f82c71510b91739019f465d9f9e2d416fef8cae327a9f4dc43f3d2e8312a1079a77fe8f506100000000000000c800000000000000210000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020b0ab6e706afe61983c5bf1d6e3d09621da7d9cd32bdd7e2130b81dcc46ef5802000000000000000100000000000000010000000000000020d087600766bd1df7913f14ae88a2e9b5b651504535f46ee5da14954af94de668000000000000000100000000000000010000000000000020cd2cd9ad2c779aa3995be1014c80f94a5247dc5109218180e006fbbe588ce2d800000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000210000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002086cb5263dbaf418e96721addfd841cb67f9896781c9e8093170a2bebd35c8a0d00000000000000010000000000000001000000000000002005e8acde41240846b1b148e6f1731d982d9499b315b49571f3c4e12d88da5822000000000000000100000000000000010000000000000020dfd7eac1317ff666e7a446a260d70430c9aa0f0bfccfe2edf4ae24a5d163595d000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000210000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d7e7c468e06a8e592edbe1f9eff3164f0499e8ad0072da91fd4fa087ea820a1000000000000000010000000000000001000000000000002064922111b65302bddd53948632f9de2e4135390b8620b248b8a335776dedfd030000000000000001000000000000000100000000000000205dea807bd3761c569e5d91569ff1a4d18ca2750ddf526909660f91b2f84080cf000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002100000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000206394d562d30d4d72e250c260ecbf498fb3d176889437362e030db290cfd3b22b000000000000000100000000000000010000000000000020aa69a887755987122b41014784240cfa2ea17a4e9b3aeba12dc7762da7582ecc000000000000000100000000000000010000000000000020c802860c649238e4c1cbd0ff648821a708a95501e146298b5b303abf07320669000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000210000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020af5fad30063ecb19951eac8cf60da4f79cdbb44b8297f1e89b410ad48971a7a700000000000000010000000000000001000000000000002001ae3a0c28f45072672fa1d9d722f50b96f496c2095844698ce94190b48086ca000000000000000100000000000000010000000000000020378b42427141ebdcf4a6aaa2ee39a4e2bd01cb4125d3f5ce563ae81c900aa929000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000210000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020b0ab6e706afe61983c5bf1d6e3d09621da7d9cd32bdd7e2130b81dcc46ef5802000000000000000100000000000000010000000000000020d087600766bd1df7913f14ae88a2e9b5b651504535f46ee5da14954af94de668000000000000000100000000000000010000000000000020cd2cd9ad2c779aa3995be1014c80f94a5247dc5109218180e006fbbe588ce2d800000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000210000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002086cb5263dbaf418e96721addfd841cb67f9896781c9e8093170a2bebd35c8a0d00000000000000010000000000000001000000000000002005e8acde41240846b1b148e6f1731d982d9499b315b49571f3c4e12d88da5822000000000000000100000000000000010000000000000020dfd7eac1317ff666e7a446a260d70430c9aa0f0bfccfe2edf4ae24a5d163595d000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000210000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d7e7c468e06a8e592edbe1f9eff3164f0499e8ad0072da91fd4fa087ea820a1000000000000000010000000000000001000000000000002064922111b65302bddd53948632f9de2e4135390b8620b248b8a335776dedfd030000000000000001000000000000000100000000000000205dea807bd3761c569e5d91569ff1a4d18ca2750ddf526909660f91b2f84080cf000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002100000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000206394d562d30d4d72e250c260ecbf498fb3d176889437362e030db290cfd3b22b000000000000000100000000000000010000000000000020aa69a887755987122b41014784240cfa2ea17a4e9b3aeba12dc7762da7582ecc000000000000000100000000000000010000000000000020c802860c649238e4c1cbd0ff648821a708a95501e146298b5b303abf07320669000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000210000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020af5fad30063ecb19951eac8cf60da4f79cdbb44b8297f1e89b410ad48971a7a700000000000000010000000000000001000000000000002001ae3a0c28f45072672fa1d9d722f50b96f496c2095844698ce94190b48086ca000000000000000100000000000000010000000000000020378b42427141ebdcf4a6aaa2ee39a4e2bd01cb4125d3f5ce563ae81c900aa929000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000360000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020c3a4db706c3c3b07e0984d10824acb5797a59a8b4d40d709cfa0452e6ee0f23400000000000000010000000000000000000000000000002015ad821dcbca21c0f24f28f58131f9ab7767c0d6fbf621d34a2c84ab7b24c75e000000000000000100000000000000000000000000000020f4d1e64380a2c05ab0dc64ea31b5e288a4325921fa907811ded50419cc51d1ad00000000000000010000000000000001000000000000002046b3efbf9fe849057eed4011be8c3b38efe26eb8878cde78eb8294097925f1bb000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000360000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020cb1624e04edb0a38a5aa48ab98ce3b4498ce06e3501400449d8c60820ae716c30000000000000001000000000000000000000000000000207abb1eeebe74b58b73790fca56a415654e76bfd897d0c45e5884d0e78242d270000000000000000100000000000000000000000000000020ecf960f1bd96e938be9efe0e8178c6faac8e4dade22047baafaa2cc5b776587a00000000000000010000000000000001000000000000002025513b7f08a347e3b4653b6a5b7b4504d17f3335eb68b911a07580668480ea5f000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000360000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000100000000000000204e3e5050a68c19a9070116bf52c252ea80b09fe3aeba37912ec913755fd6f20f000000000000000100000000000000000000000000000020741327993888baf18dec79d5c37eb2b44abfbb9eccb3d86290a10c24f9dfac2600000000000000010000000000000000000000000000002057231a860f30ab1475bd8cdc0a3b4a8273fc215ab0540eb9f5f6b4129d47a3f6000000000000000100000000000000010000000000000020a61e4bd78e6377780bb7580457ace8abedf45db5c6b1905e0fc76ee6b540ec6f000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003600000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000100000000000000204f2c258eed013e0c55e57bb7b25f90a885545ce90dc6ab98cbcab8b42618b739000000000000000100000000000000000000000000000020f44b12df590997e771be2d8ca025bc1169a99fd2640c935a548d3f72f53e1905000000000000000100000000000000000000000000000020e07633752c9a7d0ab4d4825434743a1a21102cdb34ac00f9cb0067d34ffca5d90000000000000001000000000000000100000000000000201273eb79132092546fe9e443e04ce70d652607cb46845d8269cc51b07a5e2636000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000360000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000200dab1cfdca431b0959f28b363ee2140ddc896a2331b81f80be5d7d672807597900000000000000010000000000000000000000000000002052ba876dcdee686e84a449cad07b633edb67153d5f14f385fb256af53ea89d65000000000000000100000000000000000000000000000020f53683e29b7f89c0854446521e9f08cece64960ee2669247016ed70294c71940000000000000000100000000000000010000000000000020ca0bbcf3ba7d635c190762d1905f0cdb8d6b2af98d668d282ab970819d0796e0000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000080000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020657f400c23f985ef1ba27d0e61eec710dc328bb9ca9d9fcbbed56910fe31e4490000000000000001000000000000000100000000000000204e8bc169e0bffb7af86e442b025c73a9c0e2c8fcbfdcbdbfd7d568446045f1ae000000000000000100000000000000010000000000000020f7575ab7c2207c8a39c727bb104d9b7c0105c5ae631fc01ee25378fbc615b0d20000000000000001000000000000000000000000000000201fd5498b5606acaaede0db59eb7b7e660b4fbc8eb9fa1d0c6c2adb48d75d615300000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000080000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020325051efdb8424e62d624b11d6b7eeb927253341aa3927034fbb0c8bf76c12ff000000000000000100000000000000010000000000000020785181f64823ec7b563f1cdf18df75b075d0a5963a0db15b3a9e3b0b42f36f1b0000000000000001000000000000000100000000000000205dc15f79b1aa0ed50e58e550fd41c07ace7cdd1101aa37ef4273ae5e9038146f000000000000000100000000000000000000000000000020d1816e01b598e08ee1c459e3283ac87d454a19f2e41f3f85158e9f10b9faef71000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000080000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000100000000000000202eeead91b20ab57873ca7c783915a4212ed0dc2f7961aab41598ea0bc8a47329000000000000000100000000000000010000000000000020a6ac2199362ac987e04ad05199fe7f8be4b60786974730c5353094867d88f34f000000000000000100000000000000010000000000000020abf88fdff603d4d880f1564dd8b5a9e24fd51a61c22d45624f73911e449bcf94000000000000000100000000000000000000000000000020dede73056e97d895ee544cd1f515e7f872b01d10ad51bde6457326fcf11c7b20000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000800000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020920e2801b283c6626363cc9ab21f52393946e3a96b1195de32cbde245b3fa8d8000000000000000100000000000000010000000000000020cf8a0f1ddefe7b4046369acf63949764e63161ba93c9f157762361c30aae1fc100000000000000010000000000000001000000000000002009f1dd01603cfe8cb20303e6d66fb1ad83bdc7093f7a52699cb4afa68588b483000000000000000100000000000000000000000000000020d4666304bf2809e0fe3311603148aa6aef2cc88395ddc38a022a9c742dada87d0000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000080000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000207835bfb9721cf146284a361fac9b687f1d55206c50ec6b050d1a1c0f1283c2f50000000000000001000000000000000100000000000000207a3fa367a923e5d12e87ccdb6cd209b3bc3cc0afde4ed5f86101656aafd030520000000000000001000000000000000100000000000000203c7ec701f5e4b6f4992798f93bc359521c17689c879f0a4d5728d25a602fe261000000000000000100000000000000000000000000000020c1a70db1dbbbf1d266cc63410c3e1f798fbc2f00cc35d561bc0706474f565a7d000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000090000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7000000000000000600000000000000010000000000000000000000000000002066ef082a7312ec8003c37280968e36b4beb91918666462610d2e0f921d66262e0000000000000001000000000000000100000000000000204e8bc169e0bffb7af86e442b025c73a9c0e2c8fcbfdcbdbfd7d568446045f1ae000000000000000100000000000000010000000000000020f7575ab7c2207c8a39c727bb104d9b7c0105c5ae631fc01ee25378fbc615b0d20000000000000001000000000000000000000000000000201fd5498b5606acaaede0db59eb7b7e660b4fbc8eb9fa1d0c6c2adb48d75d615300000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000090000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000000000000000000020cd5f59c76bc5632df1e3b8c11713a7a553a405f716f3f73d6b2ab918bf5d2833000000000000000100000000000000010000000000000020785181f64823ec7b563f1cdf18df75b075d0a5963a0db15b3a9e3b0b42f36f1b0000000000000001000000000000000100000000000000205dc15f79b1aa0ed50e58e550fd41c07ace7cdd1101aa37ef4273ae5e9038146f000000000000000100000000000000000000000000000020d1816e01b598e08ee1c459e3283ac87d454a19f2e41f3f85158e9f10b9faef71000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000090000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020255d2bd3266375246a076280b11aeceeeb5621a497d1636ce377cd490e6bd1f9000000000000000100000000000000010000000000000020a6ac2199362ac987e04ad05199fe7f8be4b60786974730c5353094867d88f34f000000000000000100000000000000010000000000000020abf88fdff603d4d880f1564dd8b5a9e24fd51a61c22d45624f73911e449bcf94000000000000000100000000000000000000000000000020dede73056e97d895ee544cd1f515e7f872b01d10ad51bde6457326fcf11c7b20000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000900000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020a0d79cccb761943b5256e1394b1226a2e684690943fb852321ae8d060722506b000000000000000100000000000000010000000000000020cf8a0f1ddefe7b4046369acf63949764e63161ba93c9f157762361c30aae1fc100000000000000010000000000000001000000000000002009f1dd01603cfe8cb20303e6d66fb1ad83bdc7093f7a52699cb4afa68588b483000000000000000100000000000000000000000000000020d4666304bf2809e0fe3311603148aa6aef2cc88395ddc38a022a9c742dada87d0000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000090000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000000000000000000200952292f8d6e229e47b3e346ef0d04cbe603ce81219126946b961ca91912577d0000000000000001000000000000000100000000000000207a3fa367a923e5d12e87ccdb6cd209b3bc3cc0afde4ed5f86101656aafd030520000000000000001000000000000000100000000000000203c7ec701f5e4b6f4992798f93bc359521c17689c879f0a4d5728d25a602fe261000000000000000100000000000000000000000000000020c1a70db1dbbbf1d266cc63410c3e1f798fbc2f00cc35d561bc0706474f565a7d000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000240000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020362ac7a88313f3547caa33e18f1bf2d22be8defe6282b59d479c56f15d583bca00000000000000010000000000000001000000000000002089d1f5e7ddab385cee9ef3c6e039bf9dba4cd0c7bf5968af1e87a54f1c8b98f4000000000000000100000000000000000000000000000020254ad08d8f651887ccdedd4264cbe8ac8a820f273e7e6a6eec9571b2bee83fed00000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000240000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020d748a576eca49ddf992cba75efec0f1d12f629d58fcde8a33bb703dab645e37f00000000000000010000000000000001000000000000002048d27b60aa9bff8a3ad72fa50e506b89b2c70434429163e60518d3b54dd8d4f40000000000000001000000000000000000000000000000201e4829424cc3731a985d6b9986b78d322139a6d6965ff67e79bdb4abe7107c85000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000240000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000001000000000000002028cb827a61cf5bd7ce600cd7f3eab1c60ed4942811ac1915593695bb3dd953d80000000000000001000000000000000100000000000000207295a2c10b1acf16129d092a7b9af37c389c4566a2bf22d8c69e0cf9f8719868000000000000000100000000000000000000000000000020504c7cfdf9b9d8a744d6d07015dc694b3c1e96fa04d9711bca9e89e47aea70bd000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002400000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020e1479132f529d1d3199b01f807de0d91cf20dcad1e7b80585f280b09fbf3754b000000000000000100000000000000010000000000000020d8587c740444d396342bde08fcc2aa14d09b3841a86867a8968a39985c1aae5f0000000000000001000000000000000000000000000000201b51cd96b5e7d3c5907dc40ebc575470d0b53cb58c9a11acee482a80587db2ca000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000240000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000209c5dc119f411a0ef5642262c45fc391cfca0ded082e37ef7d49b5a2ed9518bfb000000000000000100000000000000010000000000000020dbb5f88bfd82f174b6b75b33b6e1b57f9e8c171e2884327da5b36cbefd7067110000000000000001000000000000000000000000000000202f7c3c123b082e8ba8e01175c4f6ae18dec43d9efebf55f2769ff4eef4d2582b000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000390000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020c5bfbba30acd27adf9049b86e741c9aed9f0aa634f4c011c25fe4d6bc0e6e2ec00000000000000010000000000000001000000000000002092254bddc93af51db85c84258645a7368b11c67713d9b7edb7798f818a67b7d100000000000000010000000000000001000000000000002013cba62cb82888bb083b50937d466b49f9391c00299bd77abb46de4352465093000000000000000100000000000000000000000000000020a3c68cdf76781d19db7aa603f4cd91ea38edfc0b5126585e0c4cc27eb1121e50000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000390000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002057eeed9c417c56a554abbabe201f1b8f7419e6c4f9c588b7cd73e53049aec360000000000000000100000000000000010000000000000020659bdac5e12fafcfbfba4939413f2dbcb8f4622495fa9d7b4be9541e24bf3f5f000000000000000100000000000000010000000000000020d1b5b1709939c022502c02de40058bf39c150bc062b6e13ba9efa821c1b2284200000000000000010000000000000000000000000000002081d62fb6f8e3c63bb07414f173e2f1761186f3a609b96be8e54bf144e18bd1e9000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000390000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000000000000000000204ae66da4ec6e996543c99f2e603b4283208ae6528b924ce9946629501ef0edd600000000000000010000000000000001000000000000002042ccda5e4f3610e7833759239b87dcb5feb5654641bd57359476edc936a15e8e000000000000000100000000000000010000000000000020de3c1116c517fc559702c15da18fca7713ea045f49bee0d28a5b11b093f744f5000000000000000100000000000000000000000000000020c8c39661891e6889268d1a75425c16fa10b5ce02a5817678bfb61fd4d7ba745b000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003900000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a4000000000000000600000000000000010000000000000000000000000000002028fa0341159216430f3cec85a0e258c1c6780b325aa638c561f0c89609574b68000000000000000100000000000000010000000000000020fdf80980218da61f93fdbe491188fb7f3191a3b3bb5166ce6014e8f20d70673d00000000000000010000000000000001000000000000002096a037551b0b573c983aaa7a75192a672a3c09151e279ffd3c1e0e670d35fd370000000000000001000000000000000000000000000000208ef32cdd20ab9840d12ae9a0d741f7d3f389289d74ea182f48337a1058f3b15d000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000390000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000000000000000000209c451188f9bea2f2b6d07b3db3ceaaa498f80506d191610f9d61974099dbe5e80000000000000001000000000000000100000000000000209e11faaa3c075b6834d4668a36d21b8294c07a039a232c100665d90b3d03bf4500000000000000010000000000000001000000000000002080cf796e32484601f36528ae033f1d268f38cb3aa9d351ba1b0fcd4e2043d757000000000000000100000000000000000000000000000020a79432284160ffbe7605792344dd2c3b75b783de349a59eac5f705dbb10d4fec000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000150000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000209a7f6ee04285cc053d122b4d2dc01674868c1c4198d702144ec6673d4f1735470000000000000001000000000000000100000000000000209b10e94ccc495ed067a2c6b3180fdcfddf4c8bc779cdf7fc14dde8feb399309d000000000000000100000000000000000000000000000020080b28b1dece6dde43a662bb2943cbbcfb4977254ddfb567d20ec3694d07decc000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000150000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000203ac1614b3ebad34b37931ec463de127c8bb45876ebd8f753c177b3b708f2eccb000000000000000100000000000000010000000000000020576d77dac3a70e1802ac9cbaf6777f6090720d9e7fccb6078e57d4811b497ee2000000000000000100000000000000000000000000000020ace429d6a2e0ab83426a9b9ba04ca6bb90f71e7ceee02c278a82a7859d4bc1820000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000150000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020b315c72fa41b10fad5bfe97985d9d38cdfb966274cd890d82281a154ddf380870000000000000001000000000000000100000000000000209c160349b93bdba6b3a6c3afcd2503bc1a79db30aeb896003c136aefc2ff9b3a00000000000000010000000000000000000000000000002005c7231b545188d801508269d5e616db314e98d0d1d96b4d859cba418919dce7000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001500000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020dee119a0ca0d75cbae521579b9854eb21e572f571eb2bc9024914fdc09b7d6760000000000000001000000000000000100000000000000204d597031c84975b5e61070724ab3d606668a57320d7d99c5a77ab1a1d5221bb4000000000000000100000000000000000000000000000020792b54430c2c7a5202334fa577281d00396a0c9d5a6149e8832c12c7a186e7b6000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000150000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020fb6f21306c23be5f073086377b0217641f535be016cabf1ed1dc1319d6107c3000000000000000010000000000000001000000000000002064127693e8da9c8e8a48196327c3c787b11da3246b2e852de189d6ccb7f2da7a0000000000000001000000000000000000000000000000208eb0d4e58e0649d2818142c4c7cefb08dd13094d3a575e5054570ef7155a1a53000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000150000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000209a7f6ee04285cc053d122b4d2dc01674868c1c4198d702144ec6673d4f1735470000000000000001000000000000000100000000000000209b10e94ccc495ed067a2c6b3180fdcfddf4c8bc779cdf7fc14dde8feb399309d000000000000000100000000000000000000000000000020080b28b1dece6dde43a662bb2943cbbcfb4977254ddfb567d20ec3694d07decc000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000150000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000203ac1614b3ebad34b37931ec463de127c8bb45876ebd8f753c177b3b708f2eccb000000000000000100000000000000010000000000000020576d77dac3a70e1802ac9cbaf6777f6090720d9e7fccb6078e57d4811b497ee2000000000000000100000000000000000000000000000020ace429d6a2e0ab83426a9b9ba04ca6bb90f71e7ceee02c278a82a7859d4bc1820000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000150000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020b315c72fa41b10fad5bfe97985d9d38cdfb966274cd890d82281a154ddf380870000000000000001000000000000000100000000000000209c160349b93bdba6b3a6c3afcd2503bc1a79db30aeb896003c136aefc2ff9b3a00000000000000010000000000000000000000000000002005c7231b545188d801508269d5e616db314e98d0d1d96b4d859cba418919dce7000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001500000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020dee119a0ca0d75cbae521579b9854eb21e572f571eb2bc9024914fdc09b7d6760000000000000001000000000000000100000000000000204d597031c84975b5e61070724ab3d606668a57320d7d99c5a77ab1a1d5221bb4000000000000000100000000000000000000000000000020792b54430c2c7a5202334fa577281d00396a0c9d5a6149e8832c12c7a186e7b6000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000150000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020fb6f21306c23be5f073086377b0217641f535be016cabf1ed1dc1319d6107c3000000000000000010000000000000001000000000000002064127693e8da9c8e8a48196327c3c787b11da3246b2e852de189d6ccb7f2da7a0000000000000001000000000000000000000000000000208eb0d4e58e0649d2818142c4c7cefb08dd13094d3a575e5054570ef7155a1a53000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000200000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020209825fa6d197927a0715d3fab3f49b0ae6f3efd3002918c17dc046ee978861c000000000000000100000000000000010000000000000020d087600766bd1df7913f14ae88a2e9b5b651504535f46ee5da14954af94de668000000000000000100000000000000010000000000000020cd2cd9ad2c779aa3995be1014c80f94a5247dc5109218180e006fbbe588ce2d800000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000200000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000100000000000000209aaa5cb490c71c98b9c07167071ae295f65b0a068c84a1f8eb2bda1e9dc68c8200000000000000010000000000000001000000000000002005e8acde41240846b1b148e6f1731d982d9499b315b49571f3c4e12d88da5822000000000000000100000000000000010000000000000020dfd7eac1317ff666e7a446a260d70430c9aa0f0bfccfe2edf4ae24a5d163595d000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000200000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000100000000000000209f162f0f2e1022c5e53050c46473ed871f621c6d953e6b6adda61d3b41ae303600000000000000010000000000000001000000000000002064922111b65302bddd53948632f9de2e4135390b8620b248b8a335776dedfd030000000000000001000000000000000100000000000000205dea807bd3761c569e5d91569ff1a4d18ca2750ddf526909660f91b2f84080cf000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002000000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020a6ef89ab9286315344599180c41362feb0e0dfafcedeb8970cb5549a047ce2a2000000000000000100000000000000010000000000000020aa69a887755987122b41014784240cfa2ea17a4e9b3aeba12dc7762da7582ecc000000000000000100000000000000010000000000000020c802860c649238e4c1cbd0ff648821a708a95501e146298b5b303abf07320669000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000200000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000010000000000000020ed9a22f6279d115c66072ff65bbcf9f22659696c2f828e556ae86d9a52d8431800000000000000010000000000000001000000000000002001ae3a0c28f45072672fa1d9d722f50b96f496c2095844698ce94190b48086ca000000000000000100000000000000010000000000000020378b42427141ebdcf4a6aaa2ee39a4e2bd01cb4125d3f5ce563ae81c900aa929000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000160000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7000000000000000600000000000000010000000000000001000000000000002042cb2165201ab8ea41affe9fbc23ef70f009dba666b45581fe56a336d6b425f7000000000000000100000000000000000000000000000020864e47462260929d60876a0babd915b08229a85eed60fe22ac85ec61ee1e866e000000000000000100000000000000000000000000000020080b28b1dece6dde43a662bb2943cbbcfb4977254ddfb567d20ec3694d07decc000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000160000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000001000000000000002063b397895a79ef39803fdb53e29d3e65bbfcff9fe06ef6fe7f9f0037e1e039660000000000000001000000000000000000000000000000206fd3b782e68eb5fac7cc20822b3858250b376d7e56a4db91bf0cb95ec3c4170b000000000000000100000000000000000000000000000020ace429d6a2e0ab83426a9b9ba04ca6bb90f71e7ceee02c278a82a7859d4bc1820000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000160000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000100000000000000205ecaaefbe239613fa89a9f1621b62fb6559f9289d5ec382aa2a032bb7a47a5700000000000000001000000000000000000000000000000202141d6e5fd028bcf7861ef8a16b249210fe3d52dc20d20c123863cd1b492a65f00000000000000010000000000000000000000000000002005c7231b545188d801508269d5e616db314e98d0d1d96b4d859cba418919dce7000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001600000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020dad428dcf0f2d1a3daeae2b619eccf0d064f6e5614b842c1b9daee22a6900e24000000000000000100000000000000000000000000000020688ce44aebd966aaa0c0b45729d96bcbe7ef069f1dbd95b956527d6cbc0a81cf000000000000000100000000000000000000000000000020792b54430c2c7a5202334fa577281d00396a0c9d5a6149e8832c12c7a186e7b6000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000160000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec000000000000000600000000000000010000000000000001000000000000002005d3170f1b1685aeb531ffa7cef87ca50cb7887f2e0d9c871c7a07db84ea38bb000000000000000100000000000000000000000000000020484b1a9029b822ebc27ac439a0f45a04f55b9d4dedb7bacbc5e2a7b131bac56f0000000000000001000000000000000000000000000000208eb0d4e58e0649d2818142c4c7cefb08dd13094d3a575e5054570ef7155a1a53000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000330000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020729f9a4842e47471ec9eb0fc15695f30feec4440cdeba085eca4d8ffa6fca96500000000000000010000000000000000000000000000002020357880fc8e6dd74df46742da252f118fdb87961923030914ba2e8adf16cb52000000000000000100000000000000010000000000000020d668a432d047c9e275f7c7d20e0a761a44ce7e63d76a8974123279ebd303ad5300000000000000010000000000000001000000000000002046b3efbf9fe849057eed4011be8c3b38efe26eb8878cde78eb8294097925f1bb000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000330000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000205e2f9379af38ba02e299363f94ff2613db345709ae3930ec78e9d34cb8dc5808000000000000000100000000000000000000000000000020b36150103dfa24ee16b032ef9999b88d058ffbfb179c3608748ca0b3b79700ce000000000000000100000000000000010000000000000020a7afa996971e49948edcc6953b8e85b3a85abca1a8ca02bb441959ca7fbddc1e00000000000000010000000000000001000000000000002025513b7f08a347e3b4653b6a5b7b4504d17f3335eb68b911a07580668480ea5f000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000330000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d74139170c3e989869dece6d59cd5c6a0d47fc349b6efd8fb24bf4f29e61dd410000000000000001000000000000000000000000000000209f5a2e0d1d216a03f22617946d77aff086f5e10c79f90d4eafcbe495bb54cb7e000000000000000100000000000000010000000000000020f956d888804e64a270d247562d2e4df7cb3baaff4b906f94b4e64fcb67d3fb92000000000000000100000000000000010000000000000020a61e4bd78e6377780bb7580457ace8abedf45db5c6b1905e0fc76ee6b540ec6f000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003300000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020d767ea564249bee1f3ae16b3f3dcecec061c22846a13b0e468a24bd36a75064900000000000000010000000000000000000000000000002069b52e0358d48b02c58f9efb5a46719a68c0846a23a5cd0907fb795dbe8a38da000000000000000100000000000000010000000000000020695844727e2fac06bb31a161155a39527775fb0591002573a9e4d4aee1e794880000000000000001000000000000000100000000000000201273eb79132092546fe9e443e04ce70d652607cb46845d8269cc51b07a5e2636000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000330000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec000000000000000600000000000000010000000000000000000000000000002013db7d66d0dcb7034e195d6ffe9b124b9be9f43675296335fa70a1629fc586c50000000000000001000000000000000000000000000000201c91dcf009aaa43325becc5afa841bc4e23160c3c4cb657fac24880e6a26d3d5000000000000000100000000000000010000000000000020b4683887999b2d9372eba712b4bcbe56fe7c3bbf097eb71436f394f19c5e540e000000000000000100000000000000010000000000000020ca0bbcf3ba7d635c190762d1905f0cdb8d6b2af98d668d282ab970819d0796e0000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a6000000000000001a0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020867f4e7838d3464819f68d32891adc5d0d944835deee9dfab0413a6187f910fc0000000000000001000000000000000000000000000000208cdaf05b84ace4e1b630d731222e016e66fbb851f5088ed3b8479b35f2e863df000000000000000100000000000000010000000000000020087a599f409cb7bacc0662f1cbc4762c6f1a1276b1ec901eff46c07ae65a8c6900000000000000010000000000000000000000000000002069689184b6eb1ae40e108c1a961e1f8973f9d7b7c50392b41d11c8cbe2dc0314000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000001a0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020d2b499fcc9331b1e24804113044924d390b6850d5bc89e618066edca59d1ed13000000000000000100000000000000000000000000000020d9a7882e1b23bd0c798af89adfff13ddc6504fb40d7de05d8d9b5e18a0c070a3000000000000000100000000000000010000000000000020c6bf6988a3e7187fae893c7eac58fd5d4e190f4f27238b2c7529d1f3965c96c30000000000000001000000000000000000000000000000201d592eaf7b775ac80f80f65ac71600e7b42e34c2b41369815d26559f705c392800000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000001a0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000010000000000000020a79ae30a48c139549d208cf89a135461b28439fd8919e5c233ca5b3e33aeceea00000000000000010000000000000000000000000000002098e0c7b3feeb36a5a88273df56a05597fc09a092f707963f75f04f69677c717e0000000000000001000000000000000100000000000000203ef5c9702626ef1d8658d6fd366e6eccf85b6bc4df13c0bb45cf2cd03ed14cdb00000000000000010000000000000000000000000000002008ef744cc4c71b3dc0ad6709747a269607614084afb6b3ce67e9224db4721b010000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001a00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a4000000000000000600000000000000010000000000000001000000000000002006cd2449db56d43a2c3e2dded95bfa66bd4cf5400f78048722d40908fa75fedb0000000000000001000000000000000000000000000000207ec39b6a5dc9b329823099187a25fa0797a534ea7de2324e8a8ac23d9de81f570000000000000001000000000000000100000000000000203e2095fe80077dc9629cd9c8a40245961543a9420478c0c9442afc86a4142c350000000000000001000000000000000000000000000000204a15bacd4d08e8dc5188fa2617ce3f2048ab093a457dbb1568a132452c1264e70000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000001a0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000206f2b697aeae6d5a5e69fdfc864eb42fb46914825f75d057503ccc7c0278fbb8c000000000000000100000000000000000000000000000020a60503c7177b62afb9c55a941b3a16a6533e3e51d6b343ef1576611e39f1ea93000000000000000100000000000000010000000000000020375d4ed2adacd2b33684527fb299ea4f3b26ea60a3e425eec8be3753fb113dad000000000000000100000000000000000000000000000020b705227efab8bbcce7e6efa6e6c2c8c24b0165a04b60ba4382b0c252dfa09b540000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000100000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020111b56eef069a81117bb82e07a549448811f7b498d0b8cbeaf3c460faf2448d100000000000000010000000000000001000000000000002025fba5ee32d0d9d008535ac6a7988f247a404065ee59ff9a7ab673fd8e76748e000000000000000100000000000000010000000000000020931fc0f60710e5550ab975b9da43260c532daa1aa0981b844a267625739ffb1b000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000100000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020bac9d793deaf5ca2cb626ce251dbd5baa016d0ecff6b13d4ef9cd35e7e50fc5e000000000000000100000000000000010000000000000020533af2ef25021e15fe55aca5e4979523d6e65ecbcdb590a881474ec1388d0773000000000000000100000000000000010000000000000020db75f2f16c24e1f86b75a7358eb0bff98736d767e792ba6500dc20c7a0f5b35f0000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000100000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000010000000000000020e6015a26b94bcdb79e6f934cfa346d3ee0e8daf62553fa64f1fd936655d5bd66000000000000000100000000000000010000000000000020b8afb98b9198daa87dda8a04edc3349eaed9056af0fcedb7edebe0393976711f0000000000000001000000000000000100000000000000208eca8e88d782a2c50068f91856cdb198e83fe75b53d95126db0ce5ba952fe000000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001000000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020855fd74a9c7da68d5343c0434ff683c9e73dc407ec49776b81e6584876f458cc00000000000000010000000000000001000000000000002052d82acada3026c4c21ecc2d34974875b8167e5120f6dc4a3d2696a6c0e4f004000000000000000100000000000000010000000000000020ef20ce255fff4244508dc0bf36aba9eeda1f94ba8303d6b23520cd52b598e748000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000100000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec000000000000000600000000000000010000000000000001000000000000002038d9cc8443d7d65106239e86f0a2aa9c84d77501c33085e73594b698d102e803000000000000000100000000000000010000000000000020407f2fe6361457a84abe1bfbda60edd29b3305f1a37e916f7f923783f031398b00000000000000010000000000000001000000000000002003de737e05bbc77f493cd34846521552aa2f36e8056c458268b5b2cb15e5e244000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f000000000000001f0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000204887d5e2c6d2717d60c83accb5514a0f47e17910c8fc71f978c1948c709def1c000000000000000100000000000000000000000000000020a2502a6ae92a724a6e2a3a94ad93bd71bd29b046475706a32afa43f571c551f200000000000000010000000000000000000000000000002070f93532da12d95bd9b02b2acb02b74a3a532fbd8d1ec178ca7acf3e54865fb800000000000000010000000000000000000000000000002069689184b6eb1ae40e108c1a961e1f8973f9d7b7c50392b41d11c8cbe2dc0314000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000001f0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000000000000000000020ebe4d8dc5157df91db0d0995b681cbbf37fbeb89712b703226fea4166f4a1be40000000000000001000000000000000000000000000000209556d77d8faa0780c175114ccc703ccef5e23f99123014f3cb64b72a60e79680000000000000000100000000000000000000000000000020635115868949cf601b309c4df546e182524084c9811bb9ee1fb0b250cc7303b00000000000000001000000000000000000000000000000201d592eaf7b775ac80f80f65ac71600e7b42e34c2b41369815d26559f705c392800000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000001f0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020413728e8c4f675e5ae69c204d5baf909547eab0d0db9a21f9e0c83a4af26c7a8000000000000000100000000000000000000000000000020b1f59360b8604b8aeb5462a45975637ec382c2d69e9898248c3ff0b5c0f84a490000000000000001000000000000000000000000000000201ee947871b7c23ff35900da33157b598a2a0de9b805ba0c5a66fd0f7a777b96e00000000000000010000000000000000000000000000002008ef744cc4c71b3dc0ad6709747a269607614084afb6b3ce67e9224db4721b010000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001f00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000208e23a76fd590b1f4b1a8ff7c9d4908df56bc09305057dc0722abd364823feacb0000000000000001000000000000000000000000000000203ba2c97654de7bfcc8d53977aba10d361172900252c2564628c1c4d0269897da000000000000000100000000000000000000000000000020f5ce7f2db68efde598b83474b5a87a6b370a42d4f72227049cb83d4df11bb6a10000000000000001000000000000000000000000000000204a15bacd4d08e8dc5188fa2617ce3f2048ab093a457dbb1568a132452c1264e70000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000001f0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020f9051b50a21ced87b20c943f4e2c2f753afa0b310bce31df963b96a0c87a200a000000000000000100000000000000000000000000000020c594fd6aef9bf0a9ad32de1c2b21fef40fc7cf55d5778a950bfba5bcec02647a000000000000000100000000000000000000000000000020b4a1b1f3f1cb855740daf8c4833a49820c58975955c04f60f0e741d105e354a6000000000000000100000000000000000000000000000020b705227efab8bbcce7e6efa6e6c2c8c24b0165a04b60ba4382b0c252dfa09b540000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000140000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7000000000000000600000000000000010000000000000001000000000000002082733cd589abe0f03b4dffe58247afcd2988371e94575cc7b881fbe2971094360000000000000001000000000000000100000000000000209b10e94ccc495ed067a2c6b3180fdcfddf4c8bc779cdf7fc14dde8feb399309d000000000000000100000000000000000000000000000020080b28b1dece6dde43a662bb2943cbbcfb4977254ddfb567d20ec3694d07decc000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000140000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020ac03bba973f9db60405efd99de3388034a573b54a4261eb03c3e2c20b8bd8087000000000000000100000000000000010000000000000020576d77dac3a70e1802ac9cbaf6777f6090720d9e7fccb6078e57d4811b497ee2000000000000000100000000000000000000000000000020ace429d6a2e0ab83426a9b9ba04ca6bb90f71e7ceee02c278a82a7859d4bc1820000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000140000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000001000000000000002020c3867137bd66e5ae3cc59759dbb65bc16ccac01adc0650317f7aa6742d485a0000000000000001000000000000000100000000000000209c160349b93bdba6b3a6c3afcd2503bc1a79db30aeb896003c136aefc2ff9b3a00000000000000010000000000000000000000000000002005c7231b545188d801508269d5e616db314e98d0d1d96b4d859cba418919dce7000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001400000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a4000000000000000600000000000000010000000000000001000000000000002036af30d89ea435f7697c2571f0fd4b21940d3569d3b6aa5da5ab2a139ec941dc0000000000000001000000000000000100000000000000204d597031c84975b5e61070724ab3d606668a57320d7d99c5a77ab1a1d5221bb4000000000000000100000000000000000000000000000020792b54430c2c7a5202334fa577281d00396a0c9d5a6149e8832c12c7a186e7b6000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000140000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000010000000000000020e6129739f096f01e63ff5fd506580df7ed092542294fdec8b931b3ab9e3d289200000000000000010000000000000001000000000000002064127693e8da9c8e8a48196327c3c787b11da3246b2e852de189d6ccb7f2da7a0000000000000001000000000000000000000000000000208eb0d4e58e0649d2818142c4c7cefb08dd13094d3a575e5054570ef7155a1a53000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f000000000000002f0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000206762968d2a038b693f39a5fafabb81fab3aa9f357a0350c916992948fd26e55000000000000000010000000000000000000000000000002039207a50ee132e79b7d0ce2800c532ee3a79757e9182e86f047b4749e0a8f553000000000000000100000000000000000000000000000020a99ec68e5e702c95d72c271dfc6b7fba83a95d182bfe10c3b55beafee6b02033000000000000000100000000000000000000000000000020bc7cafa2d5bbcd43a2687bac1aaae39ea07c2b052355ee18f7bed28530381a1900000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba3610000000000000002f0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000206a66eb0dfb8905926c23fa9e6367d1d376993dc9d50000669fb74f7cdf2a1ceb00000000000000010000000000000000000000000000002046c654f85322efa17d6f767fbdb262d58f272795ab09da595b797b6dbc104b67000000000000000100000000000000000000000000000020eb65f60cc50d4a78bbd6805dbdb2bf94cc2376e36aa8b971a31f71d4de0675d8000000000000000100000000000000000000000000000020f69c63796b0fc3bb3288db5fc6b6321528bbbae678a35651696d958320b7b7430000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb000000000000002f0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020ca065fdd78dac515b99610f258fe14968d10b9e20f8bb65813195429d99bdadf00000000000000010000000000000000000000000000002053f8d1326552cc01162d03184cb369965f4fe3b3f9288f37fb45fe4cb085e3d900000000000000010000000000000000000000000000002006426e33baa1776913fabf5a4a6b22a45faa4944ecb6ee3596d2a7f071dad382000000000000000100000000000000000000000000000020907caeb633215ff4129e7dab9f17c9025c93f92b16178fd8678a98fad237f0c60000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002f00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020873b792ec4e2410a853e85a77ade2297f0c5052debe2f4a72bc8be27e11aa763000000000000000100000000000000000000000000000020c2c3840e2225f4c86bdad2b4e2fdb543bbc7c0eff9166fd7bb13cfeeaac17bdb00000000000000010000000000000000000000000000002045de5171730c798b920963229c38e2585a2ba74ae374a05c055e8f9ca4de381a000000000000000100000000000000000000000000000020f873579facce3b51fb36341332ab2926a95297aa0acd0b4108cefea53d9e1c8a00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee2000000000000002f0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020363e68339dbddefd48c83175cca73c718742589e41321b9e3ba208909cfd915800000000000000010000000000000000000000000000002088652ad02d50d76bbfaa8b1856252bba2bace61a0c45f2856992f5b6a2c97595000000000000000100000000000000000000000000000020fce731c6ff148191e5989829d154266d461abbe1b87f3bf49e080e482df6295c00000000000000010000000000000000000000000000002083502f4dae1d1e7cce3b35cd08cd8214523868a7bad81a68fd16bfd40a434166000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000230000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000201aeff246b42ff765abb4a54feaaa121e65140f197557feb8bf84c12e9f9cc26c000000000000000100000000000000000000000000000020c1d918bfc6a90fe225a1ed5b38fd5f39628d83f18dd4387d4b4ab6a9b10e1767000000000000000100000000000000010000000000000020cd2cd9ad2c779aa3995be1014c80f94a5247dc5109218180e006fbbe588ce2d800000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000230000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000204f31ffbfd0e93845466096a7290c6e796da7b8eef869fcf2e22c31915eeda6e10000000000000001000000000000000000000000000000203ed38b1bd3bc3ddd75d04c4629fd665a304c5dab0b4910b39bfffbe10171a7f6000000000000000100000000000000010000000000000020dfd7eac1317ff666e7a446a260d70430c9aa0f0bfccfe2edf4ae24a5d163595d000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000230000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000000000000000000200f140f9e31aac227063bc01121f02c025b3285deb2e8fc7ef121fedf9f1736e000000000000000010000000000000000000000000000002086e7040a0774570f9960fe464fb83c42abc7b879f0dfe879f0de85735aec02ad0000000000000001000000000000000100000000000000205dea807bd3761c569e5d91569ff1a4d18ca2750ddf526909660f91b2f84080cf000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002300000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000204754d4a00b78e831b7681bf22ec5a300527459ecea067b4ce92022571531057e000000000000000100000000000000000000000000000020efd9f706f3b59a5d1d59f20f48b351840e733afcd7bb618967149f2aa78ed243000000000000000100000000000000010000000000000020c802860c649238e4c1cbd0ff648821a708a95501e146298b5b303abf07320669000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000230000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020c154628481f4f2e5a3c3b45b667c4176aa437bf02ff4087354250339bb4fe09600000000000000010000000000000000000000000000002018bb48cc6fa644a9082407ccc46de0476228f9478d12605334faca8cc021fef9000000000000000100000000000000010000000000000020378b42427141ebdcf4a6aaa2ee39a4e2bd01cb4125d3f5ce563ae81c900aa929000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a6000000000000003b0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020c1934ee86183446a30ea734b2dfd4b55040db13048b55756e26319ef2bf41196000000000000000100000000000000000000000000000020d6ba9716b244280517fc338189ee3d18ef53ca399f72746f13fab57a2218a56500000000000000010000000000000001000000000000002013cba62cb82888bb083b50937d466b49f9391c00299bd77abb46de4352465093000000000000000100000000000000000000000000000020a3c68cdf76781d19db7aa603f4cd91ea38edfc0b5126585e0c4cc27eb1121e50000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba3610000000000000003b0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000203dbad06c47412cde657291699361e7df3f49410981533a5b98eb5a7b822b79e800000000000000010000000000000000000000000000002017de19751749ce0d54847a722097b43c34cac652dc95e009a1582a98f79e57e1000000000000000100000000000000010000000000000020d1b5b1709939c022502c02de40058bf39c150bc062b6e13ba9efa821c1b2284200000000000000010000000000000000000000000000002081d62fb6f8e3c63bb07414f173e2f1761186f3a609b96be8e54bf144e18bd1e9000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb000000000000003b0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020e8780357828dfcc1dea266c0702c4256387aad7a3ec5bead3d5db0c5c4a4ca7d0000000000000001000000000000000000000000000000209f234605cf01ef33d332204251222525c89be80ab747123af25517094cb7af9d000000000000000100000000000000010000000000000020de3c1116c517fc559702c15da18fca7713ea045f49bee0d28a5b11b093f744f5000000000000000100000000000000000000000000000020c8c39661891e6889268d1a75425c16fa10b5ce02a5817678bfb61fd4d7ba745b000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003b00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020cb90048f4882d47276cf3683ae16a70258671d78dd923e6201215df11e3778560000000000000001000000000000000000000000000000208d08c383a659604b451ffe2487072ec95148a1d9b296a7c3b24165cd2e9af15400000000000000010000000000000001000000000000002096a037551b0b573c983aaa7a75192a672a3c09151e279ffd3c1e0e670d35fd370000000000000001000000000000000000000000000000208ef32cdd20ab9840d12ae9a0d741f7d3f389289d74ea182f48337a1058f3b15d000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee2000000000000003b0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020eda4a40d9789e39711c1618a46fd381d5cdec0b84999d1d7954531cc90a2a7110000000000000001000000000000000000000000000000208481796e2bcdf1b590dbf05053d7cd86a4031b1a280958468d49c2edd113db8f00000000000000010000000000000001000000000000002080cf796e32484601f36528ae033f1d268f38cb3aa9d351ba1b0fcd4e2043d757000000000000000100000000000000000000000000000020a79432284160ffbe7605792344dd2c3b75b783de349a59eac5f705dbb10d4fec000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000310000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020e7cde93b02f69b3bdfec265c0a80e30146008063d4d41d7952e09fef525ba56900000000000000010000000000000001000000000000002088b9c36ce6c205415134c822e13277bf26dc808cf4164d31fb3feb408d5a5e06000000000000000100000000000000010000000000000020d668a432d047c9e275f7c7d20e0a761a44ce7e63d76a8974123279ebd303ad5300000000000000010000000000000001000000000000002046b3efbf9fe849057eed4011be8c3b38efe26eb8878cde78eb8294097925f1bb000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000310000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000209a08d4167dd497190fd45acf9002d380b4bccfa4516d724073519f6dcaa34ff3000000000000000100000000000000010000000000000020eee7a3b5bd32066ff6fae493f197ab42d452b72e6653f36c785e7ffcaaef4bdc000000000000000100000000000000010000000000000020a7afa996971e49948edcc6953b8e85b3a85abca1a8ca02bb441959ca7fbddc1e00000000000000010000000000000001000000000000002025513b7f08a347e3b4653b6a5b7b4504d17f3335eb68b911a07580668480ea5f000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000310000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000000000000000000002055ec1c4f82144f667ff57b0b35d09d06d151bcd64d77112ba763dbb421ec0f560000000000000001000000000000000100000000000000200478375712328a539e0af75efba3145a5b83977f65fd6f26f2bef0e92f4cf47c000000000000000100000000000000010000000000000020f956d888804e64a270d247562d2e4df7cb3baaff4b906f94b4e64fcb67d3fb92000000000000000100000000000000010000000000000020a61e4bd78e6377780bb7580457ace8abedf45db5c6b1905e0fc76ee6b540ec6f000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003100000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000200bc04b47f026e77bdba7fa5067531c8b573f79f8515535e0a7f6cc54758ce5f5000000000000000100000000000000010000000000000020e4d3556944aef39dc24c83873c204349c90de3d0febf5e94f5d30752aacf58d1000000000000000100000000000000010000000000000020695844727e2fac06bb31a161155a39527775fb0591002573a9e4d4aee1e794880000000000000001000000000000000100000000000000201273eb79132092546fe9e443e04ce70d652607cb46845d8269cc51b07a5e2636000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000310000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020907d7781ed9c8c3275965d95e3143f70ea11068a85f6abc38fa31a0fbdfe2c26000000000000000100000000000000010000000000000020a834b11452e58e60e9d991391a3e2e59588fa25493c192ba98d1d33f296b4e32000000000000000100000000000000010000000000000020b4683887999b2d9372eba712b4bcbe56fe7c3bbf097eb71436f394f19c5e540e000000000000000100000000000000010000000000000020ca0bbcf3ba7d635c190762d1905f0cdb8d6b2af98d668d282ab970819d0796e0000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000350000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020940f95c06a507e6f7d898e90b69cf59c322cbc1bf161c7e7708a20e2008daae000000000000000010000000000000001000000000000002019594bf3fa8c4ace4d35341a4d29a3224bf349b4111630660fbc89ec6aac104c000000000000000100000000000000000000000000000020f4d1e64380a2c05ab0dc64ea31b5e288a4325921fa907811ded50419cc51d1ad00000000000000010000000000000001000000000000002046b3efbf9fe849057eed4011be8c3b38efe26eb8878cde78eb8294097925f1bb000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000350000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002053e10520c89a9d1c8bdf0299253b3e1ca6f732d90152e564751bae242a1ea2bf000000000000000100000000000000010000000000000020758d3cb1dae81bd7b5510b225e37ec1c33d27e558dbe4753d95613ab2950d5bb000000000000000100000000000000000000000000000020ecf960f1bd96e938be9efe0e8178c6faac8e4dade22047baafaa2cc5b776587a00000000000000010000000000000001000000000000002025513b7f08a347e3b4653b6a5b7b4504d17f3335eb68b911a07580668480ea5f000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000350000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020eae24cc712d4f1a65e36209bf029b296466b50798ad83a68022cdfe9d0a71b53000000000000000100000000000000010000000000000020d93941bd50076e052ac499d54a60936db5cc808ce93db11f3b5f2dbb9e84fdc900000000000000010000000000000000000000000000002057231a860f30ab1475bd8cdc0a3b4a8273fc215ab0540eb9f5f6b4129d47a3f6000000000000000100000000000000010000000000000020a61e4bd78e6377780bb7580457ace8abedf45db5c6b1905e0fc76ee6b540ec6f000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003500000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020a1c9ebb7e9894aaf5a518e2e5add167f6b300838e38da25e7147996653a3358800000000000000010000000000000001000000000000002018f7652e6b6650db62a7971a3982b0cb933246f7ee71973244096397d4069a48000000000000000100000000000000000000000000000020e07633752c9a7d0ab4d4825434743a1a21102cdb34ac00f9cb0067d34ffca5d90000000000000001000000000000000100000000000000201273eb79132092546fe9e443e04ce70d652607cb46845d8269cc51b07a5e2636000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000350000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020c0aebb3503b26954be7c1775bef21ec8009433f43163b9a737d5f6404505ab33000000000000000100000000000000010000000000000020f1df539161429e1cffb6b4435a018168f9836656cd0fc0043c6de7fa4ee6ca11000000000000000100000000000000000000000000000020f53683e29b7f89c0854446521e9f08cece64960ee2669247016ed70294c71940000000000000000100000000000000010000000000000020ca0bbcf3ba7d635c190762d1905f0cdb8d6b2af98d668d282ab970819d0796e0000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000380000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020d5d9e84739c0813f71d0359e99b9765469d7a41ef279c691c2254c026b06582900000000000000010000000000000001000000000000002092254bddc93af51db85c84258645a7368b11c67713d9b7edb7798f818a67b7d100000000000000010000000000000001000000000000002013cba62cb82888bb083b50937d466b49f9391c00299bd77abb46de4352465093000000000000000100000000000000000000000000000020a3c68cdf76781d19db7aa603f4cd91ea38edfc0b5126585e0c4cc27eb1121e50000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000380000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000001000000000000002055d67c076c5d396d33996ca84ffc7f8d71fd9b1d73515cdaa4c72d0551f4e075000000000000000100000000000000010000000000000020659bdac5e12fafcfbfba4939413f2dbcb8f4622495fa9d7b4be9541e24bf3f5f000000000000000100000000000000010000000000000020d1b5b1709939c022502c02de40058bf39c150bc062b6e13ba9efa821c1b2284200000000000000010000000000000000000000000000002081d62fb6f8e3c63bb07414f173e2f1761186f3a609b96be8e54bf144e18bd1e9000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000380000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000010000000000000020e3f22df1ef809bdd780125e0869fc594b795001da2cb5255ac86c869e41bb3d100000000000000010000000000000001000000000000002042ccda5e4f3610e7833759239b87dcb5feb5654641bd57359476edc936a15e8e000000000000000100000000000000010000000000000020de3c1116c517fc559702c15da18fca7713ea045f49bee0d28a5b11b093f744f5000000000000000100000000000000000000000000000020c8c39661891e6889268d1a75425c16fa10b5ce02a5817678bfb61fd4d7ba745b000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003800000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020dcad9ad63ac90f36294e45ac4e2910b6be1ff4ab582ec77d94b36aee2aaec3b7000000000000000100000000000000010000000000000020fdf80980218da61f93fdbe491188fb7f3191a3b3bb5166ce6014e8f20d70673d00000000000000010000000000000001000000000000002096a037551b0b573c983aaa7a75192a672a3c09151e279ffd3c1e0e670d35fd370000000000000001000000000000000000000000000000208ef32cdd20ab9840d12ae9a0d741f7d3f389289d74ea182f48337a1058f3b15d000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000380000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000202317a666cb7ea69255e854e67aa19b531a4a222717cc9440e4546a3fab5d7ed80000000000000001000000000000000100000000000000209e11faaa3c075b6834d4668a36d21b8294c07a039a232c100665d90b3d03bf4500000000000000010000000000000001000000000000002080cf796e32484601f36528ae033f1d268f38cb3aa9d351ba1b0fcd4e2043d757000000000000000100000000000000000000000000000020a79432284160ffbe7605792344dd2c3b75b783de349a59eac5f705dbb10d4fec000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a6000000000000000a0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020476556fd01eea8de8589b358ad655136b4529120df47439f805a84b80db3f0d4000000000000000100000000000000000000000000000020dfa1f4a78895997367f9cc44c38621692b6fc048ae50b225156222237c41470e000000000000000100000000000000010000000000000020f7575ab7c2207c8a39c727bb104d9b7c0105c5ae631fc01ee25378fbc615b0d20000000000000001000000000000000000000000000000201fd5498b5606acaaede0db59eb7b7e660b4fbc8eb9fa1d0c6c2adb48d75d615300000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000000a0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020e3b0a77cc98e77fc6fdd13ed8259ab6d4de79d49242c183c0de0d56ef4309378000000000000000100000000000000000000000000000020aa1f37e3209956f186a8818de28664641609ece32260276f3cd7bc90fd2eff250000000000000001000000000000000100000000000000205dc15f79b1aa0ed50e58e550fd41c07ace7cdd1101aa37ef4273ae5e9038146f000000000000000100000000000000000000000000000020d1816e01b598e08ee1c459e3283ac87d454a19f2e41f3f85158e9f10b9faef71000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000000a0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000010000000000000020d0c6ac0a7420d305c0b0db904bd7753c10e5ad7e852b470a6ff6c97163a1d16c00000000000000010000000000000000000000000000002070360d152385685b7e662a1e2a50c902712bfecfae32367357c1a56b444bbe8b000000000000000100000000000000010000000000000020abf88fdff603d4d880f1564dd8b5a9e24fd51a61c22d45624f73911e449bcf94000000000000000100000000000000000000000000000020dede73056e97d895ee544cd1f515e7f872b01d10ad51bde6457326fcf11c7b20000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000a00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a4000000000000000600000000000000010000000000000001000000000000002027f3bc54e0caa3cf10949e5571695f1c1507a702c9659e3798e08a9c705770cf000000000000000100000000000000000000000000000020930e0dd388f89437381d9fbfbd30a20cad6120bbd212c874b3c1322539175da500000000000000010000000000000001000000000000002009f1dd01603cfe8cb20303e6d66fb1ad83bdc7093f7a52699cb4afa68588b483000000000000000100000000000000000000000000000020d4666304bf2809e0fe3311603148aa6aef2cc88395ddc38a022a9c742dada87d0000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000000a0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000209a4f190afc1d5b77cff588fa4251a0c9a43a7844bb96ea2e5800bc106f21c0b70000000000000001000000000000000000000000000000200b40b1436d0bc1adaefb89a6d250d74c85d9475ff40591b745878d6727b5078d0000000000000001000000000000000100000000000000203c7ec701f5e4b6f4992798f93bc359521c17689c879f0a4d5728d25a602fe261000000000000000100000000000000000000000000000020c1a70db1dbbbf1d266cc63410c3e1f798fbc2f00cc35d561bc0706474f565a7d000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f000000000000001e0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7000000000000000600000000000000010000000000000001000000000000002017458b640f162e7d2ffc58f6689da16dfa3d46aee041a56d60baba3307c3c593000000000000000100000000000000000000000000000020a2502a6ae92a724a6e2a3a94ad93bd71bd29b046475706a32afa43f571c551f200000000000000010000000000000000000000000000002070f93532da12d95bd9b02b2acb02b74a3a532fbd8d1ec178ca7acf3e54865fb800000000000000010000000000000000000000000000002069689184b6eb1ae40e108c1a961e1f8973f9d7b7c50392b41d11c8cbe2dc0314000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000001e0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020ead80559e72048aad5e5aee9cf2d51cd297f81e63afc70a01bc77e252efdd4830000000000000001000000000000000000000000000000209556d77d8faa0780c175114ccc703ccef5e23f99123014f3cb64b72a60e79680000000000000000100000000000000000000000000000020635115868949cf601b309c4df546e182524084c9811bb9ee1fb0b250cc7303b00000000000000001000000000000000000000000000000201d592eaf7b775ac80f80f65ac71600e7b42e34c2b41369815d26559f705c392800000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000001e0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000001000000000000002015c175fafb17797c6df0b95eb3e0e3b53d779fa8704c43da7ecffc8f14d2cdec000000000000000100000000000000000000000000000020b1f59360b8604b8aeb5462a45975637ec382c2d69e9898248c3ff0b5c0f84a490000000000000001000000000000000000000000000000201ee947871b7c23ff35900da33157b598a2a0de9b805ba0c5a66fd0f7a777b96e00000000000000010000000000000000000000000000002008ef744cc4c71b3dc0ad6709747a269607614084afb6b3ce67e9224db4721b010000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001e00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a4000000000000000600000000000000010000000000000001000000000000002052bbf92873b320b044fee87d383170b9570274940c7da766e23b6f77aa71011d0000000000000001000000000000000000000000000000203ba2c97654de7bfcc8d53977aba10d361172900252c2564628c1c4d0269897da000000000000000100000000000000000000000000000020f5ce7f2db68efde598b83474b5a87a6b370a42d4f72227049cb83d4df11bb6a10000000000000001000000000000000000000000000000204a15bacd4d08e8dc5188fa2617ce3f2048ab093a457dbb1568a132452c1264e70000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000001e0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000200c76146bd78d259f950c8d58437a5baf9a6bb130c93e14380f25bd735a47e106000000000000000100000000000000000000000000000020c594fd6aef9bf0a9ad32de1c2b21fef40fc7cf55d5778a950bfba5bcec02647a000000000000000100000000000000000000000000000020b4a1b1f3f1cb855740daf8c4833a49820c58975955c04f60f0e741d105e354a6000000000000000100000000000000000000000000000020b705227efab8bbcce7e6efa6e6c2c8c24b0165a04b60ba4382b0c252dfa09b540000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000150000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000209a7f6ee04285cc053d122b4d2dc01674868c1c4198d702144ec6673d4f1735470000000000000001000000000000000100000000000000209b10e94ccc495ed067a2c6b3180fdcfddf4c8bc779cdf7fc14dde8feb399309d000000000000000100000000000000000000000000000020080b28b1dece6dde43a662bb2943cbbcfb4977254ddfb567d20ec3694d07decc000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000150000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000203ac1614b3ebad34b37931ec463de127c8bb45876ebd8f753c177b3b708f2eccb000000000000000100000000000000010000000000000020576d77dac3a70e1802ac9cbaf6777f6090720d9e7fccb6078e57d4811b497ee2000000000000000100000000000000000000000000000020ace429d6a2e0ab83426a9b9ba04ca6bb90f71e7ceee02c278a82a7859d4bc1820000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000150000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020b315c72fa41b10fad5bfe97985d9d38cdfb966274cd890d82281a154ddf380870000000000000001000000000000000100000000000000209c160349b93bdba6b3a6c3afcd2503bc1a79db30aeb896003c136aefc2ff9b3a00000000000000010000000000000000000000000000002005c7231b545188d801508269d5e616db314e98d0d1d96b4d859cba418919dce7000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001500000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020dee119a0ca0d75cbae521579b9854eb21e572f571eb2bc9024914fdc09b7d6760000000000000001000000000000000100000000000000204d597031c84975b5e61070724ab3d606668a57320d7d99c5a77ab1a1d5221bb4000000000000000100000000000000000000000000000020792b54430c2c7a5202334fa577281d00396a0c9d5a6149e8832c12c7a186e7b6000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000150000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020fb6f21306c23be5f073086377b0217641f535be016cabf1ed1dc1319d6107c3000000000000000010000000000000001000000000000002064127693e8da9c8e8a48196327c3c787b11da3246b2e852de189d6ccb7f2da7a0000000000000001000000000000000000000000000000208eb0d4e58e0649d2818142c4c7cefb08dd13094d3a575e5054570ef7155a1a53000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000070000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020c999afc4670b92c57b5bdc1307bc519e96e3f6ce67a073eed8ce5ef11f19e6e90000000000000001000000000000000000000000000000209f204347ecc49a4dd4d3f69e4b19d6830b85a828d152c59461d5362f5cb21db2000000000000000100000000000000000000000000000020e2c28e037d30a9b1cafa16794e336898558e512395cfcbdeb25f5f9c08dba0820000000000000001000000000000000100000000000000209dc48d41a2d4c25b90ae286b21502aabe4177429574808eac78aed0ba9b970ba00000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000070000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000000000000000000020586da498cb5e8901c3ec5d5508acf316da62a500cdb2968accfb203b1bea9070000000000000000100000000000000000000000000000020b145ff653878ffcbd547f41efb06850149e78220022ff24e962b02ea4e2f228900000000000000010000000000000000000000000000002040a8544c04c63db69600b9141e0ac5c5c6f2f63672ad293fbf89e200ff76e373000000000000000100000000000000010000000000000020980805126f19ea693dca5bc5ccf2a5596180ccaa904f73633259ef7aabc46a94000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000070000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000000000000000000202ef43b85290f15bd3d8362bd3a87c43882d99278fde40955f79539a250ddcfe5000000000000000100000000000000000000000000000020eb8edb8d4ad346a6f22f37ed4739e1db15924952e1f20fa8193f29d46a4bc88100000000000000010000000000000000000000000000002009a92cdc4908f685ce6b1345b92ded1885178ef2a7aded52334aff5467d169d000000000000000010000000000000001000000000000002006ee5d52edd1f31a36e4a7048840c9439f8ef7333453a9f11e8679d7622f8558000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000700000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020e567f0c95d913448523311549b056d21dfa31416ea385df80191fca7982aa46f000000000000000100000000000000000000000000000020b175634046bfa2f2b9b36cdb156d3733a331af1ccbc15e26288e9c28db4926d0000000000000000100000000000000000000000000000020e371e374acaaf27337ab92c2b2c57caddfa4c8901247aecc181d0f2d03ab2034000000000000000100000000000000010000000000000020a990e84ca9579c1d2e4df0c931557e80f89da355c549b820bd65c57780b190f50000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000070000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000000000000000000209472ffaa4bf8f28e6b02bce59e72f9ef36670aac23b3ce8d524cf6c94d853e3300000000000000010000000000000000000000000000002050248d415788337ff59a4c34ebfd10ed22ae84b98064ecf23658f168d00faceb0000000000000001000000000000000000000000000000204f94e19275c3ad1b0968aa350973ee3c5947aff002b686efe6c16032d7650d02000000000000000100000000000000010000000000000020ffeab4f50dd382561e76011c806cd6dddf3c589391f5e48ba92af3fc97a82252000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000250000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020630872b42a7ea5d62dfc2184c80e80a41c4d9f74c4b045dc408ae07cd64da6c900000000000000010000000000000001000000000000002089d1f5e7ddab385cee9ef3c6e039bf9dba4cd0c7bf5968af1e87a54f1c8b98f4000000000000000100000000000000000000000000000020254ad08d8f651887ccdedd4264cbe8ac8a820f273e7e6a6eec9571b2bee83fed00000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000250000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000207f982963152f03dde7968faf90b0d81ff99227c62e69923666ebc8173d6462eb00000000000000010000000000000001000000000000002048d27b60aa9bff8a3ad72fa50e506b89b2c70434429163e60518d3b54dd8d4f40000000000000001000000000000000000000000000000201e4829424cc3731a985d6b9986b78d322139a6d6965ff67e79bdb4abe7107c85000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000250000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020b123420fcecb372d37588afff58d72c753d9db2472c3503179752ce3dd8e91030000000000000001000000000000000100000000000000207295a2c10b1acf16129d092a7b9af37c389c4566a2bf22d8c69e0cf9f8719868000000000000000100000000000000000000000000000020504c7cfdf9b9d8a744d6d07015dc694b3c1e96fa04d9711bca9e89e47aea70bd000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002500000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000207ed847cad377a356eb74ddd306fd60d367e6c53509cf6d4d21669a79b2262fba000000000000000100000000000000010000000000000020d8587c740444d396342bde08fcc2aa14d09b3841a86867a8968a39985c1aae5f0000000000000001000000000000000000000000000000201b51cd96b5e7d3c5907dc40ebc575470d0b53cb58c9a11acee482a80587db2ca000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000250000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020cb6ec0139eb350e0de5a5a6e174e0cb4917a55d918936048b34724b384826deb000000000000000100000000000000010000000000000020dbb5f88bfd82f174b6b75b33b6e1b57f9e8c171e2884327da5b36cbefd7067110000000000000001000000000000000000000000000000202f7c3c123b082e8ba8e01175c4f6ae18dec43d9efebf55f2769ff4eef4d2582b000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000310000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020e7cde93b02f69b3bdfec265c0a80e30146008063d4d41d7952e09fef525ba56900000000000000010000000000000001000000000000002088b9c36ce6c205415134c822e13277bf26dc808cf4164d31fb3feb408d5a5e06000000000000000100000000000000010000000000000020d668a432d047c9e275f7c7d20e0a761a44ce7e63d76a8974123279ebd303ad5300000000000000010000000000000001000000000000002046b3efbf9fe849057eed4011be8c3b38efe26eb8878cde78eb8294097925f1bb000000000000000100000000000000000000000000000020c4c2ba348af38d67dfd9cc164022cddac1d46506afbe47309984a11a22e5cf580000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000310000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000209a08d4167dd497190fd45acf9002d380b4bccfa4516d724073519f6dcaa34ff3000000000000000100000000000000010000000000000020eee7a3b5bd32066ff6fae493f197ab42d452b72e6653f36c785e7ffcaaef4bdc000000000000000100000000000000010000000000000020a7afa996971e49948edcc6953b8e85b3a85abca1a8ca02bb441959ca7fbddc1e00000000000000010000000000000001000000000000002025513b7f08a347e3b4653b6a5b7b4504d17f3335eb68b911a07580668480ea5f000000000000000100000000000000000000000000000020837109d660d62526cc52bbdafedbe03f6a2107d9cd4046ff4fe632edc8a10104000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000310000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000000000000000000002055ec1c4f82144f667ff57b0b35d09d06d151bcd64d77112ba763dbb421ec0f560000000000000001000000000000000100000000000000200478375712328a539e0af75efba3145a5b83977f65fd6f26f2bef0e92f4cf47c000000000000000100000000000000010000000000000020f956d888804e64a270d247562d2e4df7cb3baaff4b906f94b4e64fcb67d3fb92000000000000000100000000000000010000000000000020a61e4bd78e6377780bb7580457ace8abedf45db5c6b1905e0fc76ee6b540ec6f000000000000000100000000000000000000000000000020c351835d8f9fd571ded642d2ea409183952c3bfe9929b3438e7b686e6fb16578000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000003100000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000200bc04b47f026e77bdba7fa5067531c8b573f79f8515535e0a7f6cc54758ce5f5000000000000000100000000000000010000000000000020e4d3556944aef39dc24c83873c204349c90de3d0febf5e94f5d30752aacf58d1000000000000000100000000000000010000000000000020695844727e2fac06bb31a161155a39527775fb0591002573a9e4d4aee1e794880000000000000001000000000000000100000000000000201273eb79132092546fe9e443e04ce70d652607cb46845d8269cc51b07a5e2636000000000000000100000000000000000000000000000020175403d89e7c3ac80084ed2065e7901cb7bcdd03d95963ebd8da3d7b01656980000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000310000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020907d7781ed9c8c3275965d95e3143f70ea11068a85f6abc38fa31a0fbdfe2c26000000000000000100000000000000010000000000000020a834b11452e58e60e9d991391a3e2e59588fa25493c192ba98d1d33f296b4e32000000000000000100000000000000010000000000000020b4683887999b2d9372eba712b4bcbe56fe7c3bbf097eb71436f394f19c5e540e000000000000000100000000000000010000000000000020ca0bbcf3ba7d635c190762d1905f0cdb8d6b2af98d668d282ab970819d0796e0000000000000000100000000000000000000000000000020e71820b42e57fb95a3bc83b976f4fbd6a1d38465ef6c1e538fa87e39976b419e00000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a6000000000000001d0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020a89096b06ea97fc764549f477ec35dc13b208ea05aea251072e9bc82b6f3a78e0000000000000001000000000000000100000000000000202ec5ed8b835c098bcf1fbaa0f4aab5053575fbe2dd675f6a8528d2ae539d073300000000000000010000000000000000000000000000002070f93532da12d95bd9b02b2acb02b74a3a532fbd8d1ec178ca7acf3e54865fb800000000000000010000000000000000000000000000002069689184b6eb1ae40e108c1a961e1f8973f9d7b7c50392b41d11c8cbe2dc0314000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000001d0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000206838e20cdd11196c2c33d5322dd690e81a3eee788ea691ed628a7ef36ca21b6b000000000000000100000000000000010000000000000020e4b2b21638b26d0fbd21e1a61477670910de9d6a5a534cc89f2e66926c92590d000000000000000100000000000000000000000000000020635115868949cf601b309c4df546e182524084c9811bb9ee1fb0b250cc7303b00000000000000001000000000000000000000000000000201d592eaf7b775ac80f80f65ac71600e7b42e34c2b41369815d26559f705c392800000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000001d0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d0fd57f00841b509d4c6d2212ccb38587bbc741e02dedf856402a2bdd12ad0ad000000000000000100000000000000010000000000000020197b3fade2da4dccae7c39182e13ca3c80d7ab354bd093846a22e052814766ac0000000000000001000000000000000000000000000000201ee947871b7c23ff35900da33157b598a2a0de9b805ba0c5a66fd0f7a777b96e00000000000000010000000000000000000000000000002008ef744cc4c71b3dc0ad6709747a269607614084afb6b3ce67e9224db4721b010000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001d00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020e167853023255bc66f0953cc3ff2785ec81d96ef333e5412c12995ee607e79f2000000000000000100000000000000010000000000000020ea6edfa94c83df2c0120776cb5622744d2e6b641fe47e78813b62588fad5a6e8000000000000000100000000000000000000000000000020f5ce7f2db68efde598b83474b5a87a6b370a42d4f72227049cb83d4df11bb6a10000000000000001000000000000000000000000000000204a15bacd4d08e8dc5188fa2617ce3f2048ab093a457dbb1568a132452c1264e70000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000001d0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020977dcc0f390edc4c8e7c60ca37d139fd8af75cdd07d7f51df6f4a33958ded816000000000000000100000000000000010000000000000020fd33a21eeff04663387fcf1c31e815a571114521fabf808a5505ae8eb3bc6104000000000000000100000000000000000000000000000020b4a1b1f3f1cb855740daf8c4833a49820c58975955c04f60f0e741d105e354a6000000000000000100000000000000000000000000000020b705227efab8bbcce7e6efa6e6c2c8c24b0165a04b60ba4382b0c252dfa09b540000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f000000000000001d0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020a89096b06ea97fc764549f477ec35dc13b208ea05aea251072e9bc82b6f3a78e0000000000000001000000000000000100000000000000202ec5ed8b835c098bcf1fbaa0f4aab5053575fbe2dd675f6a8528d2ae539d073300000000000000010000000000000000000000000000002070f93532da12d95bd9b02b2acb02b74a3a532fbd8d1ec178ca7acf3e54865fb800000000000000010000000000000000000000000000002069689184b6eb1ae40e108c1a961e1f8973f9d7b7c50392b41d11c8cbe2dc0314000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000001d0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000206838e20cdd11196c2c33d5322dd690e81a3eee788ea691ed628a7ef36ca21b6b000000000000000100000000000000010000000000000020e4b2b21638b26d0fbd21e1a61477670910de9d6a5a534cc89f2e66926c92590d000000000000000100000000000000000000000000000020635115868949cf601b309c4df546e182524084c9811bb9ee1fb0b250cc7303b00000000000000001000000000000000000000000000000201d592eaf7b775ac80f80f65ac71600e7b42e34c2b41369815d26559f705c392800000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000001d0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d0fd57f00841b509d4c6d2212ccb38587bbc741e02dedf856402a2bdd12ad0ad000000000000000100000000000000010000000000000020197b3fade2da4dccae7c39182e13ca3c80d7ab354bd093846a22e052814766ac0000000000000001000000000000000000000000000000201ee947871b7c23ff35900da33157b598a2a0de9b805ba0c5a66fd0f7a777b96e00000000000000010000000000000000000000000000002008ef744cc4c71b3dc0ad6709747a269607614084afb6b3ce67e9224db4721b010000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001d00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020e167853023255bc66f0953cc3ff2785ec81d96ef333e5412c12995ee607e79f2000000000000000100000000000000010000000000000020ea6edfa94c83df2c0120776cb5622744d2e6b641fe47e78813b62588fad5a6e8000000000000000100000000000000000000000000000020f5ce7f2db68efde598b83474b5a87a6b370a42d4f72227049cb83d4df11bb6a10000000000000001000000000000000000000000000000204a15bacd4d08e8dc5188fa2617ce3f2048ab093a457dbb1568a132452c1264e70000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000001d0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020977dcc0f390edc4c8e7c60ca37d139fd8af75cdd07d7f51df6f4a33958ded816000000000000000100000000000000010000000000000020fd33a21eeff04663387fcf1c31e815a571114521fabf808a5505ae8eb3bc6104000000000000000100000000000000000000000000000020b4a1b1f3f1cb855740daf8c4833a49820c58975955c04f60f0e741d105e354a6000000000000000100000000000000000000000000000020b705227efab8bbcce7e6efa6e6c2c8c24b0165a04b60ba4382b0c252dfa09b540000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000010000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020ce2da5dd3f1d2499114e62007db0bc8b52860a97086c4d1d9b291f96e0ac9c2e000000000000000100000000000000010000000000000020fc1dbba6f9b455616fa548f07000bd186f0be1060371081b1c952c87cb2969850000000000000001000000000000000100000000000000205bc3e12c36d4a2e20b1b195ac346c64db1219ed22eb08085da4d26fcd4973a5e0000000000000001000000000000000100000000000000209dc48d41a2d4c25b90ae286b21502aabe4177429574808eac78aed0ba9b970ba00000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000010000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000000000000000000020bf352c60784b74b941824f2d63cf3836272db67d7aeeacad2aebe65815faf2a5000000000000000100000000000000010000000000000020426a93f6deffd2b075525a4dae94d94e1a8e6a36b7caff23457ae4cce303aa10000000000000000100000000000000010000000000000020e625f3331016e7cd88bea7a7b855bae1ee013995c9ef355b8748e4878dd9c543000000000000000100000000000000010000000000000020980805126f19ea693dca5bc5ccf2a5596180ccaa904f73633259ef7aabc46a94000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000010000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000000000000000000202b14082c23a02f1d9d6db9546bbf2312f865ca20039d204443ce8702eca55d60000000000000000100000000000000010000000000000020f020441b9681e335c14a2a6c21dd8510b27a0dae0eec61b72fa315a598c8b87f000000000000000100000000000000010000000000000020ddf36e15c6d2cad2a2d13ca341f8f429ea1de4012e969c8489e61f092d7f701d00000000000000010000000000000001000000000000002006ee5d52edd1f31a36e4a7048840c9439f8ef7333453a9f11e8679d7622f8558000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000100000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000200043a3e5aa00392afa1907a58865b4472da25d1bb465711605b4bce58b63030300000000000000010000000000000001000000000000002031a4776534529348397cae2c9d705a8eafe3961afed35fdad2915095b5efbf33000000000000000100000000000000010000000000000020886082a9355e3afea404279c3bebead20b99039dd4aa0b3d0dab726e1e29aff9000000000000000100000000000000010000000000000020a990e84ca9579c1d2e4df0c931557e80f89da355c549b820bd65c57780b190f50000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000010000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020c82ca78efe4b64d5751be30417b609833fac301f253ecbffe41e8e9bee96cff60000000000000001000000000000000100000000000000206ebbae03bedcb30a6ac53ee99b1ba731605aa9a26e3a2462ba854af10e81ed47000000000000000100000000000000010000000000000020e211041d56d70c70c0fe4028f21a169da1cd4ca4e960c648ebea202d6c43674c000000000000000100000000000000010000000000000020ffeab4f50dd382561e76011c806cd6dddf3c589391f5e48ba92af3fc97a82252000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000030000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020b7c8e313feed160e8acf05ea4bfb6f176446c2ac0bc9f2abc9b686508ab52f6c0000000000000001000000000000000000000000000000209671522c78c40e86ef0e8a667a3e46003403098881dba6475154303e1c3e65ac0000000000000001000000000000000100000000000000205bc3e12c36d4a2e20b1b195ac346c64db1219ed22eb08085da4d26fcd4973a5e0000000000000001000000000000000100000000000000209dc48d41a2d4c25b90ae286b21502aabe4177429574808eac78aed0ba9b970ba00000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000030000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000000000000000000020c7c617fe5a8e3fcee395b25f5aad1075de8af4c63d02a7a5ccf0ebcc3757baa10000000000000001000000000000000000000000000000201fe587fe304db71b83584845c66187566a5fb7270585460d0475013af24044b6000000000000000100000000000000010000000000000020e625f3331016e7cd88bea7a7b855bae1ee013995c9ef355b8748e4878dd9c543000000000000000100000000000000010000000000000020980805126f19ea693dca5bc5ccf2a5596180ccaa904f73633259ef7aabc46a94000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000030000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020ce056a02bde877e3b53dd1faa6938832c1ed6fadac97fd1c0a924161b6298fa2000000000000000100000000000000000000000000000020254828136b43e34900d85850fa1210c25e9d1c343f57d660963534a5e494b204000000000000000100000000000000010000000000000020ddf36e15c6d2cad2a2d13ca341f8f429ea1de4012e969c8489e61f092d7f701d00000000000000010000000000000001000000000000002006ee5d52edd1f31a36e4a7048840c9439f8ef7333453a9f11e8679d7622f8558000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000300000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020c066efe3dfef71694149148ee6cb2872aefd1b4f2fc9862252abee42af30ed5a000000000000000100000000000000000000000000000020bb61afaca75702079a77cb4ffb618e76255194cb8ac3e09cf817da739cc0038d000000000000000100000000000000010000000000000020886082a9355e3afea404279c3bebead20b99039dd4aa0b3d0dab726e1e29aff9000000000000000100000000000000010000000000000020a990e84ca9579c1d2e4df0c931557e80f89da355c549b820bd65c57780b190f50000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000030000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec000000000000000600000000000000010000000000000000000000000000002051a58812d4ed2697e8b31024f55f4062373f3388fd3d1701366bc11ac7a6b961000000000000000100000000000000000000000000000020e0698d131d704ec64db6c2ee76f3fff3800a90d403f81572de0ab695e257b3e9000000000000000100000000000000010000000000000020e211041d56d70c70c0fe4028f21a169da1cd4ca4e960c648ebea202d6c43674c000000000000000100000000000000010000000000000020ffeab4f50dd382561e76011c806cd6dddf3c589391f5e48ba92af3fc97a82252000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000080000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020657f400c23f985ef1ba27d0e61eec710dc328bb9ca9d9fcbbed56910fe31e4490000000000000001000000000000000100000000000000204e8bc169e0bffb7af86e442b025c73a9c0e2c8fcbfdcbdbfd7d568446045f1ae000000000000000100000000000000010000000000000020f7575ab7c2207c8a39c727bb104d9b7c0105c5ae631fc01ee25378fbc615b0d20000000000000001000000000000000000000000000000201fd5498b5606acaaede0db59eb7b7e660b4fbc8eb9fa1d0c6c2adb48d75d615300000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000080000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020325051efdb8424e62d624b11d6b7eeb927253341aa3927034fbb0c8bf76c12ff000000000000000100000000000000010000000000000020785181f64823ec7b563f1cdf18df75b075d0a5963a0db15b3a9e3b0b42f36f1b0000000000000001000000000000000100000000000000205dc15f79b1aa0ed50e58e550fd41c07ace7cdd1101aa37ef4273ae5e9038146f000000000000000100000000000000000000000000000020d1816e01b598e08ee1c459e3283ac87d454a19f2e41f3f85158e9f10b9faef71000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000080000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000100000000000000202eeead91b20ab57873ca7c783915a4212ed0dc2f7961aab41598ea0bc8a47329000000000000000100000000000000010000000000000020a6ac2199362ac987e04ad05199fe7f8be4b60786974730c5353094867d88f34f000000000000000100000000000000010000000000000020abf88fdff603d4d880f1564dd8b5a9e24fd51a61c22d45624f73911e449bcf94000000000000000100000000000000000000000000000020dede73056e97d895ee544cd1f515e7f872b01d10ad51bde6457326fcf11c7b20000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000800000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020920e2801b283c6626363cc9ab21f52393946e3a96b1195de32cbde245b3fa8d8000000000000000100000000000000010000000000000020cf8a0f1ddefe7b4046369acf63949764e63161ba93c9f157762361c30aae1fc100000000000000010000000000000001000000000000002009f1dd01603cfe8cb20303e6d66fb1ad83bdc7093f7a52699cb4afa68588b483000000000000000100000000000000000000000000000020d4666304bf2809e0fe3311603148aa6aef2cc88395ddc38a022a9c742dada87d0000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000080000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000207835bfb9721cf146284a361fac9b687f1d55206c50ec6b050d1a1c0f1283c2f50000000000000001000000000000000100000000000000207a3fa367a923e5d12e87ccdb6cd209b3bc3cc0afde4ed5f86101656aafd030520000000000000001000000000000000100000000000000203c7ec701f5e4b6f4992798f93bc359521c17689c879f0a4d5728d25a602fe261000000000000000100000000000000000000000000000020c1a70db1dbbbf1d266cc63410c3e1f798fbc2f00cc35d561bc0706474f565a7d000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000290000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000204b88604a6608c6eb9ba3bede044e248d62becadb080a456681805ab480b64a2400000000000000010000000000000001000000000000002092ff38622b2decefcf8307aa018adefdfdaa06fc5a520c0c3a04990f33027694000000000000000100000000000000010000000000000020a346fbbeee725da089a6715dac946ab17533f7a77d571694ca1f1b28abb7d944000000000000000100000000000000000000000000000020bc7cafa2d5bbcd43a2687bac1aaae39ea07c2b052355ee18f7bed28530381a1900000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000290000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002046b4103846ae2c10a547fe76a6b5a371acc433d524e7482d268b79767c7664dc000000000000000100000000000000010000000000000020a7171d4fa61fd12128f5c4965241652c8ddc0c46e8c7a964ffcf0984ffd7f89500000000000000010000000000000001000000000000002052ba89114da2853e8fa07d551806893e486429c35967e90f1364b3d437abdd22000000000000000100000000000000000000000000000020f69c63796b0fc3bb3288db5fc6b6321528bbbae678a35651696d958320b7b7430000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000290000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000000000000000000002070ac9c1a1cc0f370eef8792db4e8a07c0a2b92e6fe6e9e2b6988a0f7d968a20b000000000000000100000000000000010000000000000020c53a0cd0107f66cc790becb38f5fee3c0f9d025124f698f0f2467cde1fbb7f93000000000000000100000000000000010000000000000020512ede82de18eac361b0347346d45577998f11f0951205ca4172f9d850b9919b000000000000000100000000000000000000000000000020907caeb633215ff4129e7dab9f17c9025c93f92b16178fd8678a98fad237f0c60000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002900000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020b6e877a515adfcb592a770d462b43e449cee8c738d16f969724fb575ae8bb0b7000000000000000100000000000000010000000000000020580ef9da1ed5e2babc435eca9ea73f027bf97010b64a6f63c69c2aadf5386b910000000000000001000000000000000100000000000000200df33e0d9ca72d06a434af2c6b972a6b03667095ac1a683b86514e0012239182000000000000000100000000000000000000000000000020f873579facce3b51fb36341332ab2926a95297aa0acd0b4108cefea53d9e1c8a00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000290000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020b09d90014812ec62509979fb5d4af4e69400cc5cd308cd96ced13e9dd3199e310000000000000001000000000000000100000000000000200dbed97830aea5096cb060a71b37c812fde90fb3a125044efa801f95addf091d0000000000000001000000000000000100000000000000204b8c5f91ebd422cdb230fb374d30859759d449e266b2903f6b848cf8e5baf94f00000000000000010000000000000000000000000000002083502f4dae1d1e7cce3b35cd08cd8214523868a7bad81a68fd16bfd40a434166000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a6000000000000000d0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020b2bd9166fb292fd068715be077faabd5100a082db2ee30b660a7a840a453295e00000000000000010000000000000001000000000000002057d79dbf8ed8b8aa3585c69adf87ef75ce64bdf75ac79a37fcbc979ba37b0a3e000000000000000100000000000000000000000000000020e4531c0cf3964a849077d3f66aca1c780770dbd36f02f9e591cac1251871b88a0000000000000001000000000000000000000000000000201fd5498b5606acaaede0db59eb7b7e660b4fbc8eb9fa1d0c6c2adb48d75d615300000000000000010000000000000001000000000000002036b32a939da9ce0665c0dc8758cd436bdbdcd123f116687574dc656492688fd200000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada97000000000000000d0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000205e14be2c5de23e6ed70fd6d842a4c814558815484501d6531472c2a4b9b7c626000000000000000100000000000000010000000000000020c3bd632f94a0f936e286d09638e32d9a2fc3eea8f13d18b4ae707edd67fdf6740000000000000001000000000000000000000000000000204e242999845fcac82f38a2f8827ba9e31d01ad478796f9013f43e0bec62d088f000000000000000100000000000000000000000000000020d1816e01b598e08ee1c459e3283ac87d454a19f2e41f3f85158e9f10b9faef71000000000000000100000000000000010000000000000020866ee41d6aa0ca3b1e6551db1dcd72ba03b3f98c048ffd0a3d7da73285a2f4680000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea000000000000000d0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000000000000000000002090ff676b9c14f4671a0e91cf403a88fb0b22e7a8a8a370aba0a28e26bcea1ac300000000000000010000000000000001000000000000002020093024ea2eaeb3c5934a41935a11dab2086c3d0aab8084952a99d9f0d224c20000000000000001000000000000000000000000000000207e61af4d68362cc7280f55cf450babaa4c27e0d7b623080a1dc3e5db95a6761d000000000000000100000000000000000000000000000020dede73056e97d895ee544cd1f515e7f872b01d10ad51bde6457326fcf11c7b20000000000000000100000000000000010000000000000020e42c454c3993826e0a6d48b07c4411d80845494641e8b21eb0ae999474091fd5000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000000d00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a4000000000000000600000000000000010000000000000000000000000000002031239eb1c08af680c4f00771654ce894f0d3587f58ea53c47ed4a11c1fa85145000000000000000100000000000000010000000000000020a91a262b04c6a7139a4bd4ed8b0f30807db95327049cf2a6d7b25f8be94e37b90000000000000001000000000000000000000000000000208184ee99edcbc305656197375ced84668d6a6dfe60525a4437554af40db6661e000000000000000100000000000000000000000000000020d4666304bf2809e0fe3311603148aa6aef2cc88395ddc38a022a9c742dada87d0000000000000001000000000000000100000000000000209d162dc7e8528b52a0a0cf62fcb14ba0e7e39ef07651c6f28418b9f4611eb9f800000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b000000000000000d0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020eb8d9836cb953c6437c496ece6cbdfdd7243ec51671ccb3af47a85fa778e312c00000000000000010000000000000001000000000000002018c3f53aac4183df50ec2d566e245042dd3e3d71adf78621df52d71069399b8400000000000000010000000000000000000000000000002047d66e60185c2492df2be91f5c8e879243c3ec6d4ebe0b5f2c37fcf0fff4d188000000000000000100000000000000000000000000000020c1a70db1dbbbf1d266cc63410c3e1f798fbc2f00cc35d561bc0706474f565a7d000000000000000100000000000000010000000000000020c500325dcbc68fbe8447a4b559f0e00f813f0f811d1383f87dd85e9a2f6b4ef1000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f000000000000002c0000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000100000000000000203143eaf6c1aa46c7aacd87875465de486e36c316b7a0b8bddd6c1517dc726d4d000000000000000100000000000000010000000000000020f10b3d1735c0e4a98365cd6a45c7b241ee1170e0a7ba2fc4a24bab4dfa03f86b000000000000000100000000000000000000000000000020a99ec68e5e702c95d72c271dfc6b7fba83a95d182bfe10c3b55beafee6b02033000000000000000100000000000000000000000000000020bc7cafa2d5bbcd43a2687bac1aaae39ea07c2b052355ee18f7bed28530381a1900000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba3610000000000000002c0000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020325148bc2c92b4a9b7fbd60e3c2c802e14a460b09bb186e104c1c59b926381ac000000000000000100000000000000010000000000000020bcfd43a16b89cd418f8366dfd07ee2192ea7ffa028e030d1b656dc88979acb7c000000000000000100000000000000000000000000000020eb65f60cc50d4a78bbd6805dbdb2bf94cc2376e36aa8b971a31f71d4de0675d8000000000000000100000000000000000000000000000020f69c63796b0fc3bb3288db5fc6b6321528bbbae678a35651696d958320b7b7430000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb000000000000002c0000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a00000000000000060000000000000001000000000000000100000000000000204f0fb56f75e03da7f2f554b9aab31d03c16451499c7e038f1b1254547541cefb000000000000000100000000000000010000000000000020392bbf45b43f0b143a079c45cdf97d23e309c818a7f50d8a138242f783f140e000000000000000010000000000000000000000000000002006426e33baa1776913fabf5a4a6b22a45faa4944ecb6ee3596d2a7f071dad382000000000000000100000000000000000000000000000020907caeb633215ff4129e7dab9f17c9025c93f92b16178fd8678a98fad237f0c60000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002c00000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000100000000000000205d5491afbc2809464939001fd12ae88cb0a41ac4661174168145ed550bc70fd1000000000000000100000000000000010000000000000020facfada9baddf0e1d85bdc12bcb699700bc1eef3a5c1ac428f0a1b755f36b17400000000000000010000000000000000000000000000002045de5171730c798b920963229c38e2585a2ba74ae374a05c055e8f9ca4de381a000000000000000100000000000000000000000000000020f873579facce3b51fb36341332ab2926a95297aa0acd0b4108cefea53d9e1c8a00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee2000000000000002c0000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec000000000000000600000000000000010000000000000001000000000000002045f539421644e8c322c67c727085f4fa90364e2b03fedb21592e199092e759af00000000000000010000000000000001000000000000002045bc4c337b54e6e486f7686f4544d67b52d3d9407afb6f807b84c181ecad3077000000000000000100000000000000000000000000000020fce731c6ff148191e5989829d154266d461abbe1b87f3bf49e080e482df6295c00000000000000010000000000000000000000000000002083502f4dae1d1e7cce3b35cd08cd8214523868a7bad81a68fd16bfd40a434166000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000180000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000010000000000000020e37ac79746bf4ccddc8c206c6aed5212120d8eb3fc8f9deefaecc4cb8cee272600000000000000010000000000000001000000000000002064e8ee4e1f10a0c37b320e29748186b9e21c030e00ccb00c88b21962c5f0f301000000000000000100000000000000010000000000000020087a599f409cb7bacc0662f1cbc4762c6f1a1276b1ec901eff46c07ae65a8c6900000000000000010000000000000000000000000000002069689184b6eb1ae40e108c1a961e1f8973f9d7b7c50392b41d11c8cbe2dc0314000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000180000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d90000000000000006000000000000000100000000000000010000000000000020cc0712b34302d3e6312f8647a0a6fa2b486544a0d2e848deaf69f02cb204a167000000000000000100000000000000010000000000000020b8f1edd8329da4a7d85eebc33d21ba29663838aa392d4b38abe6c3a3fc8039ba000000000000000100000000000000010000000000000020c6bf6988a3e7187fae893c7eac58fd5d4e190f4f27238b2c7529d1f3965c96c30000000000000001000000000000000000000000000000201d592eaf7b775ac80f80f65ac71600e7b42e34c2b41369815d26559f705c392800000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000180000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a000000000000000600000000000000010000000000000001000000000000002096aa3031b3fe3f10a3f58af8d0bdb75f0e49a9ba47f632761dcbaa87e948d0960000000000000001000000000000000100000000000000208654ba3f3a471881a1ca07ad0134da045fba51136fc896da6ec67bfcd91573740000000000000001000000000000000100000000000000203ef5c9702626ef1d8658d6fd366e6eccf85b6bc4df13c0bb45cf2cd03ed14cdb00000000000000010000000000000000000000000000002008ef744cc4c71b3dc0ad6709747a269607614084afb6b3ce67e9224db4721b010000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001800000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000010000000000000020c30eef258145d30eda1c64b433b7e983e0045f54639e7f4262d7f3c9a5ad2e8c000000000000000100000000000000010000000000000020095442c6eb9b5d21a073d82e33b0a318459f5eba2be957b08f2effbf317f97c50000000000000001000000000000000100000000000000203e2095fe80077dc9629cd9c8a40245961543a9420478c0c9442afc86a4142c350000000000000001000000000000000000000000000000204a15bacd4d08e8dc5188fa2617ce3f2048ab093a457dbb1568a132452c1264e70000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000180000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec00000000000000060000000000000001000000000000000100000000000000202303afb97227519b0d04097e4e48bcfc01846cc471033f9c5f9860318330912a000000000000000100000000000000010000000000000020887135bbc11bb37e81167b1bd7f635abd792ae414769e49a3d7009ecd03a6a9f000000000000000100000000000000010000000000000020375d4ed2adacd2b33684527fb299ea4f3b26ea60a3e425eec8be3753fb113dad000000000000000100000000000000000000000000000020b705227efab8bbcce7e6efa6e6c2c8c24b0165a04b60ba4382b0c252dfa09b540000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000210000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd70000000000000006000000000000000100000000000000000000000000000020b0ab6e706afe61983c5bf1d6e3d09621da7d9cd32bdd7e2130b81dcc46ef5802000000000000000100000000000000010000000000000020d087600766bd1df7913f14ae88a2e9b5b651504535f46ee5da14954af94de668000000000000000100000000000000010000000000000020cd2cd9ad2c779aa3995be1014c80f94a5247dc5109218180e006fbbe588ce2d800000000000000010000000000000001000000000000002020ca2ebe06b78b863c42ebd67e820162645990710fb2212c31964405270d49be00000000000000010000000000000001000000000000002051e2ab3fc87fd45a6f0510b6dab089a4a35340b297cad824c3c231bcc90b6ff50000000000000001000000000000000000000000000000205e0b72ae4cea1696148d617da3c751d3e724d8e66216104d01f22c824dba361000000000000000210000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002086cb5263dbaf418e96721addfd841cb67f9896781c9e8093170a2bebd35c8a0d00000000000000010000000000000001000000000000002005e8acde41240846b1b148e6f1731d982d9499b315b49571f3c4e12d88da5822000000000000000100000000000000010000000000000020dfd7eac1317ff666e7a446a260d70430c9aa0f0bfccfe2edf4ae24a5d163595d000000000000000100000000000000010000000000000020cb0c915a2fbf42f67d8ddb4687cdb94a70ea6dba8c337fad662aef43a1ff09120000000000000001000000000000000100000000000000206c83da9d4b1e81a733151667cd61d33d2b4a9f94fa20db81f27fc77d908957ac000000000000000100000000000000000000000000000020eb884da0b5f6bc9a0b0af3a84975956cc545900f5fba8134962c1953f3494bfb00000000000000210000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d7e7c468e06a8e592edbe1f9eff3164f0499e8ad0072da91fd4fa087ea820a1000000000000000010000000000000001000000000000002064922111b65302bddd53948632f9de2e4135390b8620b248b8a335776dedfd030000000000000001000000000000000100000000000000205dea807bd3761c569e5d91569ff1a4d18ca2750ddf526909660f91b2f84080cf000000000000000100000000000000010000000000000020ec94ab368df3700c4e485459b45d7544203947bced6933b6d2419aa51552b1e70000000000000001000000000000000100000000000000207acd065872a4395005f197c72b5e526fa218af19e2f3c61a7dcc6cdfbeee5a92000000000000000100000000000000000000000000000020f43e35ad1b4fdfb7c951570c54faba8daa953eafe29f8406d54006d5dcc070c1000000000000002100000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000206394d562d30d4d72e250c260ecbf498fb3d176889437362e030db290cfd3b22b000000000000000100000000000000010000000000000020aa69a887755987122b41014784240cfa2ea17a4e9b3aeba12dc7762da7582ecc000000000000000100000000000000010000000000000020c802860c649238e4c1cbd0ff648821a708a95501e146298b5b303abf07320669000000000000000100000000000000010000000000000020ce508bfa21ae59f4e3a574d7cf9aa2266b30a92dca771c1fb0e1be0bca3e9fec00000000000000010000000000000001000000000000002069f10c0def6dec102dea5fc481b64f3b770e7c9079b21ba4bb39924b49e5c5b4000000000000000100000000000000000000000000000020d480f8a11392332b11a486a7556907fdc2afb4d11df22f7c05a3e264dd2b8ee200000000000000210000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020af5fad30063ecb19951eac8cf60da4f79cdbb44b8297f1e89b410ad48971a7a700000000000000010000000000000001000000000000002001ae3a0c28f45072672fa1d9d722f50b96f496c2095844698ce94190b48086ca000000000000000100000000000000010000000000000020378b42427141ebdcf4a6aaa2ee39a4e2bd01cb4125d3f5ce563ae81c900aa929000000000000000100000000000000010000000000000020c1bc4adb66edbd4e3dab7de23832af2889cdfe7d4f7313a79599994c65f1d267000000000000000100000000000000010000000000000020dd99331c57e5bbdeacb1ec460129aa93aaedc92d262f25d199bc1fc1867f740300000000000000010000000000000000000000000000002003a481a44bf9c2c28d4f1884d0f5e5f504a0cc1f71bcc0a2817101bb12fb80a600000000000000130000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd7000000000000000600000000000000010000000000000000000000000000002090b33c873032a5ec45b5f67351f43f1b225ffd1fb110a4b7260789aee51a15d00000000000000001000000000000000000000000000000200314646f9ee1f2da5ba523b66c95aea6a8139895748d499e7ea045d702e5076c000000000000000100000000000000010000000000000020931fc0f60710e5550ab975b9da43260c532daa1aa0981b844a267625739ffb1b000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000130000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d9000000000000000600000000000000010000000000000000000000000000002046fbba018a8a4a6e5e98ff98b6f815b2ded50ca9a7a90716180a022f9187825d00000000000000010000000000000000000000000000002028038eef8da57d82ce0de2ccd5f23763a39282ebbd5fb66a194bcecda2353b37000000000000000100000000000000010000000000000020db75f2f16c24e1f86b75a7358eb0bff98736d767e792ba6500dc20c7a0f5b35f0000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000130000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020d2ffec8fc1d53dec40b42a89c0cae0dc549a408cc92a2e1de6b140998dee7cc700000000000000010000000000000000000000000000002093ba70ed0c69d5b989f971113943ff263312cc3df6696a3a6c2f47a6d1d600a00000000000000001000000000000000100000000000000208eca8e88d782a2c50068f91856cdb198e83fe75b53d95126db0ce5ba952fe000000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001300000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a400000000000000060000000000000001000000000000000000000000000000202c0f8e4c859a1b20d731414777322cb6bdf2e51a797b98f208ceff77a4018e8c000000000000000100000000000000000000000000000020fadaa9ce6822813c952cf021b4274e0bb104bcbd8836b7475735d844eea89533000000000000000100000000000000010000000000000020ef20ce255fff4244508dc0bf36aba9eeda1f94ba8303d6b23520cd52b598e748000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000130000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec000000000000000600000000000000010000000000000000000000000000002014803cd2ff52736be7bae826f5a432e5b31ba001fda84d1a774978f7b7f4f6f70000000000000001000000000000000000000000000000205761fffcf89e32cefe31af94ba1a6ba27b6bcb99a3272756b2193dd132a912fb00000000000000010000000000000001000000000000002003de737e05bbc77f493cd34846521552aa2f36e8056c458268b5b2cb15e5e244000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f00000000000000150000000000000020f3734d9198dd0c50151dab1fd6c015aea84429f69a6cb747110987cbe064ecd700000000000000060000000000000001000000000000000000000000000000209a7f6ee04285cc053d122b4d2dc01674868c1c4198d702144ec6673d4f1735470000000000000001000000000000000100000000000000209b10e94ccc495ed067a2c6b3180fdcfddf4c8bc779cdf7fc14dde8feb399309d000000000000000100000000000000000000000000000020080b28b1dece6dde43a662bb2943cbbcfb4977254ddfb567d20ec3694d07decc000000000000000100000000000000010000000000000020c64a168e6267d7b2e47dc0d09c805506aedd3c989278dc9afade3f67fdd80f45000000000000000100000000000000000000000000000020255823583a8da3833baa001f65dbebf3728b54f28cc6fcb3ddae62fff839715d00000000000000010000000000000001000000000000002001cf3ab44e71e590c71a2337eb83194821b251b19102d37952f3d2dddf6ada9700000000000000150000000000000020adfc46ea6e322679f1591a13b596b5a62d14c6178287c24cddbd4a9a7ff544d900000000000000060000000000000001000000000000000000000000000000203ac1614b3ebad34b37931ec463de127c8bb45876ebd8f753c177b3b708f2eccb000000000000000100000000000000010000000000000020576d77dac3a70e1802ac9cbaf6777f6090720d9e7fccb6078e57d4811b497ee2000000000000000100000000000000000000000000000020ace429d6a2e0ab83426a9b9ba04ca6bb90f71e7ceee02c278a82a7859d4bc1820000000000000001000000000000000100000000000000201601b7440b7229d62abcc5ba78cddc9bb0a4c27074daebf0310b226def6729f700000000000000010000000000000000000000000000002087cb0a92005238b6b0b4a100fc908564d8668772c89559db15a10674bdf8026d0000000000000001000000000000000100000000000000200e5894a0631c2b9eac69c26438ad9c40d328f80bf7733ab9f9ec548759fe5bea00000000000000150000000000000020236707f470cd90d5f7c1c9251c8f401a06e9e3169e3293c0553340aef8ccec8a0000000000000006000000000000000100000000000000000000000000000020b315c72fa41b10fad5bfe97985d9d38cdfb966274cd890d82281a154ddf380870000000000000001000000000000000100000000000000209c160349b93bdba6b3a6c3afcd2503bc1a79db30aeb896003c136aefc2ff9b3a00000000000000010000000000000000000000000000002005c7231b545188d801508269d5e616db314e98d0d1d96b4d859cba418919dce7000000000000000100000000000000010000000000000020e244d765ee74a8e1195e608c835af92a0b58fd698b292ad96f3d7190a45e6ed10000000000000001000000000000000000000000000000205e50941481bcd2462204a0c20c3d5e974ee471629e7a792a6bddb05dafcc4f93000000000000000100000000000000010000000000000020f9fbc61789ad4c7cf54c080eeef810d7db9b623f6b97e6a4d8ae1e9e4f04ff3d000000000000001500000000000000202dd599bb12d713d25ec662d72e1dc110459fbe5dd67c927e685c6b91802f73a40000000000000006000000000000000100000000000000000000000000000020dee119a0ca0d75cbae521579b9854eb21e572f571eb2bc9024914fdc09b7d6760000000000000001000000000000000100000000000000204d597031c84975b5e61070724ab3d606668a57320d7d99c5a77ab1a1d5221bb4000000000000000100000000000000000000000000000020792b54430c2c7a5202334fa577281d00396a0c9d5a6149e8832c12c7a186e7b6000000000000000100000000000000010000000000000020e2ec8e41c658860a5120137d5022ca3b005b7c38b9b4c1fe85db17458f923ec00000000000000001000000000000000000000000000000200e2f8c3e72ae276f36ad209c7a462ca801d0ef591a1ec611891c7405b76e862600000000000000010000000000000001000000000000002031b9c4fcfd5324de5e1fe8bba78f27b182911ddc18a428bb0c57212f7952279b00000000000000150000000000000020cf0dc83bb769670d401b6755f73c77a2f9dc0258034cf478f151bc21a9cb10ec0000000000000006000000000000000100000000000000000000000000000020fb6f21306c23be5f073086377b0217641f535be016cabf1ed1dc1319d6107c3000000000000000010000000000000001000000000000002064127693e8da9c8e8a48196327c3c787b11da3246b2e852de189d6ccb7f2da7a0000000000000001000000000000000000000000000000208eb0d4e58e0649d2818142c4c7cefb08dd13094d3a575e5054570ef7155a1a53000000000000000100000000000000010000000000000020c943282c0b36802764270508011e7a71f7b567969f94deb79d566b1037d9f7010000000000000001000000000000000000000000000000204f751f4808ddae7476b60af0c16f15d0f7caa508098e66cf117327b2e805808b000000000000000100000000000000010000000000000020490b41ec8f2b962c9f42721ed8e8e158976f2b2a3e5821529e7f930841cc5e6f0000000000000050000000000000002100000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000207ed7024cfb851e729174b4bebcb3b43b7e74c7bf66e598fab0fe7503c28e28b9000000000000000100000000000000010000000000000020eaac2ba91abd5bedfb2645fd52534b0616c14c1d5a3ca5c8b57f170ce3a0123c0000000000000001000000000000000100000000000000201fbe6a1d0ec9dde7d25203e3597b6c9a6d52920b54bd402cbb49f44f820ecf2c0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000010000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000204ffcc22c01ec89a91054ab22f4a6d8c255900fc815ae761f6b79cbe12ddc5505000000000000000100000000000000010000000000000020e435bd09932a6fdfff43746acb12d98720259cdc5ccdd25434bebb30b64793c9000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000002100000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000207ed7024cfb851e729174b4bebcb3b43b7e74c7bf66e598fab0fe7503c28e28b9000000000000000100000000000000010000000000000020eaac2ba91abd5bedfb2645fd52534b0616c14c1d5a3ca5c8b57f170ce3a0123c0000000000000001000000000000000100000000000000201fbe6a1d0ec9dde7d25203e3597b6c9a6d52920b54bd402cbb49f44f820ecf2c0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000010000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000204ffcc22c01ec89a91054ab22f4a6d8c255900fc815ae761f6b79cbe12ddc5505000000000000000100000000000000010000000000000020e435bd09932a6fdfff43746acb12d98720259cdc5ccdd25434bebb30b64793c9000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000003600000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020849f2b1f21df2ce4e701e935453d3a0e4115b6a2a8d075608035a88159cd9bf200000000000000010000000000000000000000000000002044077fb626c21b86b05e6607087853c88990ce85f620523b57ded4d77fa00deb0000000000000001000000000000000000000000000000203e91cf9fe968f301931a38865a0ef8edba05ddd912d2579a948fe706de6f6ec20000000000000001000000000000000100000000000000200247efeb8213912082e29ea2ef805a95ec45bbf7e81039cae60e1e2cc9f70398000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000160000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020c68f67732b556dafe5e6cc710dcf62a4f48d186e1177070f41403a3ea73eda7f00000000000000010000000000000000000000000000002034e8bb0c47b5f4c22eaf01dde0989cbdb99d29897ff4d4ce2af0816deae250d300000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000000800000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000100000000000000208f4914df53c50f650eaeb1e2644816a4d6571c8eadc34d0851795c3f6011fdb00000000000000001000000000000000100000000000000206f6f08120957917775f7e12d4d9fd5057d4ceeffb3313e9087de7e748a235134000000000000000100000000000000010000000000000020f0c276f87c11a544c7dff23228f592c3b45684bf70982045e5db020d2ee3ff180000000000000001000000000000000000000000000000200da9d11aaea100332a200903d50e52aa35159a71dc619287204508beb8f25033000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000080000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020fdfdce8038e314379ee4ef9d7435ac3bb67f81a42222ada24ec0b5edc53504e4000000000000000100000000000000010000000000000020ccea233de53953c0a0be4befba3181d87583ecf3ee74bc0c1b609c57583968bf0000000000000001000000000000000100000000000000201e7f0e6313dd3a48bccca00c1b7955c16cb8be0aef8b3ed3dc6c35130ff160af000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000000900000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020b4b77abaefede57853903c9155b4817fcdab1186aa4d78f63abb195247b0ba190000000000000001000000000000000100000000000000206f6f08120957917775f7e12d4d9fd5057d4ceeffb3313e9087de7e748a235134000000000000000100000000000000010000000000000020f0c276f87c11a544c7dff23228f592c3b45684bf70982045e5db020d2ee3ff180000000000000001000000000000000000000000000000200da9d11aaea100332a200903d50e52aa35159a71dc619287204508beb8f25033000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000090000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020e1c255daaa951116cdbc9d3e573d3cc9d0809bc3de7dbfc5e1243febc3afb770000000000000000100000000000000010000000000000020ccea233de53953c0a0be4befba3181d87583ecf3ee74bc0c1b609c57583968bf0000000000000001000000000000000100000000000000201e7f0e6313dd3a48bccca00c1b7955c16cb8be0aef8b3ed3dc6c35130ff160af000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000002400000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000100000000000000200a02cb614bf9361920cbe4da3b2aa0e5c76b4a05ee7685fbe7fe220b69b26a31000000000000000100000000000000010000000000000020266177fdcc4d675568f2cf052c7330dd20c5ba8ea8ed31a8f8ca6b52ba5126bb00000000000000010000000000000000000000000000002037aee6114b0e64049396c6974301981cc460b03b844091c0c8331ea0fd369b4f0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000040000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020f9cc1a2a80f33c6788bbb46711c7348050019176cd19f0b641afa766ba2eccb60000000000000001000000000000000100000000000000207c89f71843664bf97f22261fc06f08da09e4584d95f32099263db21dece008f10000000000000001000000000000000000000000000000207ef776b622132973cde5e96a32f68fa0775ac3f4a7ac0d1cb6b14e7458c2c3a0000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000003900000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020d487f7402c94e3aedfab01d6fdd66ba63ac7b0b39528b423a602d6a66c3a54970000000000000001000000000000000100000000000000202556b21fc161effaf655242fbec58230efd9a1ffaddb2e9252e9ca8c72b7a93000000000000000010000000000000001000000000000002049771951b4589a4f75df5ea08351bc0a5eccbbebfaa0b96a63026f42394809930000000000000001000000000000000000000000000000207f787b1eba07ba8e040c4ee51aec45ceca0b33082ebfdcb8e257ebb4a9dfd4cb000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000190000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000201dcf0c90a040b7d44aeece89de2caddf8d4241cd6302789300a382098b2275ed00000000000000010000000000000001000000000000002027f6be963ba9a68fb0cc1fa6dda0da09202e16643a07fa47b9e138f9c1c1c4d70000000000000001000000000000000100000000000000209161c5f561c46c1f9278bc201a1baad2f908ac10490c37cb8e0cd2207c0cd8690000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001500000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000204bd56642aaf3c573e5cd15126fb7e1312436ca036171e0a975756f614b9206ac0000000000000001000000000000000100000000000000209e0ce15915d4ea607803d57136fe385cce0e7cb13820a1be73c873adb2e8c7f200000000000000010000000000000000000000000000002001b76aa22668890adea47c01aecbb7765240964a9d6de3b23a711d1271a0b80100000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000150000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002061040707b37eebcd03ebc1f93a574d2b169116e92f5267dba73fd8e4f762e26e0000000000000001000000000000000100000000000000204b88a4d6281a737d17ce6ddb1a0fb418eb07a0ed9a80d6f472307649d6f1f7d000000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001500000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000204bd56642aaf3c573e5cd15126fb7e1312436ca036171e0a975756f614b9206ac0000000000000001000000000000000100000000000000209e0ce15915d4ea607803d57136fe385cce0e7cb13820a1be73c873adb2e8c7f200000000000000010000000000000000000000000000002001b76aa22668890adea47c01aecbb7765240964a9d6de3b23a711d1271a0b80100000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000150000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002061040707b37eebcd03ebc1f93a574d2b169116e92f5267dba73fd8e4f762e26e0000000000000001000000000000000100000000000000204b88a4d6281a737d17ce6ddb1a0fb418eb07a0ed9a80d6f472307649d6f1f7d000000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000002000000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020f4f54b18608f86b37f6a4fce419e18c64d9843b26ed1139133beed327349997f000000000000000100000000000000010000000000000020eaac2ba91abd5bedfb2645fd52534b0616c14c1d5a3ca5c8b57f170ce3a0123c0000000000000001000000000000000100000000000000201fbe6a1d0ec9dde7d25203e3597b6c9a6d52920b54bd402cbb49f44f820ecf2c0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000000000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020ebb76c613ec2138cc765f6029dd676279ca18928eacb0ca66a73239b16ebd3fc000000000000000100000000000000010000000000000020e435bd09932a6fdfff43746acb12d98720259cdc5ccdd25434bebb30b64793c9000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000001600000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000100000000000000205db25233e9e5bb53c0da3d320e373b024bf6bcd66fbde02c2bb035190a54dc2c00000000000000010000000000000000000000000000002032db83af7e8a03af6c4d6db50e40b3606ac274cd836c2557af03817657239bc200000000000000010000000000000000000000000000002001b76aa22668890adea47c01aecbb7765240964a9d6de3b23a711d1271a0b80100000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000160000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020c68f67732b556dafe5e6cc710dcf62a4f48d186e1177070f41403a3ea73eda7f00000000000000010000000000000000000000000000002034e8bb0c47b5f4c22eaf01dde0989cbdb99d29897ff4d4ce2af0816deae250d300000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000003300000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000000000000000000002061da684bf608d9580c0cc2133031db2a991bfa9e757d3c3e5e3b691d844523660000000000000001000000000000000000000000000000204646c98ef994930122f932e1bd39e2f66f536e8fa208d8193f7bdcf8e1f3af85000000000000000100000000000000010000000000000020aa484e5c5ecfcf8fb6454c4562f9b8bac41d0f819a7adf9df986cd01feaf6d0b0000000000000001000000000000000100000000000000200247efeb8213912082e29ea2ef805a95ec45bbf7e81039cae60e1e2cc9f70398000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000130000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020003c5181d177130a079dd07db243c1bffde9bba5d53b47eacfed53b2ce9c3681000000000000000100000000000000000000000000000020381d36f286eae8d50f3531344d0a48579eaf3200ed3706a450bb4146875685a1000000000000000100000000000000010000000000000020b3916ac3752cae2d46d7dcb3fc70a902dfce1044031504a7edcd60ef7d716cd200000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001a00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020ecfc09a1aa8d9ee5a8eb3132bd716973bc22a5e61e30e1cce19092f97e105bb500000000000000010000000000000000000000000000002053628602ff2c02ce8ad8fbebd918e7d3cafbdaddd3b7268770e57808957f1232000000000000000100000000000000010000000000000020decbd49a114a2ff486ec9d9a796b2980384089cf58329ce34c5e84e86d802607000000000000000100000000000000000000000000000020c70900e7458ba5ffca08cee0b301ca2a12c146e8d38de8b98842090913f710f5000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000001a0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020246ad833f257c0db5c611060ffd92b752323e555a9d3ce9241552b2ca48a1bc20000000000000001000000000000000000000000000000204efc73fd363945dfd0ec858227d4dabefc07b3b9a677a8b8b83cb33e300ca6be0000000000000001000000000000000100000000000000209161c5f561c46c1f9278bc201a1baad2f908ac10490c37cb8e0cd2207c0cd8690000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001000000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000001000000000000002015bfea6ff8fca02fe6793892b620093f76fdb61a7ae895af3ea034f0854923a6000000000000000100000000000000010000000000000020876b4a50c733ecf3750fffe1cca0eae370bd8cfd58e91a3cbe7739d0c66b0618000000000000000100000000000000010000000000000020f89fd4c78cc2c9dbc27d0fb1fd81eb8f093a104c5e427e12ad01a2838309868500000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000100000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020569d6d364fc742b43f44eaeb7f2eb7676c465bde82753ed68594a01654718419000000000000000100000000000000010000000000000020275586ebf233ef8f7846a29d521dcacb6ca189a9efd2f0be606a28aa8fd399ac000000000000000100000000000000010000000000000020b3916ac3752cae2d46d7dcb3fc70a902dfce1044031504a7edcd60ef7d716cd200000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001f00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000000000000000000002031b2732ef75d00a6a7c27ebeff1cd0d03f346720e4f4d828a34b8fa4f458f713000000000000000100000000000000000000000000000020f3d1cefaa411f3b25de14a2e127376387097ceead58b7e50b1af55f56df6d098000000000000000100000000000000000000000000000020b05d29b90323e11d1d321ebe0887a78c97dd38e44c2a432ee388b16d804a569a000000000000000100000000000000000000000000000020c70900e7458ba5ffca08cee0b301ca2a12c146e8d38de8b98842090913f710f5000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000001f0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020e410c26e823abe624be41eebe8e629b245ede97bdb7fdf6533f5c763055809d60000000000000001000000000000000000000000000000203f4b9ec9d01b32cc29af1299c145fb4383f202af59554929cf1d3b1287509e71000000000000000100000000000000000000000000000020b5529a20d217fadab6e859d7dab84da86df6c50f6e0c8c43db6e0bb4ebe47cf70000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001400000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020389c3ba00dfbcc90788c828e8faca19a83ccf2aa514c170a0288d97cd0ccfca30000000000000001000000000000000100000000000000209e0ce15915d4ea607803d57136fe385cce0e7cb13820a1be73c873adb2e8c7f200000000000000010000000000000000000000000000002001b76aa22668890adea47c01aecbb7765240964a9d6de3b23a711d1271a0b80100000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000140000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020c6ced8f29f221765860c4186984364c584f9025debf27105743b23409833ac510000000000000001000000000000000100000000000000204b88a4d6281a737d17ce6ddb1a0fb418eb07a0ed9a80d6f472307649d6f1f7d000000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000002f00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000000000000000000002089196285e51aec79c8c2915494e037406a6e0fe2cefb471c5d42076be26d98d80000000000000001000000000000000000000000000000205dc6f165eebd96352a4cb969a5dcfee0e66cc7785e9dbf852898a0a6da3154a3000000000000000100000000000000000000000000000020dae97944862e3b39439dbbafe16fec39dcfc3ef2523acc7c32e0c79e841986fe000000000000000100000000000000000000000000000020c719af11451e09db51b0e7e95bbcb366f977fe49929d06a1eb1dbba9ade869f200000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be7000000000000000f0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002035afcffd3e00318f678e350839d8b13b237a5c7251993091b28eb4d099034f2e0000000000000001000000000000000000000000000000205527bb338af53baea8cfccdd4caf87562d405c126925d5cf98425363c9497def00000000000000010000000000000000000000000000002057f7424c876eadf4612cc90ceb28d3c5c5cf304d091a0d7d1b90d874d9fa6f8e000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000002300000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000209876c7a7a7134b6f1445fb927fb6dac60b40dcbe3218ffbd304107df4fe4c0f90000000000000001000000000000000000000000000000203f2276f0dc08f8fb8b5640ce5560df918698947c0e2f9884cc7d91c2174663080000000000000001000000000000000100000000000000201fbe6a1d0ec9dde7d25203e3597b6c9a6d52920b54bd402cbb49f44f820ecf2c0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000030000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002002e34643c2144471f9f6145ad57f70ee183d493b2dc578179078c28be9ffec3b000000000000000100000000000000000000000000000020b43d7064ea2d8208d7be4788658e4735a84f9ec43344ef22d85e927a3e9a17f1000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000003b00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000201f56c1c2bb2a840a87ef49cdffa74be6e5022f1360438f218ca799e75d58a16c000000000000000100000000000000000000000000000020477206f63bbd21ec0c4004c23263e3fb437d7cde780b644d6fdd403b70224a4300000000000000010000000000000001000000000000002049771951b4589a4f75df5ea08351bc0a5eccbbebfaa0b96a63026f42394809930000000000000001000000000000000000000000000000207f787b1eba07ba8e040c4ee51aec45ceca0b33082ebfdcb8e257ebb4a9dfd4cb000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be7000000000000001b0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000205ac89c286b6f05cfaa11bf95f89f76175e3face799d5d16abb799e5995dbb30d0000000000000001000000000000000000000000000000204efc73fd363945dfd0ec858227d4dabefc07b3b9a677a8b8b83cb33e300ca6be0000000000000001000000000000000100000000000000209161c5f561c46c1f9278bc201a1baad2f908ac10490c37cb8e0cd2207c0cd8690000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000003100000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020e6688cecf8d676d3e9ed1b38f506d2d3ee6a1e7f7bf9b9b27c7c8ebbbbfbc3fe000000000000000100000000000000010000000000000020336878fe322f6d830c68420e0dc1b35d5a0c11b162dc5251cb07896d43953c40000000000000000100000000000000010000000000000020aa484e5c5ecfcf8fb6454c4562f9b8bac41d0f819a7adf9df986cd01feaf6d0b0000000000000001000000000000000100000000000000200247efeb8213912082e29ea2ef805a95ec45bbf7e81039cae60e1e2cc9f70398000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000110000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020ac6f02bfb2a76e494be82303631f5a999bd5a24943e56d5b8f152aa677de2f64000000000000000100000000000000010000000000000020275586ebf233ef8f7846a29d521dcacb6ca189a9efd2f0be606a28aa8fd399ac000000000000000100000000000000010000000000000020b3916ac3752cae2d46d7dcb3fc70a902dfce1044031504a7edcd60ef7d716cd200000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000003500000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020bbac30f26337d4923268a0bd7464bf9a67e22440161c9b69a21ae02b18d453990000000000000001000000000000000100000000000000200d9355c2e1d6759eaeaadf6b2d2b204ab011124cade48173b71f15910bd0c5950000000000000001000000000000000000000000000000203e91cf9fe968f301931a38865a0ef8edba05ddd912d2579a948fe706de6f6ec20000000000000001000000000000000100000000000000200247efeb8213912082e29ea2ef805a95ec45bbf7e81039cae60e1e2cc9f70398000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000150000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002061040707b37eebcd03ebc1f93a574d2b169116e92f5267dba73fd8e4f762e26e0000000000000001000000000000000100000000000000204b88a4d6281a737d17ce6ddb1a0fb418eb07a0ed9a80d6f472307649d6f1f7d000000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000003800000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000001000000000000002080db3e7e35fdc05c23f3f40679877aa15d35090e3f76f4bb40e0fabfb286c3ac0000000000000001000000000000000100000000000000202556b21fc161effaf655242fbec58230efd9a1ffaddb2e9252e9ca8c72b7a93000000000000000010000000000000001000000000000002049771951b4589a4f75df5ea08351bc0a5eccbbebfaa0b96a63026f42394809930000000000000001000000000000000000000000000000207f787b1eba07ba8e040c4ee51aec45ceca0b33082ebfdcb8e257ebb4a9dfd4cb000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000180000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000100000000000000205ae3d4135b3f2d058460864483f1cbe5f3b6bdc632e4e17a6c02125ee273a2ce00000000000000010000000000000001000000000000002027f6be963ba9a68fb0cc1fa6dda0da09202e16643a07fa47b9e138f9c1c1c4d70000000000000001000000000000000100000000000000209161c5f561c46c1f9278bc201a1baad2f908ac10490c37cb8e0cd2207c0cd8690000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000000a00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000100000000000000202e106a939c39ddc4226fb2936bac6f3356bb937b34f0463a1f2a1b809991fd91000000000000000100000000000000000000000000000020629bae8d629c777b0fecdcdf854d2b4aebf90e5dc949e41530065e7fa1960390000000000000000100000000000000010000000000000020f0c276f87c11a544c7dff23228f592c3b45684bf70982045e5db020d2ee3ff180000000000000001000000000000000000000000000000200da9d11aaea100332a200903d50e52aa35159a71dc619287204508beb8f25033000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000000a0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000001000000000000002023f2d7fdc7350dfefeca95e26a82ff86528d3b529d1899610c41522623ac9013000000000000000100000000000000000000000000000020bce3f006a8c4a90d1a2289eb8bd2a0b518768a264917075f53da7847511688fb0000000000000001000000000000000100000000000000201e7f0e6313dd3a48bccca00c1b7955c16cb8be0aef8b3ed3dc6c35130ff160af000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000001e00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020687a94d7253329d11552525353081457c3572af75a1d92bf530351e890a28b07000000000000000100000000000000000000000000000020f3d1cefaa411f3b25de14a2e127376387097ceead58b7e50b1af55f56df6d098000000000000000100000000000000000000000000000020b05d29b90323e11d1d321ebe0887a78c97dd38e44c2a432ee388b16d804a569a000000000000000100000000000000000000000000000020c70900e7458ba5ffca08cee0b301ca2a12c146e8d38de8b98842090913f710f5000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000001e0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000001000000000000002023e228d10c03f0dc24434a1c56874a28f2ee29e2a622efb9de8af20a1143dded0000000000000001000000000000000000000000000000203f4b9ec9d01b32cc29af1299c145fb4383f202af59554929cf1d3b1287509e71000000000000000100000000000000000000000000000020b5529a20d217fadab6e859d7dab84da86df6c50f6e0c8c43db6e0bb4ebe47cf70000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001500000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000204bd56642aaf3c573e5cd15126fb7e1312436ca036171e0a975756f614b9206ac0000000000000001000000000000000100000000000000209e0ce15915d4ea607803d57136fe385cce0e7cb13820a1be73c873adb2e8c7f200000000000000010000000000000000000000000000002001b76aa22668890adea47c01aecbb7765240964a9d6de3b23a711d1271a0b80100000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000150000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002061040707b37eebcd03ebc1f93a574d2b169116e92f5267dba73fd8e4f762e26e0000000000000001000000000000000100000000000000204b88a4d6281a737d17ce6ddb1a0fb418eb07a0ed9a80d6f472307649d6f1f7d000000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000000700000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020a05a3df24e3db240ce5264d833c60775f5cd42a9af73b33bda22444fc7cfe5240000000000000001000000000000000000000000000000202479d55ac3ebcfce8bcef04f25a66095f0e177d75de948b79a974e89ce18122500000000000000010000000000000000000000000000002062d1c5e4b7ac49ee1c7713f61bbadf7e25b2f04bd22ca8f4e9ae534b27d49e6e000000000000000100000000000000010000000000000020c4604cb8be32d18b87b7ba1b59170cd0016943ec460edd6ef1ac5700279c55ac000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000070000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020111d546f48ae7364248b22c362b27b2d74053554905fcea72cb00eb4bfe3e4620000000000000001000000000000000000000000000000203a5792f3983b8a669190dca7e5659ab8b5822c3fa8a58a541a5cb3562d616bd60000000000000001000000000000000000000000000000207ef776b622132973cde5e96a32f68fa0775ac3f4a7ac0d1cb6b14e7458c2c3a0000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000002500000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020d8ba2670290c2b526ed7c2b0e5b76fc8ea9fe53387368f8df6f91c79dea821ab000000000000000100000000000000010000000000000020266177fdcc4d675568f2cf052c7330dd20c5ba8ea8ed31a8f8ca6b52ba5126bb00000000000000010000000000000000000000000000002037aee6114b0e64049396c6974301981cc460b03b844091c0c8331ea0fd369b4f0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000050000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020297b949a7036ae60c54a97ea10d725842cd327dd5fc484af898fb0e154085b490000000000000001000000000000000100000000000000207c89f71843664bf97f22261fc06f08da09e4584d95f32099263db21dece008f10000000000000001000000000000000000000000000000207ef776b622132973cde5e96a32f68fa0775ac3f4a7ac0d1cb6b14e7458c2c3a0000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000003100000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020e6688cecf8d676d3e9ed1b38f506d2d3ee6a1e7f7bf9b9b27c7c8ebbbbfbc3fe000000000000000100000000000000010000000000000020336878fe322f6d830c68420e0dc1b35d5a0c11b162dc5251cb07896d43953c40000000000000000100000000000000010000000000000020aa484e5c5ecfcf8fb6454c4562f9b8bac41d0f819a7adf9df986cd01feaf6d0b0000000000000001000000000000000100000000000000200247efeb8213912082e29ea2ef805a95ec45bbf7e81039cae60e1e2cc9f70398000000000000000100000000000000000000000000000020341d651035e8af56ef3eb04b8092ff8a9e98be3fc659ac423cd204e9e75c5bdc00000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000110000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020ac6f02bfb2a76e494be82303631f5a999bd5a24943e56d5b8f152aa677de2f64000000000000000100000000000000010000000000000020275586ebf233ef8f7846a29d521dcacb6ca189a9efd2f0be606a28aa8fd399ac000000000000000100000000000000010000000000000020b3916ac3752cae2d46d7dcb3fc70a902dfce1044031504a7edcd60ef7d716cd200000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001d00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000206f2cfaabd2028464e29f5299792065dc5db1d213db1f4011753464da9c630937000000000000000100000000000000010000000000000020e196d6324776c8342202907ff780e58c7cefbd2a85e2f70cfd5770f202307d97000000000000000100000000000000000000000000000020b05d29b90323e11d1d321ebe0887a78c97dd38e44c2a432ee388b16d804a569a000000000000000100000000000000000000000000000020c70900e7458ba5ffca08cee0b301ca2a12c146e8d38de8b98842090913f710f5000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000001d0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000209f865945db83e4b37fb2c6b6337a566479d6573bcce817b7669722e615fa5bf50000000000000001000000000000000100000000000000203cedf7f5a6e7e2a5ace8729fabf1d7933b10f8a0ad1e5e2ea8831795cf5ebefb000000000000000100000000000000000000000000000020b5529a20d217fadab6e859d7dab84da86df6c50f6e0c8c43db6e0bb4ebe47cf70000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001d00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000206f2cfaabd2028464e29f5299792065dc5db1d213db1f4011753464da9c630937000000000000000100000000000000010000000000000020e196d6324776c8342202907ff780e58c7cefbd2a85e2f70cfd5770f202307d97000000000000000100000000000000000000000000000020b05d29b90323e11d1d321ebe0887a78c97dd38e44c2a432ee388b16d804a569a000000000000000100000000000000000000000000000020c70900e7458ba5ffca08cee0b301ca2a12c146e8d38de8b98842090913f710f5000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000001d0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000209f865945db83e4b37fb2c6b6337a566479d6573bcce817b7669722e615fa5bf50000000000000001000000000000000100000000000000203cedf7f5a6e7e2a5ace8729fabf1d7933b10f8a0ad1e5e2ea8831795cf5ebefb000000000000000100000000000000000000000000000020b5529a20d217fadab6e859d7dab84da86df6c50f6e0c8c43db6e0bb4ebe47cf70000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000000100000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000202909624f315a60a3ec233407bbae0b08731680fb803e3811cf43ad5565f5ed220000000000000001000000000000000100000000000000207d794f712ac6e85c0a1f085d46b6957a222bf1367977dd1ba8fdccef925944af000000000000000100000000000000010000000000000020ae2da6c12c5d162a3ef339a55f47d09290d11febadeb8a3f8a5eac666d7553d0000000000000000100000000000000010000000000000020c4604cb8be32d18b87b7ba1b59170cd0016943ec460edd6ef1ac5700279c55ac000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000010000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000204ffcc22c01ec89a91054ab22f4a6d8c255900fc815ae761f6b79cbe12ddc5505000000000000000100000000000000010000000000000020e435bd09932a6fdfff43746acb12d98720259cdc5ccdd25434bebb30b64793c9000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000000300000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020e7d128862aadbe4f99d50b9c5db8ffad7d032842f105055b53d275a596ccc65e00000000000000010000000000000000000000000000002013512b8bba2360869ac557865e2084fb0e839c7c241e547ea36a08da5afc0323000000000000000100000000000000010000000000000020ae2da6c12c5d162a3ef339a55f47d09290d11febadeb8a3f8a5eac666d7553d0000000000000000100000000000000010000000000000020c4604cb8be32d18b87b7ba1b59170cd0016943ec460edd6ef1ac5700279c55ac000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000030000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002002e34643c2144471f9f6145ad57f70ee183d493b2dc578179078c28be9ffec3b000000000000000100000000000000000000000000000020b43d7064ea2d8208d7be4788658e4735a84f9ec43344ef22d85e927a3e9a17f1000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000000800000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000100000000000000208f4914df53c50f650eaeb1e2644816a4d6571c8eadc34d0851795c3f6011fdb00000000000000001000000000000000100000000000000206f6f08120957917775f7e12d4d9fd5057d4ceeffb3313e9087de7e748a235134000000000000000100000000000000010000000000000020f0c276f87c11a544c7dff23228f592c3b45684bf70982045e5db020d2ee3ff180000000000000001000000000000000000000000000000200da9d11aaea100332a200903d50e52aa35159a71dc619287204508beb8f25033000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000080000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000010000000000000020fdfdce8038e314379ee4ef9d7435ac3bb67f81a42222ada24ec0b5edc53504e4000000000000000100000000000000010000000000000020ccea233de53953c0a0be4befba3181d87583ecf3ee74bc0c1b609c57583968bf0000000000000001000000000000000100000000000000201e7f0e6313dd3a48bccca00c1b7955c16cb8be0aef8b3ed3dc6c35130ff160af000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000002900000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000000000000000000002071d75f39458987845dcf942a0501e1d0a428e36ebd7c9f38bc602456582efb3b0000000000000001000000000000000100000000000000206201f5e1adb7b50a1b3c6acc1b1392317c003234b4583e38e50f392b58216883000000000000000100000000000000010000000000000020a5e13859e3a8080939d0a2a7780843b0f6be0d291fdd0c09d166df1c8435fd34000000000000000100000000000000000000000000000020c719af11451e09db51b0e7e95bbcb366f977fe49929d06a1eb1dbba9ade869f200000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000090000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020e1c255daaa951116cdbc9d3e573d3cc9d0809bc3de7dbfc5e1243febc3afb770000000000000000100000000000000010000000000000020ccea233de53953c0a0be4befba3181d87583ecf3ee74bc0c1b609c57583968bf0000000000000001000000000000000100000000000000201e7f0e6313dd3a48bccca00c1b7955c16cb8be0aef8b3ed3dc6c35130ff160af000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000000d00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000000000000000000020e19d985edcf88f77b87ff3034ac9e781e3bba2e8cdaae6105322f29f7cd26b7800000000000000010000000000000001000000000000002052bb7866ef5b2878c3a72eaa9b66f9a42101fee01719ad0257cfd4155c4fd67d000000000000000100000000000000000000000000000020a6fbf8b597859fe7801b57d7295b57ab889b52c97b4a3e8ba1fe46be478d7ca60000000000000001000000000000000000000000000000200da9d11aaea100332a200903d50e52aa35159a71dc619287204508beb8f25033000000000000000100000000000000010000000000000020abc911f24faf622896006bddac6f447414b585d2ae78c0de86550319adfa6ba100000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de4000000000000000d0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000208ca9ad4c8f2b48c0e78e288cad4a1e1e118896618e60e116cac861bda85047c40000000000000001000000000000000100000000000000200b3f292d9180e48caf9240831d1b97177d9961550cf42b9a4d497a935b987f8800000000000000010000000000000000000000000000002057f7424c876eadf4612cc90ceb28d3c5c5cf304d091a0d7d1b90d874d9fa6f8e000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000002c00000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020990a05747f2b2a9f2bad4e43c29f7d54c683bfddcc1dca0fe45fdee1bc36c906000000000000000100000000000000010000000000000020518fb00e146a7b75e04903228f53bc837ff1750989635ede283c0901589a9d84000000000000000100000000000000000000000000000020dae97944862e3b39439dbbafe16fec39dcfc3ef2523acc7c32e0c79e841986fe000000000000000100000000000000000000000000000020c719af11451e09db51b0e7e95bbcb366f977fe49929d06a1eb1dbba9ade869f200000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be7000000000000000c0000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000100000000000000205ce7bfbb83bd467dfa4292d88c84d9118a0a3eec8c8a3ce9189fede5772914af0000000000000001000000000000000100000000000000200b3f292d9180e48caf9240831d1b97177d9961550cf42b9a4d497a935b987f8800000000000000010000000000000000000000000000002057f7424c876eadf4612cc90ceb28d3c5c5cf304d091a0d7d1b90d874d9fa6f8e000000000000000100000000000000000000000000000020c6ac9586a5a315e9ce7efb473123de78e6943be10030817ad46f29947c4f461f000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000001800000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e90000000000000006000000000000000100000000000000010000000000000020cf915e8779c55df2a5aba19dc39cf7fa44f7bfa6115db7c874f75102f5109c32000000000000000100000000000000010000000000000020b4ca5f93e3e6b332af3c77c76080f161aaf53c14dec5c04e1f4fe43375a6d58d000000000000000100000000000000010000000000000020decbd49a114a2ff486ec9d9a796b2980384089cf58329ce34c5e84e86d802607000000000000000100000000000000000000000000000020c70900e7458ba5ffca08cee0b301ca2a12c146e8d38de8b98842090913f710f5000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000180000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000100000000000000205ae3d4135b3f2d058460864483f1cbe5f3b6bdc632e4e17a6c02125ee273a2ce00000000000000010000000000000001000000000000002027f6be963ba9a68fb0cc1fa6dda0da09202e16643a07fa47b9e138f9c1c1c4d70000000000000001000000000000000100000000000000209161c5f561c46c1f9278bc201a1baad2f908ac10490c37cb8e0cd2207c0cd8690000000000000001000000000000000000000000000000205a0ee6b1b5a7910e92c7a5e35549a549beb666c8dc6cdb9739435f82bdcf952d00000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000002100000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000207ed7024cfb851e729174b4bebcb3b43b7e74c7bf66e598fab0fe7503c28e28b9000000000000000100000000000000010000000000000020eaac2ba91abd5bedfb2645fd52534b0616c14c1d5a3ca5c8b57f170ce3a0123c0000000000000001000000000000000100000000000000201fbe6a1d0ec9dde7d25203e3597b6c9a6d52920b54bd402cbb49f44f820ecf2c0000000000000001000000000000000100000000000000205af8bd106a023dca58d9a2c1bf942eb3d9260592c7e617bf3803dc794a32ef1000000000000000010000000000000001000000000000002022bf8b04326101ffd27638a46eb4cb6dede7d786c49f4991191e5801277902d400000000000000010000000000000000000000000000002048e3f0e8c1c6a12ab7f2c7cc84d305e3dd1184779a7bf9e67edf014ce1888be700000000000000010000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff25900000000000000050000000000000001000000000000000000000000000000204ffcc22c01ec89a91054ab22f4a6d8c255900fc815ae761f6b79cbe12ddc5505000000000000000100000000000000010000000000000020e435bd09932a6fdfff43746acb12d98720259cdc5ccdd25434bebb30b64793c9000000000000000100000000000000010000000000000020a379eef4ebc6c053f9ebce7246a926491170464546aad4ee25049465b0409d3b000000000000000100000000000000010000000000000020b8b8d6428fc5a3713842905985e54c13a460d972a6fedc366bd72b9cf28b4717000000000000000100000000000000010000000000000020d20af35878f408dd2bc1cea17dbc1762b709d597db0248b2075e7fc4e78f42c3000000000000001300000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e9000000000000000600000000000000010000000000000000000000000000002088f5c5d2fda12d4c8cf34cdb62aa095eb07a8da108b2ba4e7e4dd07f871b636f000000000000000100000000000000000000000000000020635cb57885dbdeabbc4503774433cce56d21f7bdaa7ef016bf082b6dca48b58f000000000000000100000000000000010000000000000020f89fd4c78cc2c9dbc27d0fb1fd81eb8f093a104c5e427e12ad01a2838309868500000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000130000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff2590000000000000005000000000000000100000000000000000000000000000020003c5181d177130a079dd07db243c1bffde9bba5d53b47eacfed53b2ce9c3681000000000000000100000000000000000000000000000020381d36f286eae8d50f3531344d0a48579eaf3200ed3706a450bb4146875685a1000000000000000100000000000000010000000000000020b3916ac3752cae2d46d7dcb3fc70a902dfce1044031504a7edcd60ef7d716cd200000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000001500000000000000200fa4fd2d752a88dd7848e6c4af9b8212776b146568160ab2061a3ea17c30a8e900000000000000060000000000000001000000000000000000000000000000204bd56642aaf3c573e5cd15126fb7e1312436ca036171e0a975756f614b9206ac0000000000000001000000000000000100000000000000209e0ce15915d4ea607803d57136fe385cce0e7cb13820a1be73c873adb2e8c7f200000000000000010000000000000000000000000000002001b76aa22668890adea47c01aecbb7765240964a9d6de3b23a711d1271a0b80100000000000000010000000000000001000000000000002081c445d198d3219e5606d548b6529d92cf1f29c4b029656318db8e3c519d4b42000000000000000100000000000000000000000000000020634a35930e45cc65ead1f9a5a97571f7b9cb8cb7dd174df5a673ab15cfe278f500000000000000010000000000000001000000000000002042e2802a35ec36934e3ef20aef9f6dbc0546c0e7f57d5176ebdf552842d65de400000000000000150000000000000020e4d9f8bef785faa96bbd4295787302dbe7e6793cc43a3ecbfacff7b6886ff259000000000000000500000000000000010000000000000000000000000000002061040707b37eebcd03ebc1f93a574d2b169116e92f5267dba73fd8e4f762e26e0000000000000001000000000000000100000000000000204b88a4d6281a737d17ce6ddb1a0fb418eb07a0ed9a80d6f472307649d6f1f7d000000000000000010000000000000000000000000000002078033d92f40a38ac4cc7886e9667aaded348dd6ee664101a06b369949493fbb900000000000000010000000000000001000000000000002076f8285d5798d04f943c108e25e2494e308558ffb1d5278aa98230ea5a32bc1800000000000000010000000000000000000000000000002007acb72256ce201d4bbe651bb30cb8a9b126a9e358fb10f1e15a44d7a1b7454e000000000000000228228fed2c0f903d96f5d367aaf715f5b2bc95479b820de3144394fd62d2308d2c7e51183a608e4fd828081f1e9db89e717e06d74ae3130535d95950a7c3617066348cbc \ No newline at end of file diff --git a/contracts/zkllvm/merkle_tree_poseidon/circuit_params.json b/contracts/zkllvm/merkle_tree_poseidon/circuit_params.json deleted file mode 100644 index df81ede..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/circuit_params.json +++ /dev/null @@ -1,23 +0,0 @@ -{ "_test_name":"Test name", - "arithmetization_params":[15,5,5,30], - "columns_rotations":[[0,1],[0,1],[0,1],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]], - "modulus":28948022309329048855892746252171976963363056481941560715954676764349967630337, - "r":8, - "m":2, - "lambda":2, - "batches_num":4, - "step_list":[1,1,1,1,1,1,1,1], - "D_omegas":[ - 22954361264956099995527581168615143754787441159030650146191365293282410739685, - 23692685744005816481424929253249866475360293751445976741406164118468705843520, - 7356716530956153652314774863381845254278968224778478050456563329565810467774, - 17166126583027276163107155648953851600645935739886150467584901586847365754678, - 3612152772817685532768635636100598085437510685224817206515049967552954106764, - 14450201850503471296781915119640920297985789873634237091629829669980153907901, - 199455130043951077247265858823823987229570523056509026484192158816218200659, - 24760239192664116622385963963284001971067308018068707868888628426778644166363 - ], - "rows_amount":512, - "max_degree":511, - "omega":22954361264956099995527581168615143754787441159030650146191365293282410739685 -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate0.sol b/contracts/zkllvm/merkle_tree_poseidon/gate0.sol deleted file mode 100644 index 694c144..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate0.sol +++ /dev/null @@ -1,1127 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library merkle_tree_poseidon_gate0{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xa0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - merkle_tree_poseidon_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - //Gate0 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,0, local_vars) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(0,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate1 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(1,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate2 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x113aa632e5e0d0977603751a0f88a80e1f9334b972d5301c3329337f6c9a64ba - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1aac4f73877aae401f9b26e3e814e1249be470c9dfd78209e67a28570f55c454 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1a58f904f0ca4d9f490d729e1f7d2c9593307d1a1473b7b827857a8dd40501b3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x83fd7e02599b33dbb72f182288555fbad24487a8eb89e5caea0363dc11c6461 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2bfb77cded6e66747a7d153114c05635e8c5ad9764f9a1df3e8307dcbfa6c94b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x58c01ca4e4229947f6552a154b84a37e74551fe8986c63be49057d21ee96c89 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1e483d4ca0288ef4f9dba8ee0d93f9ca4e647b172e3c1be125c33b4db972841b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x27fc5f972da010d109ad375b7b855e75f875109d8d557944f5dfca9992f6352a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x16e219e3a19d97dec88d3081fc37f3d19f07e17fb08893d2c7d489dd44268db6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1cffbc5f23d20549c9f8341e463b7d02490e9b0c1c8668c0f42c0263454152ee - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1e750885fa3afd2c05cebb1030b85f0d821d746348408af830d6da7818789b0d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1dc1d26b3e882d81f8e2aa8d62ec564e0bb13c8b06805e85aeed2b5e04af9eea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x15e7da83ea52649017483a52ded6c6b1921a5cc40665c0294c4a3b6751a095c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x35908458a0de9bfc2d1b6bfb962e66b8d7e0ee9d113815b7986f51fc9ea72309 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x29641be39dd86a91010a4b32219a2ff2c4419a85a7d43b5467cbd47ea46c1ce3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(2,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate3 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x11d70af565aa2d16e88bf7cf8d8cbabbe0c86ff1ec4e3d1a19119c1c8d70199e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x30212072579ab5dd7cefbf3038bbcdb9d72f5a158323fb8b4fa8b0336fd0d7e8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3b95c12679c2d28c622743616f58b902812d279938ac3a57be0e018cbd30fb1f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1e61f74b9f3cfa4bd798f453547953e18dee91a490799ce57f7eb54b064d128b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x744c95ed14313b2b178d714bc1c0ed5b412e6fc6806c5a2979fe2dabdb19d37 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x21655c01da2ee933042957033251f55666304ef85dce6404943e967ba041211b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3cf0cc128f25b3d4047bb00e58aa747ea527d5fb2ec657b249ff7c9cb82a0e76 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3d7d4fbec8cafb6a54be830d3b8c7640ba2a5f05471f5ae48db239904341b450 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x364ead7215d14a42696fa47700fa020c415477fdebb927664fd984540137da11 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xff7c2444a154c6cee3857402a1aaa9827c04dc7a096fffb8ada9412fc261090 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3e815318c309839eeddc6340ae213f190d584aa177712ffafb6bb52e5a432f6d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x850e2170ab8a45e9a46f072a9797c2ad4253b028aba718765bc61abe7bd7f6a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x29008a6d7c95bacbf1390d4f0edd8c931e55dc43c939fff8f47289ae5f1990b0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x25a67a2b4ca62fc219f4d12544e7ac0babb539104868e997f65b60e4b103c028 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1aa562b41464a15e754687d4e544d9805c8f25427e96a31e4be69a541e1e068c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(3,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - - } - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate10.sol b/contracts/zkllvm/merkle_tree_poseidon/gate10.sol deleted file mode 100644 index 1f2f997..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate10.sol +++ /dev/null @@ -1,1098 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library merkle_tree_poseidon_gate10{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xa0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - merkle_tree_poseidon_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - //Gate10 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1448b44e7ac8dccb5b10a092e71d131ae1bfb2d104b49b4404761f71f416de82 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x99daf016d73ba272a55ca0f5ebd8ab71a475ca2853cdf804092081f7ae4ddfd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x279707ee7b7d394b5a59e57e375535ed98f3815fe855bed796ff9776423cb510 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3486fe398f1e28a28d914772fff6af4c58e2a8046282d4824d51293ed0874b2e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3cd3b427548f1e0da508850a822cbf373b7df7fa2987103e95fbeb86246f4791 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x231c924ce01915c326cf724655bc5750c604f00b62fc5d1d983c4938793f5477 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x19a691561e6ea1ac25cb86162ec3c36e1d40b6b76b1aa10a99c0889701b48393 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xf0d695d967975803570a4e1d963fee9f1f8a5e4dff75ef48abbfbe32c592a25 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3da7769e1008768278149538dcaf1060cfe292b43d7ac7e50792979f02e6862c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x295b61968de17f96f2be1f9dd61643d2674cf65014946592be08ab93abf629d6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x28535fd3fae03527f8c30298def32bde81510710d02b4cdfbf251af93a25842 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x16642b758bf4886ff8ad97ced547f8d3b0047b1663097975b6d8fefd6ae7b84d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2e59647982615dd13e4d0d71699e8ed63ed7a94d5f64e6afbcc2ee336f8d6fd6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1a43e50c6e0c3e0dd7b56a256d4a77c3070c5882be29a068b1862122dd259b33 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x9e54c7bc0b272252121c627d44e57ef82bce2225f3b7d8c62cf4cb46a21f457 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(10,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate11 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x710c54a49e3ee85cb9a5fe8563745b3ffd03f47e96de4c99257678c0b622ba6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x66d07c0d9ebc24242cca9fb5e5eb250febbb4bfe4b57525042e8196f5551df2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xafd78688148e37e4ef132fc655266307859145bc64b2deb128f132505e239c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x504a43ed9fdfa79233345cd22fab3267e52e0c73eb680451900e83b25682914 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x28d483d27181b4f92e7c5da8a486f8b651af8ca772e8f12109d429c08d621990 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x114ac01c5d8797758fb6ba961ab5f0f2fbad634d4284615ca459c82b0982a81d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3c8a51a94726cef2aac12882bf92123c320d5aa1d7318750aac2d535f874afcc - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x22b65f2ac43d66c340e04a2e256448903ddc28ca336724dbeb6ddc30e83e10c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2cd2e8478354928f82205e0fe20e8db54ecd41127f88a9fba2190ab6806acea1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x39d25ad7f6b727393b5338195e55bde112a7d782650bb2a698cc72a1198aa07c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x35b4b2a321ab568b15b1a811becd2d54fd35d5fb1733c844dd6e0fcfe5227f08 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xca90e04153b6c33548ad48f44127de33dad333a76c82170cbb434f90079b170 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3bd8de175633cdaa87ae014f1fe6f3a22651cde07a05259d1ac7f2260075bfa8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3ac264d9cc000ce35b03a8db3194bbddf0c5702e193461487744c1a53208b750 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1982693515021a242c24e0f9974f6332cf1c760be8f864aa2eb4ced304b37fe5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(11,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - - } - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate12.sol b/contracts/zkllvm/merkle_tree_poseidon/gate12.sol deleted file mode 100644 index 11927ac..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate12.sol +++ /dev/null @@ -1,583 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library merkle_tree_poseidon_gate12{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xa0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - merkle_tree_poseidon_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - //Gate12 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x6ce96688c89efe6c3c0600302b1dc2c979a862e8db740494255bcdce9af5937 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x26e1c88b9d679a9c0254064dcad60837d5db78f0784b45768fc1668dc8867e06 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1f0765068dd086379f2dfa65f13df630e7cd734f01b42e6543408abd18c00c28 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x235a9751224d10c6e58387130efb2cd2a9eafc5ac3737ae6118f3d99b582e1f6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1a21645f5c8b8d3c4b3f463c43da3440a96d807a5253aa348ae271e3fdeedae5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xc6c2142c72cee77e38a7c411f819fa131613c9918fc6c4f6c06df602a971e12 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3c720d02e75728a9c7f9556266b59ee0be193cc295c4273e5ab47472baea3a50 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3a39afc00e11ab70dbca526eb728046b59246df30058b3c81ec6c9e88092afe5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2fb377292f97d27d2c299b7d9236a9a27144f6db5ebd68c46a7598a6757d5d56 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x135529ef73f611951187ae4b5d2d2c485e7c5ca5614cf553520da02d5b539d76 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x35a8242b3cd87d937568438d7a06b43246b03784d4dde188d46fc06455fcac0e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3eaaad06edbce747bcc2fe44ac45fb48079fa42ebc94002b5fd46b30416f707 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x31ef3ef3441e8e856bbe39d663b03f7860247870345269dfb2c0107709dc4aee - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2174dab3400d36d57c200e8d737e22dd78ef89a2fb037c68c2ed2cc0478656d1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x27ed24328f3bbf9effa844022f33b2ce504ba383a53343e357688328c0d4dcaf - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(12,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - - } - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate4.sol b/contracts/zkllvm/merkle_tree_poseidon/gate4.sol deleted file mode 100644 index 4f59e81..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate4.sol +++ /dev/null @@ -1,1098 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library merkle_tree_poseidon_gate4{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xa0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - merkle_tree_poseidon_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - //Gate4 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xb57260badff5653d7fde8ed417e16fa8bcaeca3ff415a361d690dcda1346c97 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3686aa934c12341b0cc122df6b0ebbc4d6f7d237b19cb6c014c94964465d2327 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x15b2fd73f652c63cf9994874ba30522afaa736c2d1b0908126adce8686d8d9ad - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x33ce497097af4c428e01b17667b1d378e0f17500b45aaa52eabbede98feab4ce - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x25d835f46ac2c2459471fe30f828939f08257be86a1ef9c0d90943c8ab0d1271 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2f651683da29fdbd47928e96e692dded2fdddfa929739ee2619bc553facfce81 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x96736cd0d5e9084465453f7613d218658b0407a98c480b35c7ddd2257c5263d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x381da1f537045c23ec9f07565605f4214437c6f92a3c483e16268ffcd521941 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x103afdc3a1b512a5582035f0ab6d0e49329b6862d33e2fbb75b81df8737a7588 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x13edb8ca0c06dbab904b0205d5fe71fc2d163528666479491372a3888125989c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2d378a36486a6e5306fcc07493e1ca8efb824dd81604895cb853adac5cc7ddb0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3256ca176a7a82c658247b895125a5b0f29e79665f9f1dbc548bcef77aaad74 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1e7148a905a0e2060e146dd107f4f7adc9bf1f54d2bebc1a8b3e1bda7ea278a8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1c430efcd6a8fea10e8e044bcd6435f3ca710076b71dd326e8aa8d1dcfe3043b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x28b8b3c495643efa8209b461b29d45245a531280cb75a1547d0dcb8afa284316 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(4,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate5 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3e67d93f11dd68d214be8ba2c42bed3d74094ce3b5edadbacf44bfff005c2ab1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xf434e82029dd3b90cd8a0967ce649729a2fda2bd2bf0bd83a57175a43bc1058 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x427e93deb399befdd63042e0b5c5bd1b837160848785e11dcb1e4e8d00d36b6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x376bc13fe260460bc37bf8a88c76864edb82e22a712a78326eda481cba9cc160 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x198f4073fe7dd1ce38f689d9627612a765ccebcc6c2ec7d5b9a424f4674a81ba - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x322ac4bea665187242c197649a14335b8e569e671bd69a2cd1d323b14dfbf808 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x397e882d6ca7a1f4737189575a9a3797882910155f9d5189787226caac0dfc3e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xade90b8efbc799123cdb5272730f3388f481eeb49c5adfcae66b5a7e294d30c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2029104dac9401ee13c8c91808bb73fe371c3e6bc79100d56760acfefb9b0952 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1367d38cadefdd7603e4b72503261c33ebf93eb8e4f59ad47752403deffcc39a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xad08173899d27924638dd2b2f88877a9ad4e0c959f1433f5e1961587ae3e4bc - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x271c3f3e355a1c129911e5490aa5a37fbe6dcf4bd49eb14055e9dfa5eb61c82c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xedb4ed214c82344c2693e5f72af8adc3f38951b77b79f5c6b8285c97bdd1523 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2bc40f210cebc814def6adff2d2bf9193cd420c8a10f61dadf6d6f7bcdea2367 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x214116debc0cd4b062656f529d47b7c38ad218858df931fc2d4e9da2710c70ea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(5,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - - } - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate6.sol b/contracts/zkllvm/merkle_tree_poseidon/gate6.sol deleted file mode 100644 index 775820a..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate6.sol +++ /dev/null @@ -1,1098 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library merkle_tree_poseidon_gate6{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xa0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - merkle_tree_poseidon_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - //Gate6 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3009386b52e5055b6bf772a071193b84285e68e8c1c6d04bf9eb3e04ec7c1416 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2f5ef53c118f839d17420d324b653d32e3d2c07eecdd7cbbc0da152db7fb0ea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x229efeb32c10f2782fc83a94205c8f58eef3df9ec21e4c02616e6082ce7fe370 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2dc1e7a4d1380f8daf853e1b18bca7646fea0920c2bec67d1b4bc765a06f3adc - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xf487f3f3e34f9f69dc8cd7db38afe8278ccfd1f8b4443f3de453ce31424130f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2204c7fe4851b1df6097e6a9ed69a391eaa3ab9f175e0ade523f3a97290a5012 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x10211bd7fa4d88bf9b169c38beaadaaa20ac02ea76bf1ea90db4ffcee0fb6ad9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xe4d49a3bceded12c90225aca726f32656f4cf07758d01febcb7cba7b81b5dd6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x21c35fcc27bec49772485abc19d53d198c01d89ac14bc17e9aca36cafce61f12 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x33710ee97bdafd73ad5cd26c06ceceac3d17fc0aaaee3666cf2360d5cf252bcf - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x8738cc8c5c95a126b5cb08a1a218585c0beaecbf5cc0c202a130e1d7aad9c73 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xde75113dffb75a9bfea170dde9a8041d9aaf4f7315707c01690b67757a3d0bd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xced10834452cebcf0df0cf6ce4f8fc885cf875ff12732c58c5a68c0089886b3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xa9bb658ec7c98b39f805ce21273f3f2f5259db645e66049405e6354d245b875 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x333772e36eb7e2acdee8b1aa4b64db7aba1a1101469f45e982b310304a824ca8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(6,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate7 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x22103342cc8bf7fc52d7b43b7546a60cd88d4ae331d9325ad3a2e5596f33cff2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x12d9c33d1650ed92897261e2d40d340d01e2da78ec9ba48b9bbbc529118fcb03 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2ee1ceb24904e5d71dbefd731c2cb83afcedf5c09e3bd0c1012d36d1b8616964 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3d8bf6bfe16dffe2bcb345d797161c8eb214ff39d21fd52c668edd71aec0bac3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1b57ad420634d570122a17a5a67982b70b8df3802bed743a94afefe58f000061 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1fa2e4f11ca609de7ba539b0081c7c5c36c4b8bedf2392c621e65ed1b8cd6293 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1a3cd81d336c1390f0dc4a1be36ce40463fa86218bf75669d010b71167d206fe - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x620c1dd2dd4f64bd9a25af10e8a6f633aa809f073b3192b7c35227c77b67d48 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x364f72a77ac27536f73a4eb1a1479ee4dc52895163b0403b9f9d7dde03205600 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x21319dc8b28618e824b59706322550ad29be49c295d73827d36b554263a85f5b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x42f7648d85f11f71d9c05a1ca49e7249a6edc2e0608e4a5b52fe78964605e40 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x12158a0c85263036b36aebe404b8e633ab66439493bb4bd8611df7e584d502 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x9205e75645e4e6bdd7b6b575350f9975702ec52346c56c9e71e6daab2f19a34 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2e616724c0b6328034c4f9cda98263357cfd0deec832e4e3a3b0cb5dbe6ce2f5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2eff4de3cf9b8a27e94c10328a3c51ecc5f1ebbf43e056f0db91b1a7192fd3e8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(7,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - - } - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate8.sol b/contracts/zkllvm/merkle_tree_poseidon/gate8.sol deleted file mode 100644 index 5cf993e..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate8.sol +++ /dev/null @@ -1,1098 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library merkle_tree_poseidon_gate8{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xa0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - merkle_tree_poseidon_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - //Gate8 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2a86e064415dec6c8df737d86b1499810cc798bfa396ae72191de52e1b15aee8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x252414a163b2aea1302daf1411a95d580b5b5abe407724dad781ee674caf419d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2040b8c77bb565db6513dac171bd9f1b773cb6901f234e1b786e226bc311343e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xbe756d6aa913ae5f79ba644619c57de4e3f606f3ac9647ffe394d3cbcb150f3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x36bf94a3c50fd6f0668bfa2f3ae4196add96e6bb34be0e6a25c056e8cd170063 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1c131a28f4c733362bc326dc1a1c1d09f52911bf780b0a19a091c30bcc90a43a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x27ad2a8b1b92c8f5f4e19b093be11472e1770236e4a6cfb6330e01f48198dcb4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x359a8fd833172b0dc715769221d8c48aea919094bf168cb4e5b49354d74f3171 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xb7d0675b913ca7ef7044497026b070d679f5c89cd9dd7896ea822a7aee0a5d4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x9d0e9b0736fa4cca5934089ece2dbd200eb78132a131ae6eca072b13ab9c13 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x381c680afc063e315fd7b9a4d6af15bbd730d31153e52374fa8a9e967a96b211 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3bfa0e038ee78dc8c2914af5f60404fa6fd65e1b68980b632e3f7ed624e8578b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x341f7b714c1f638fd8eef527bd3afdbc05aee95abec8b5149c2e69985da9a740 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x19487877026753fdf4536d2f1886d44a225992457174b1257b94e15ca2645791 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x702ace72c6faa37d0106422cccea5ac0637d4c5cae038b32927a9d9aa205a8e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(8,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - //Gate9 - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x7f42fc47bf3b73745c7cf1835318d0707f696da7ceb8686b064748482ade923 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1391a8223e2837e5fd6612b63c28b8a6e0dad0b99a1c166c430aa790ace4b1e5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2e2c57e4d9d038910af91192771a66e3145dcd5e37ea1f9f407bbb0943ba7b0e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x36494d7c1450ba044e1bb76965316419f767311e13c6e48941eb52365e458212 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2a2af6ae9b377a89c057c3208892bc9c9fc47ee44cf79575e236511f53afb523 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0xbd8024035c315dcf9c14ec73afaa39374aa56a9570fe65a769a005e00826edd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x18d0ed18cef8848bce810dabc3cc479e8d6b7b5612a5172cb8c7ca7a37e97a03 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3acdc07a21473f83e6c3c858c28909eed8df07c1dd701802033bad05960bd69a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x2a31bea1351b45bd4be815c5afe4bb98d5229fe2959fc510402276dc7ad2c29 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x31713e7384ad3aeb2bdfb80e0f4d56f36985d1c2ec53b17ec12fd4eee2c2470f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x3ea6e379a158f9a2abcfbae60744d9744487e9c10e67aa3ec912adae2f5610e7 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x12241111a135a2111b40e8763bca1ede065c1ea827408256bb8be4f03cee606 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x1c96e38ff646d7c4d97899172b6e8e92e62d05151c58a03ca035ce3dc1caa8fa - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x193254d37c814153a415b41e290fb77fedb62587313297784a10e339682b3f66 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=0x12ddf98cf99b2a741f989252e011f16716204e87f8aa2b64e3d6dd2b208d10ab - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836 - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(9,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - - } - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/gate_argument.sol b/contracts/zkllvm/merkle_tree_poseidon/gate_argument.sol deleted file mode 100644 index c98824d..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/gate_argument.sol +++ /dev/null @@ -1,100 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "../../../contracts/basic_marshalling.sol"; -import "../../../contracts/commitments/batched_lpc_verifier.sol"; -import "../../../contracts/interfaces/gate_argument.sol"; - -import "./gate0.sol"; -import "./gate4.sol"; -import "./gate6.sol"; -import "./gate8.sol"; -import "./gate10.sol"; -import "./gate12.sol"; - - -contract merkle_tree_poseidon_gate_argument_split_gen is IGateArgument{ - uint256 constant GATES_N = 13; - - struct local_vars_type{ - // 0x0 - uint256 constraint_eval; - // 0x20 - uint256 gate_eval; - // 0x40 - uint256 gates_evaluation; - // 0x60 - uint256 theta_acc; - - //0x80 - uint256[][] witness_evaluations; - //a0 - uint256[] selector_evaluations; - - } - - // TODO: columns_rotations could be hard-coded - function evaluate_gates_be( - bytes calldata blob, - uint256 eval_proof_combined_value_offset, - types.gate_argument_params memory gate_params, - types.arithmetization_params memory ar_params, - int256[][] calldata columns_rotations - ) external pure returns (uint256 gates_evaluation) { - local_vars_type memory local_vars; - - - local_vars.witness_evaluations = new uint256[][](ar_params.witness_columns); - for (uint256 i = 0; i < ar_params.witness_columns;) { - local_vars.witness_evaluations[i] = new uint256[](columns_rotations[i].length); - for (uint256 j = 0; j < columns_rotations[i].length;) { - local_vars.witness_evaluations[i][j] = batched_lpc_verifier.get_variable_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, i, j - ); - unchecked{j++;} - } - unchecked{i++;} - } - - local_vars.selector_evaluations = new uint256[](ar_params.selector_columns); - for (uint256 i = 0; i < ar_params.selector_columns;) { - local_vars.selector_evaluations[i] = batched_lpc_verifier.get_fixed_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, ar_params.permutation_columns + ar_params.permutation_columns + ar_params.constant_columns + i, 0 - ); - unchecked{i++;} - } - - - local_vars.theta_acc = 1; - local_vars.gates_evaluation = 0; - - (local_vars.gates_evaluation, local_vars.theta_acc) = merkle_tree_poseidon_gate0.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = merkle_tree_poseidon_gate4.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = merkle_tree_poseidon_gate6.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = merkle_tree_poseidon_gate8.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = merkle_tree_poseidon_gate10.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = merkle_tree_poseidon_gate12.evaluate_gate_be(gate_params, local_vars); - - - gates_evaluation = local_vars.gates_evaluation; - } -} diff --git a/contracts/zkllvm/merkle_tree_poseidon/linked_libs_list.json b/contracts/zkllvm/merkle_tree_poseidon/linked_libs_list.json deleted file mode 100644 index 0687002..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/linked_libs_list.json +++ /dev/null @@ -1,8 +0,0 @@ -[ -"merkle_tree_poseidon_gate0", -"merkle_tree_poseidon_gate4", -"merkle_tree_poseidon_gate6", -"merkle_tree_poseidon_gate8", -"merkle_tree_poseidon_gate10", -"merkle_tree_poseidon_gate12" -] diff --git a/contracts/zkllvm/merkle_tree_poseidon/proof.bin b/contracts/zkllvm/merkle_tree_poseidon/proof.bin deleted file mode 100644 index 3fa8115..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/proof.bin +++ /dev/null @@ -1 +0,0 @@ -0x0000000000000020d987953986af83240f5ddde87804a97c6b3fbe9f29afefab074710a945e013e00000000000000020c83d9f2a299d4734a2a61405e72426ae8d1df319c33103ce5e797f7b9317da1800000000000000206dd71d18378fc891c5d45303fe433d1427994cd17f4cdc6dc27a1ad4d1340b580000000000000020185ecb7ad8b09d2b74db5d84f6e58b9b8ed9e8bcfd9e3966c56a1beed6e771bb22ed3131d1b9c84cd73999f1e5f4a38612bdedb9b0372d9ab8ade20916dd7546082c56d5574a7661847006ce6f99e54db01d07eeb58c9e2bab1b5ad25919b7610000000000000004000000000000001400000000000000022c15038ebf5040670d83d7f8a22985d71ea06527f3a3db14d4982d56cb9994ab357396ec73fcb1976d0de2958293a760b20bdb4e2c8da1661d1cb22cfca793a300000000000000023b4c355ed4cb27ba86fbe3016ad8b7ea71302b9f3b3620b43d47254b4511ddf51d54e4690c09c685dfc513527319b92b76b64df235088d25b8260e2912c90e21000000000000000212d9ae0b45d3fcb9eec4cc5fc398f09ff762bdab8863d6a510e17dc89fa569872e1e7fee0982a85b15e9f7be99ae79e832ac613258f3544f7ba1af9c0cd36f3d0000000000000001018e150efc5001bd1daa0eb750f13bf979b388be3e2ba12373c25e76dcac960b00000000000000013eb1e5c3789c6495854c3000027d201554e0c7f5146c49fc8509208c863a0b2e00000000000000010ef7f4a70faa8e27d5265637654963a89f658adf9920506653cb3db1d0d802390000000000000001253554e902c09e6edef667870844450d76b37c5a9556a42910fb068c1c75c69000000000000000013bc2877ba3a8ac84856bd0be8599c70d5a3498cd63567310a22d83cac7300db800000000000000010d75f98d82b9308bcf7d18dc8b1e0fc4ec0a07347fa7a18a70f12f63bdb4b427000000000000000121782ab1d9e0497f707861ac30c4d0f46ce2791d8d4ea342ff0bfc8a7357d8e3000000000000000131e10b7c7f27fd44a16ec242024efb09fccb5e34f6ddf43d3e94b3f0bf4757920000000000000001008174d0fd82e73265d0728db077b031b77ecc1408d950b0492eae369cca739800000000000000013955df90ce0417c2529501c4821b5f8d7c24d124b02c53810e0f8d52eb9e6722000000000000000127624d70fb9cd0c3c7389c9450903c1d5e394d8569eebe8c1428757a91eb6208000000000000000109b6bee8faae05576f0f0faa50c5a4a58c02cea769c8ef8f3b02d75a4da5e60d00000000000000012de1cc0d5ad846fbe05e7bdaacf92ccef6ca359f4bc35c91e9134b21417010d2000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000207a425c0c691f475865d70eef2703cfbce65c3e4b5f8a660c8ae846696af712919cb7559312ee986147c3731020ffeadd12ff9c938efa080517af0f4f4e984000000000000000011000000000000000101e2beab62ba1759d1c98736d7e9361a6d8f1643bc77bf9afac30f0ca36a179c000000000000000121b076dd5269403f80dc4d542bd740abb988978c187e82bf16ff01cb3b3fdd3b0000000000000001185022eec82c99f2159eb745d9fea9383defaa01edfb40f63c2c255063ff5db900000000000000011eb21f9da652db2b08a48b56d6cd961815d236b9e5071324140a97200e720ae600000000000000013e7cbe4ef06eaef7173864f7b90c611217ae92ad1b4e60433a5dffe27fb59df500000000000000012f812616b8e9f6eb6aa4448754be2025fddea2509c228908f4977e4ef1982195000000000000000131160a3ddfdc75f5785220d3266ef43c9613fbf79e564713c1020ac0cfc331c000000000000000011aacc2b4b432987d891eda23c4a59a800ab49ddaf10db80fe43ff07a7cb80fe900000000000000013df3a231995af9bc46a697841779c86af30fb1807aa7a49bd5ccdb1f5793bbd8000000000000000125ba3f4024829957d47911761802bd282b1477293e001bed50f4830f43f45f3d00000000000000013e29300686723b3a6920ba30a3f8fa2395f9e43801fcb5aa2b58d53b7e33357e000000000000000138f1e3126aa5985557f6178d88dbc266ac255dbaf0edf62021950ea1033e34c800000000000000011db82afcf1d69c474e4144faec57f1cc990e637d4c8cc1d0425828afcb8f494e000000000000000109af37dca73a6d6cb047a78d4dc793c95954eef1dc50a7d8c8661112a0cb603f00000000000000013642263465119a7f726f492b75818456efef0f5d3a2d0d81dd12512594dd35c900000000000000012ff69aec5fa9b1e825095b4afe87eb2119a37a1c162c327adb5c4f02bcc5391c000000000000000119eb6971d11b69afa3d66e9ff7daf44c079b0fe479aa2ad2377b792bedf504340000000000000057000000000000000122ed3131d1b9c84cd73999f1e5f4a38612bdedb9b0372d9ab8ade20916dd754600000000000000012ea1f5f918a0e980342001b97dc7319e192872a85e79f1ce690b085372534a5c00000000000000012929cddd7b248f8104a0089f74e3f81616f67255bc7acdb541af96da3ba073c900000000000000010dd1055367b6cd8517202b1d4873d86e0bfc70b8927f19377ce65f7c2a2242ea000000000000000105151aa10692039973a0d7926a433a2619a79a9ed32e84f9d752ac7fd2ab4e9100000000000000011969852520da11ff422435dc135022be8046051a1fe898e1349d5e7f1d5888d500000000000000013f0f99b9a44259fc4ab50d4c6090adb85f178086963e034a6de5a78e92baac2800000000000000013b4e00a0354bc1ed7589427de2d36499525b1eb0ca022c05c0c78214dda55cc40000000000000001288603210a7ac9a34bae4c756e20f6fe12ad3583ccd6f7ae5f30c6b4543acfd000000000000000010a9e0fa53465f0307a677e4b26a4d2f5f68e409ee44beb15106c4ebea5260f0d000000000000000135164e3a05fdb0f264057777c1381ecdd0c7431a757b9769521d89b939be4b410000000000000001096f87221df474bbf41b5556c6189a048ac9eb94263610a035deecea20b7784100000000000000012f2da3aa95c647abc488aab1de7b0216b5f199e4bf0e53210d5aa092a395594500000000000000012be43254ecdf665ad6ab557958670a7126e436839f60b452773d901631eabe5600000000000000011b74fba8a05cffc63158ab5eba0334355ba1459e00fc9a4988ac3da7f995b7ab00000000000000010948ea4b21d0fedef6bb58d9a210050a85992a1df25511387902d26ddfec965500000000000000012e6c9377a914fa5ad1a8bc402a5019349bfdd295bba9561a5d0e1c255f9eefa90000000000000001281ee1564d68e3c6184bad40d3907e06a52151f88e67c33105bef9f3de1aae4a0000000000000001089a66af830c72de797a624421d27620d2d2cee6ac1fe4a251334efc5685676f00000000000000012b04016d8f3e3e585f63eb54a91c4ea41e1e0a815c9f772b96008aedb09b052b000000000000000117140723cc3737b9dcf398a74d8d89342fc26992b3366887227b23dd730719d40000000000000001336423b2fd1416a150c1fb4483c3ae04cc8576e176c31188133a82663f238123000000000000000100f4b27ef164712693c9e85692d266177580ee772c9b7339fb6fc84b3bb185ab000000000000000104c77c7ab6f635c0e2f189b0de1bfe754b84a853df094021e92ee9782a779c57000000000000000117e56e6592cf0cc46eb7b074568bf84a799749a35b2e40a98dea8f58d4560db300000000000000013176d5be1a2278297dc0bff4c2ce2cf076f98961897006a380ff219673cb33bb00000000000000010c8c06e2186fb4aa54bb41427365e7d574bec2d8268d938242270afcbc44717300000000000000011dcc49ca93078524687479bf68e433d3c4b89fbb9bf26bb485b4d26395f61c1e00000000000000010dd1055367b6cd8517202b1d4873d86e0bfc70b8927f19377ce65f7c2a2242ea000000000000000105151aa10692039973a0d7926a433a2619a79a9ed32e84f9d752ac7fd2ab4e9100000000000000011969852520da11ff422435dc135022be8046051a1fe898e1349d5e7f1d5888d500000000000000013f0f99b9a44259fc4ab50d4c6090adb85f178086963e034a6de5a78e92baac2800000000000000013b4e00a0354bc1ed7589427de2d36499525b1eb0ca022c05c0c78214dda55cc40000000000000001288603210a7ac9a34bae4c756e20f6fe12ad3583ccd6f7ae5f30c6b4543acfd000000000000000010a9e0fa53465f0307a677e4b26a4d2f5f68e409ee44beb15106c4ebea5260f0d000000000000000135164e3a05fdb0f264057777c1381ecdd0c7431a757b9769521d89b939be4b410000000000000001096f87221df474bbf41b5556c6189a048ac9eb94263610a035deecea20b7784100000000000000012f2da3aa95c647abc488aab1de7b0216b5f199e4bf0e53210d5aa092a395594500000000000000012be43254ecdf665ad6ab557958670a7126e436839f60b452773d901631eabe5600000000000000011b74fba8a05cffc63158ab5eba0334355ba1459e00fc9a4988ac3da7f995b7ab00000000000000011ccc9a6a44d1bca851ddcebb9da4c05dc8aade976fa054182150024297765a5c00000000000000012e6c9377a914fa5ad1a8bc402a5019349bfdd295bba9561a5d0e1c255f9eefa90000000000000001281ee1564d68e3c6184bad40d3907e06a52151f88e67c33105bef9f3de1aae4a0000000000000001089a66af830c72de797a624421d27620d2d2cee6ac1fe4a251334efc5685676f00000000000000012b04016d8f3e3e585f63eb54a91c4ea41e1e0a815c9f772b96008aedb09b052b000000000000000117140723cc3737b9dcf398a74d8d89342fc26992b3366887227b23dd730719d40000000000000001336423b2fd1416a150c1fb4483c3ae04cc8576e176c31188133a82663f238123000000000000000100f4b27ef164712693c9e85692d266177580ee772c9b7339fb6fc84b3bb185ab000000000000000104c77c7ab6f635c0e2f189b0de1bfe754b84a853df094021e92ee9782a779c57000000000000000117e56e6592cf0cc46eb7b074568bf84a799749a35b2e40a98dea8f58d4560db3000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000012f72c9aa1e4d095c083240c9a53b74a2b7a45850cb6a4bd2ab1763a864706460000000000000000137345a143cdc96ac793ee23c9a48d247f37c9e01c553845500e222fa012acd78000000000000000135f1cc1d4d397f39cdeced1a9a38b1ac3d694300b796dccd3a448800e477238700000000000000013e26ba08415c2ef9cefc3b86917fe9a3cf30d8812e6cdc2244753ab006c0950c000000000000000136682238ab2ec39eaf0d4251a4a6153bf6584fbfeb760bbf12841d81844eaa07000000000000000119393b5d3356ec82ab9426ad289816937444871419ff9ac0c139dc8f2ba984460000000000000001078a0865ae0ec2a98213ee3bebbf308f9dc4e7486a905f712d522862447b9224000000000000000113523041f83b69a444ffc11486b8804e0432113a29aa5dbd2c4ccee0006f4647000000000000000101b9b14a4c7e676a385b297025080d9334020fbf833417a3c8bc67d31736892e000000000000000124efd9c91be28ca796d23eb9a89faf2be425c27d1f00140d463543d922b9f3340000000000000001299d8bfb840439667de32ba6fb36f81b1b4bc7770adb5c9183f02f37f81df7d200000000000000013bc70e2409fa351cf74f0e73af63d7a5de628e75be34dc840a1b74c7b2ace148000000000000000126f53060d7f7633ea4cad7ed7b5c49bc2925330ba98376f2af37981b253478d000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001082c56d5574a7661847006ce6f99e54db01d07eeb58c9e2bab1b5ad25919b7610000000000000001212a8d319f3feaa01a3928cb545d4fa9a24ed1afc2a83161f6ec4224da1e018100000000000000080000000000000020af76b9057c77f932363b606d99db651b8b1831ef0bf12ad3699c390db870c62f0000000000000020f781136eba9b4b02f699f1a647e435c58ea82bfbefbdee2054935086e622fd04000000000000002017261fbb39ec35ceee742646b1e571dd0bab81ba9a7a15a65ddf8df00d172cd70000000000000020c943c3e5ba7150c846e31d58370456768cd8bc0fa02fa85aaa2dd38d775ced9a00000000000000206d759f50e176f04b3ea0db6bdd87c15a024fdbe362820cf284721ea7a27d5369000000000000002052ea78578ef0a2f5430f1b757700ceacd6014c30b7f62f7afd81d5e0782af70c0000000000000020ad4df8e4e74295d6c7c7e754e397355bc558ed7f181b922881f30d4e6939ffe10000000000000020a8b916b7cbab71d0e8ac46a0bf12af901e15cf92ff42e817458e002fdad37cfc00000000000000020cc28cffd0db9bfabc363bc4b942816a04b0e8db72d39936c429eb6418db7ae4379596c7fbdcdcba149cadb4188e66bc50334d30f1b3ca263609c5000b41053a00000000000000020000000000000004000000000000008f0000000000000020d987953986af83240f5ddde87804a97c6b3fbe9f29afefab074710a945e013e00000000000000008000000000000000100000000000000000000000000000020c86386aa341e1dba421375671a9a8f5192c1bfddded6a674d2d65cbb3336315f0000000000000001000000000000000000000000000000204f9c26de38dda3f5bbfda266abb75586201d1c2ad60867d7bacb666ca88b5d0b00000000000000010000000000000000000000000000002048ce486cba8152a427f1d4b63e3da1e1048e1c9c1e1a910d870d08d44230e04c000000000000000100000000000000000000000000000020dace3b45c06eeea02b897e80b314040b28b0be385f111628ac88d85bd3c856e50000000000000001000000000000000100000000000000202f76681d1601cc0f7b29a5c04c2d7b7f866bf654f9d1f5cdba0e7540f6b6f248000000000000000100000000000000010000000000000020e217ab968a64ef14a21486d2de279a2754ebe135d0a8c12c8ac48dabd04916aa00000000000000010000000000000001000000000000002095c761f69bb2a072da8a15f7efefb3a472dc38eacdd077597660a5bccdbe81cc000000000000000100000000000000000000000000000020a9103f0df540375063f5cde80978448a22c47363820655dce851d4cc8e8885290000000000000014000000000000000200000000000000280a57985342906163ebf266d873f14419342e80a47dc7dbad07491b1e028664903cc6ca33755f4bc9b2b3971ed860327a229f8f94b6e07466fa178220ef48ecac265359aecc90e28ba8cd939c65288750f534a712eac21a1f8a0f1b4ec28f5e6a036065ada8b483f9343e407f5e0aed240a8fd47c739da599c842757ff615c62d08dac1ce87aeed47f6e1de877f257fc3fb5a20e19802665cd7966b13110bb51e1e4aa3b378a301c7cc307ba5aa9e115bd04403297244bc49702cb84dd98e2efd34f0261351338177d80dda00ead0485321f6869fe665b5f416261b99a8575b902e13d790d6c1bfbe91d6196793aaeffd75c7bc9b24f5fa058ac810699b99d46112c6c2fab695dff168556859c9cfe764f76db3312ab2bd0c3cc50fa21a4237cb39d839e94a17c35dc258c35a4c826a645b6fbb6aa8c47f0218570c54b449b63b182ba1ac9dc4a30232721d977c3959360706894fd144e332685ac5d5270aaec91d1bb0c446eb3ab59533643e01452eeecb0c6ec24ed94582670e55a3abfe90f23f9a0b9c0673db6c0aa4d4565427ff457eb928a2aa5c22e872673bcbb810d79d2c1cf7243449b5c0cad58fa8261ac467bdc7ee494c4acb5fc1ac055056266d1224ca7de63d7e2ac670cbd380676355870ded78df9b77b1298d156b644c78a4701032aca89a2fa3dbc3c4c971f2ed53ddd5dd6f415b5f4e05589a9d1d717f7e293052a75813fc20f0e55ca60d92d634604345c775745ab2a5e06f6e7790b586de20121605aa4c834f9b42fd4635098103dc25481c283885f0abb3c1083b82bc221465b977954782ee58263fda0c881ab99ea9345eaa514ec8a7aa66846b1ab55f21e48b731ac7e49378ac37b181e8f86aeb6ef4aa6c182659bb098dc54a9b52e50b57ec7393d63bd592487c56424177757dfc0cec8a988146d3872e815421c193230d5c7738e84b80d95eb5592fef5e0b6e972835c93dd41fde2a41d8cab4de3939c1f6cae13467a14785e6896ce3e71067c86cd3d52f79cc67aa742492ac6f191d93f7525ddad11f36b47de4af9d8e6a9dbe0af69abade1ae246b7e7bf30e05f1c905e4b4ec5a21a919d974a67e84baf46c8b5fa323de764c2008a37d57d041028e4055369a4104857c5024a730b73f0f0ee1809890652b05849247a5a6765a4355ddc5d1c7ce64bdc8a8a66954da314884a5607164e5f8de554187249e9ddeb38d206f2f00c100fa1a10ce8874734fc6d191a75fbaeff27958f2e06ff328ae81d3ecd1c66974b64f92bc3fad5b49f513a28379b03349f019286c663c29dc9c00cf9e5fdb27f184de7ad5dccc95007293847ee4c4c1ccff1ef8dae09fbd049440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008f0000000000000020c83d9f2a299d4734a2a61405e72426ae8d1df319c33103ce5e797f7b9317da1800000000000000080000000000000001000000000000000000000000000000205b97a6b7904c849d553e606863c2f28e327d42312fcc39987d6ab091a103939200000000000000010000000000000000000000000000002015eb37790fd17ba2eef99db29ac8b7278c7312fe7f27c3c8f937c11b14ef20ed000000000000000100000000000000000000000000000020b518fae09ce80dd35fadca83fac3eb677ffb97cacc065ff9ba13e84b10f2b29a000000000000000100000000000000000000000000000020aecb3c097cc932083fb1f31a946b4949fa4fa493a3b594ea06f8cd2ef319e96e000000000000000100000000000000010000000000000020a96f7f0dd57d4ed7991de28b7c59cc1dac711e18090584ad65dfdf3d7874fe05000000000000000100000000000000010000000000000020b136fb90a1b482428378a7d6ff5a5fe7606e1ff22b0d095629327047c7906687000000000000000100000000000000010000000000000020f8041f75d274cab16d58d48dca65a8c857f7365cbc6db11b5e162c916fac06030000000000000001000000000000000000000000000000203e059469612e7bb4bf59367e923e7cafee9e3983cbe4f0a03d9a560175c7ddca0000000000000001000000000000000200000000000000022f5d18dc6e7572f3686ea06211419830c4e78b5eee6ae56f01156d9de5bd54711adf2d68a2bb5bff9321d6484cbefc9b7edf189c2fa6534a3e2464354e7845a5000000000000008f00000000000000206dd71d18378fc891c5d45303fe433d1427994cd17f4cdc6dc27a1ad4d1340b5800000000000000080000000000000001000000000000000000000000000000207739e3fb0b272671fb5b14433529744f82b0b0d6664306b78345e74de6b2aa7a000000000000000100000000000000000000000000000020b8e214df6c242e46f13d0415b4c8f01a5e28a12a6da2872f67f7e2adc1eeb169000000000000000100000000000000000000000000000020f1c384151921e0ab131664cf5fb30492f84689412eefd57c6ab9faa735838be3000000000000000100000000000000000000000000000020e685408244adc0ca54a8019409aae7a9ff4625b89b72dae15da72df869b0ebd70000000000000001000000000000000100000000000000204c91c7928e2a8bfd1a74ef2b81451e94115b1ca618d9630395bd7fa1560f477b000000000000000100000000000000010000000000000020eb960d1a48d0da327dce3df0dfaecefd55ddb0ae643048ff083843b74aa9c77f00000000000000010000000000000001000000000000002094d143b233683d0b5e11aab2a8ad04c8d42e77f7958528a99a568c1f087e8ff3000000000000000100000000000000000000000000000020e6d0ca5dfc686714c4cb5060cd9c826bbab7e3b9b3e519a68a9a7a5a926ffebe00000000000000110000000000000002000000000000002238d26bef6fa8c498484fde096ef52eaf14c38511fa164c4b269ef3e728b16ee235ffda424facb7b9ffdc4ece430705181db1d5f5927923355022aae5afb2d06829d22179c158023bf2d136c7a9b0f6fe43fd50bfdbe1841da04fb195532c43411d5ae570525ce782c3923457867b90e94b91be062905345c2396e13b226c615612fc2ef54c2a71d6f835cda8c9f89ba6f30a68e99449e3a2af0a0c0a9f539c2e3fc50e0926c7e7ffa975d16424ea571b828133a9a34ad119e77f63aac0cd8eed1e0ab6166a242a1b4d4adfdb2206635570420f6257d712fe8cf1d3886e9a016204dbf5a7a48e505c5a2c58dc84fd636d19b459b8b820d0db5555be1a58ef4a6211fb7e9b127eb450b9b186ebfa0735f80892fa97fe9f7958b7b97a94a2c47ec52551773173f6f195bc193e12239253c3323b5c4269ba016090144ef9ec81eb822b7858416a18fd2a6cdc0fdad9de5a2725c7d17b56aaaa48be9497f8b07cb29c26bd29d84c4ab9b1fc4b45c55230ea7f7ec87e99d19b0d5397866df824dbc42517853d5f6f0fe5784574f1bc71c18ab6cc99d3ccceee7cdc71a0e1162c2fa8e43662a3df72bfe5f2f5ac1c241af0c14fcb5627c25900926cf28f7f59c32126101d68c7aedcf24e9fca206372e4b4dbedab4da695ca4c8233c050a6bb03143dbc123dfd530e593af85258dffcc27b661eb4ad27cc631d7e6aceb066d1c4da3d6e1d79636481c84e7ce9959210ddf53393bd3ffa2d65599dc5b276a770b4c921d62c0a3341d661a3d1e50bb7d47f1cbade687e11a2e5bafa5e990aff7a39a15038270e684da64d8a171fa58b890b3543d1d891af6de7cfd8ad7d2066bc66447334066618b0d21f6e296a9932cf28a4318ca0f1a37d27304badcad259286fb23d93052102f04b760a404a7500fc779cb2c92575d78b1fa0ebee894d06e5f74772113c08c5af3722d3d2b3e83c715b9d4379d0045e3d7fe664cdfd108ec4319e1c9c1dbb59b3f932cd50d233161b013d4556c9c48f9f9109626e0de97111541cedd12c69ea422e9d5bae1710a89ac6f7caf6e14347fa68941b36e0b06663a6e3061317f0abcf98483730b44d500e618bd7e3526852ae1b8a16bd65dd67350ff267f0086356c61f57a4dce96e9b6c99043183441a6305ac6e377b0304d7cbaadcbd3d257cff424615728985528b6882ba6e91125421de6ff1f86d10a41254a40d969d080296e89fb7b58c466b6e2d490789a036b595521a5b55b0d1583d2fd0c3c9151c1e6d484637c7448115bc898e917dac83133a865f2ab6270b8d719b1c1d53c627f5b9c9a0fb84ab1efee323890d4026e5ddc189e3e409208154d89b41dc1c6f20d7de3a4fc5de6144170f0212e57c565f4ff2c68d77118516b24d611b6c635b2ab6c545f30c1230db62b43645c56964e8b6b56b47b52d54242ebd565342375412f0b6ed59e8186ac89bd96a09a613dacd186baea608418a4ee053b9933db9a93e9540b7d929bd5ac9f70840f97bff82d5d4686b0d6ed86f2c79151f133e8f67000000000000008f0000000000000020185ecb7ad8b09d2b74db5d84f6e58b9b8ed9e8bcfd9e3966c56a1beed6e771bb00000000000000080000000000000001000000000000000000000000000000203a860dc48c836db5b9590e451d7be926d846dc4205d2e36230ca09afa7253cbd000000000000000100000000000000000000000000000020481d050f04fd57e16def7b9dc8d7e1f18cca884aaa818eed76d9483264c2951b0000000000000001000000000000000000000000000000207475e0f49d580985dcdc396b34dcc9630996c3c61d9904b7e9d670fa246f0b3c000000000000000100000000000000000000000000000020941ef17d926f566e25761d9cf7738d83107b26b29e1a7c136f3fc493a960143100000000000000010000000000000001000000000000002006bcd68698123e511a8660d27edf44b3bd03afa1f584198c0d441025017895400000000000000001000000000000000100000000000000208928962dd0a2a2f196c579708750f44df36b42ccc291131d26b7e2e4ca999137000000000000000100000000000000010000000000000020d717a48d6274296f9e62dcf37f1bde6ef06aa003302664ca89b0749af0367514000000000000000100000000000000000000000000000020c4165ab9f4005ddddebf13ba29f3e19ed64a8062c3629e6630e10bf03b9a1a260000000000000057000000000000000200000000000000ae09452fa01fd723f25bf59d17f62b97faa50d0f0f2a33892db71fb1bc73d99ec236bad05fe028dc0da40a62e809d468057d3989ecdf196fede20d7f308c26613f2e59ee209f33b3bbcbcc1177ced9f7e539414b4bd301ade4939e78ae434019ca11a611df60cc4c443433ee883126081ae9054db0364b4b37058eb83ebcbfe63727c1a6a31c0282aafafc57570a41d779b772ad8703217a241690c8a0504080ef183e595ce3fd7d550503a8a8f5be28866ad3eb75062b7ef7829c684cafbf7f1206c8412f8c0c8d56e6edb4b3334935602e6998aef3c07761a54c585a914284a83937bed073f372a919124b4cccb6ca9ff3dd004d158c81b9f3e0d8926ebd7b5921e945edbc3ec2b282a48780006e0ae0e80ffb6ac2c254e83a7db9c4d64c97481e16ba1243c13d4d7d5b787fff91f51f3a369d91468aa4335eaf772829b368b9298e5da4ad39cd7c8d36a5800226366443c2b71dbb31b651f21a3efe2f7ef4661671a25b52c6328372c95a7ffdd9c99bde83e1de4e1b42c9a712f1eed0810b9b0fc7d4376221036ec2113b800abf0ff4ebf9c8a08c11a446eefba82fed7ac5fb30382bc89ddefc913deec47ff540f00b364cd05b7d3b54d4aa3188bd12853a060ee72514eaa51129ca56298035bb4fc8799a5226b30b3c4711bd1802a365dde63118daeb155aeed635a9d67fca44b037a8ac46d55641bcd4877018ea5c9a221b0a83b968953955d0f3aecf810ca88eea3dbd01c575eb3447bf84472030fd557d357c46976ac6aa2f0c51307ef3577115e48997369361c4d3d9a8e9cccf02aa8434929f0aea1ead14c26a0d853f4aca9334b108db4d980566bd9563a0f4f2ab710b6d60f515e152eb3d95f27ac0b5356ced959020bbb4f3b4db97cd4c0b0d549006dd1b3692996167cc12439a3c75f4df7e5ac8585ec436934f362e70c8bd59313922e4c96d669e9833edbc65c38a0b20a3ebd0a3aa88c28849f7027c3742a6d022518810dcfee706fc5b52032e4dc85d77c5e9b9d9d510e08c0ee833ebb2bdf51dae77ef230118f903a4adfcd1b237a2aa80af422f77e83b0d1e48b9144d420c2b97a85450fa8322edc89a0fe784e9d312505ea92e8f622b89f027299a7db5c7146857abaf057cdd123765f0187b162d0ff63a52dabd96f00f3d09c365824a3a19f649a594e48faea4eb024f8598911ef4be0e59cce5ff86e629310904748ce02609b65a6b1b70515b14fdb07a676ee12d888aa23c66f994b303ffe3fb8b732101cf703be876ce6938970b8d9bfad59a832915c8ede40b6b4c7393531646c05e3e308fc417893196c768f47264052a659f1d83331b68edb04cb99d99e9b93fa3090d312b8a52080e1af339c40be62c048fcd6ceca57439187e41e09f6f61c1d636f2ced475adf7f1e50cc63bf419d3fb92792c0f63d8c0031aeb504d909e3e2b2d41f5d9b39a284686c020d43b7edc16cf03209f3b451d7a7749631d2ce8c92e12be0a264c65d7b9793fdf2bc48123e95343785cce07dba121e3cdcfd31736d32249cd408202c960a1c0a425297a4c71a43bd8280c72a81188e75ccae08bede31db632bf7dfd369f5e3f5bdad685b38e7e0ac0d3fcda510a1045d4221f74121e2b7102428a0deee328c334b9cf637e37f09e06d02ba356207a2a6e1c62bba56d148efdbd75f2111cd73ccb46309c81c831a8922bdda9a2fb1f02c2d09d445a9419350b4cb245aa6fcbd007a10cf177174c42571cbe49c34f974c93c6edaa3b1e26caf4b34dba5590342ff85ef30e88e8d60441df4b0335cc01e09d261255c4e33e09387f7b5c542efb10262540b753745b051a93ae23d7725b51b1f5a453279501f6c78084a3abd104efd9dabf48ac8bc7417e685b2921a93ddb7ef75bacd86c362e1a7d68cda4eae750beba4394a1453dff20f2417f50cd63e3b618359fc5e509d1e58297325b1518af4145bc6b5ebae4477809c7cda84e35497ad4ca603a1c0ee684730c0438968493b9a351e72659ace140cb2248af948ebdcac50c1edd7531197b8cf3fbc7697b6c465cae18d9a675655830e70449870a6f6627f3e1228c0a80963f3c151af096e2a0309983bfc03e1faafba21e74cb3087c4ec3c9a5348357f69c0c3eae50f691d5fcf667c403fe426ee00672e845068a56c00c365acb93482ef3c2c6986b2f26d20f2ff92bec1369e56ea2a9847f7f2a6d89d2f03a0680b7d10c3d396794d0d92df0d006d413eeba84211deb4b123a686584fd0fc5f9909452fa01fd723f25bf59d17f62b97faa50d0f0f2a33892db71fb1bc73d99ec236bad05fe028dc0da40a62e809d468057d3989ecdf196fede20d7f308c26613f2e59ee209f33b3bbcbcc1177ced9f7e539414b4bd301ade4939e78ae434019ca11a611df60cc4c443433ee883126081ae9054db0364b4b37058eb83ebcbfe63727c1a6a31c0282aafafc57570a41d779b772ad8703217a241690c8a0504080ef183e595ce3fd7d550503a8a8f5be28866ad3eb75062b7ef7829c684cafbf7f1206c8412f8c0c8d56e6edb4b3334935602e6998aef3c07761a54c585a914284a83937bed073f372a919124b4cccb6ca9ff3dd004d158c81b9f3e0d8926ebd7b5921e945edbc3ec2b282a48780006e0ae0e80ffb6ac2c254e83a7db9c4d64c97481e16ba1243c13d4d7d5b787fff91f51f3a369d91468aa4335eaf772829b368b9298e5da4ad39cd7c8d36a5800226366443c2b71dbb31b651f21a3efe2f7ef4661671a25b52c6328372c95a7ffdd9c99bde83e1de4e1b42c9a712f1eed0810b9b0fc7d4376221036ec2113b800abf0ff4ebf9c8a08c11a446eefba82fed7ac5fb30382bc89ddefc913deec47ff540f00b364cd05b7d3b54d4aa3188bd12853a060ee72514eaa51129ca56298035bb4fc8799a5226b30b3c4711bd1802a365dde63118daeb155aeed635a9d67fca44b037a8ac46d55641bcd4877018ea5c9a221b0a83b968953955d0f3aecf810ca88eea3dbd01c575eb3447bf84472030fd557d357c46976ac6aa2f0c51307ef3577115e48997369361c4d3d9a8e9cccf02aa8434929f0aea1ead14c26a0d853f4aca9334b108db4d980566bd9563a0f4f2ab710b6d60f515e152eb3d95f27ac0b5356ced959020bbb4f3b4db97cd4c0b0d549006dd1b3692996167cc12439a3c75f4df7e5ac8585ec436934f362e70c8bd59313922e4c96d669e9833edbc65c38a0b20a3ebd0a3aa88c28849f7027c3742a6d022518810dcfee706fc5b52032e4dc85d77c5e9b9d9d510e08c0ee833ebb2bdf51dae77ef230118f903a4adfcd1b237a2aa80af422f77e83b0d1e48b9144d420c2b97a85450fa8322edc89a0fe784e9d312505ea92e8f622b89f027299a7db5c7146857abaf057cdd123765f0187b162d0ff63a52dabd96f00f3d09c365824a3a19f649a594e48faea4eb024f8598911ef4be0e59cce5ff86e629310904748ce02609b65a6b1b70515b14fdb07a676ee12d888aa23c66f994b303ffe3fb8b732101cf703be876ce6938970b8d9bfad59a832915c8ede40b6b4c7393531646c05e3e308fc417893196c768f47264052a659f1d83331b68edb04cb99d99e9b93fa3090d312b8a52080e1af339c40be62c048fcd6ceca57439187e41e09f6f61c1d636f2ced475adf7f1e50cc63bf419d3fb92792c0f63d8c0031aeb504d909e3e2b2d41f5d9b39a284686c020d43b7edc16cf03209f3b451d7a7749631d2ce8c92e12be0a264c65d7b9793fdf2bc48123e95343785cce07dba121e3cdcfd31736d32249cd408202c960a1c0a425297a4c71a43bd8280c72a81188e75ccae08bede31db632bf7dfd369f5e3f5bdad685b38e7e0ac0d3fcda510a1045d4221f74121e2b7102428a0deee328c334b9cf637e37f09e06d02ba356207a2a6e1c62bba56d148efdbd75f2111cd73ccb46309c81c831a8922bdda9a2fb1f02c2d09d445a9419350b4cb245aa6fcbd007a10cf177174c42571cbe49c34f974c93c6edaa3b1e26caf4b34dba5590342ff85ef30e88e8d60441df4b0335cc01e09d261255c4e33e09387f7b5c542efb10262540b753745b051a93ae23d7725b51b1f5a453279501f6c78084a3abd104efd9dabf48ac8bc7417e685b2921a93ddb7ef75bacd86c362e1a7d68cda4eae750beba4394a1453dff20f2417f50cd63e3b618359fc5e509d1e58297325b1518af4145bc6b5ebae4477809c7cda84e35497ad4ca603a1c0ee684730c0438968493b9a351e72659ace140cb2248af948ebdcac50c1edd7531197b8cf3fbc7697b6c465cae18d9a675655830e70449870a6f6627f3e1228c0a80963f3c151af096e2a0309983bfc03e1faafba21e74cb3087c4ec3c9a5348357f69c0c3eae50f691d5fcf667c403fe426ee00672e845068a56c00c365acb93482ef3c2c6986b2f26d20f2ff92bec1369e56ea2a9847f7f2a6d89d2f03a0680b7d10c3d396794d0d92df0d006d413eeba84211deb4b123a686584fd0fc5f99000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000008f0000000000000020af76b9057c77f932363b606d99db651b8b1831ef0bf12ad3699c390db870c62f0000000000000008000000000000000100000000000000000000000000000020f8ab5faf377e86cd4493115d9588c48472b375f9078796a4b1fac19c434d4ef00000000000000001000000000000000000000000000000201ddaaf710126fd028ec5fbc238ad59e77230b995efe2dffc9631f21dcda11f48000000000000000100000000000000000000000000000020574b0b290efc6fb5462970bbc45d9062eaa6852ba89a3f4abc58b89fbf33d3be000000000000000100000000000000000000000000000020378a5d8718145bff89d0c78f0a26b652d9c7bfbb09f060956250d2e4682112090000000000000001000000000000000100000000000000204a4c302276c0ad3baf210ac19a56541fe79d22874224d2a9732ff2797ff883c2000000000000000100000000000000010000000000000020faa5b6ae83c3fd00ca2d29f836595aeae7e3d0cbcc8a52b3e2fc069c1b332969000000000000000100000000000000010000000000000020afcd5fd67f64d84c5110ef0ce08ef744993b303fb3dc88c75297d2a5dae51848000000000000000100000000000000000000000000000020a701e28ae254c7fac027555f89e7b960271d9f458575e59d0a453bfe6b57667200000000000000023b76102993b58a2c411013d0e6cf91fce7b07c307ae7f2d22c42f55267f181c1213b521fcc565a33fb8ce1171ab2fc54cd04b39b029087a0097f8e97be4c0fd7000000000000000f0000000000000020f781136eba9b4b02f699f1a647e435c58ea82bfbefbdee2054935086e622fd040000000000000007000000000000000100000000000000000000000000000020a68a7139e31c8a174c2c224e508ae18529f0fb5464e14dd00ae1498f71fac45d00000000000000010000000000000000000000000000002045dcf3b9526c0a7dec4ccc17020fb477e120e3741e85b026a1f0391d19228b1f0000000000000001000000000000000000000000000000206d9e10f742dc7b5b1c7b537ef78bfa3cf020421e7119fa2d5bf2d57acbe5bd3d000000000000000100000000000000000000000000000020aca5d92cbe6c2d14b549fd5dc91779caa89108f68d5d4c71fe1aa099eebb5950000000000000000100000000000000010000000000000020afa7a75798a1e2c48780f87ef3a56f59fd737e49fcaa39242682c20d72d4c1d00000000000000001000000000000000100000000000000208c8b97e27dfd864199d5f4105c31bb8e1769282dd2acc89f4a1414617eb5a053000000000000000100000000000000010000000000000020558fe936ee685288d941dc83a9a37bba94131d179fed815b5b48d2ec41aa912900000000000000023dad01a9d1bbe4e2514f2bce7701d2a6ed20ef461708669d4c754a212e647e0e017fa238a95c09041fb8eaa5414f6b1e734c614eb75bf41856a19a93536a784a000000000000000f000000000000002017261fbb39ec35ceee742646b1e571dd0bab81ba9a7a15a65ddf8df00d172cd70000000000000006000000000000000100000000000000000000000000000020a9f5e9d53ea368a24ed6ea3a2c4a7114b89f6263b13242d3fdf9e9fb04ba1f09000000000000000100000000000000000000000000000020b94f07837b68a42706d386433b00b6065e96dea8088d3f4da42ccb7ae44791c7000000000000000100000000000000000000000000000020f5fab072ddad222e3f3a5492a0b5979842a5cba26d93f851a127072952d7d17e0000000000000001000000000000000000000000000000202114f55cfd2447aaf694e332e44ea57c66cb7549301ac7695aa7e263bd9edcfa000000000000000100000000000000010000000000000020739ced907635c3c84363929f0af61f0dafa13cf0c572f7595663faeaf19209270000000000000001000000000000000100000000000000207bd6f0815fe108516ddfa5202d3d4835ee1e422673d5052b3ecb1af2fc03cbca0000000000000002071e1ab05f98deb8fc6ad209ce706105427aeea160d368eca1eb4c7a6f04d2802ff6000fcf3b127cf30c72ca71bc1b8930cf4efd4bbe1e4c7a7072dcd832fda3000000000000000f0000000000000020c943c3e5ba7150c846e31d58370456768cd8bc0fa02fa85aaa2dd38d775ced9a0000000000000005000000000000000100000000000000000000000000000020fdadf50d9e4f6bd9db55039509d39b696b794068cd60c2006fb9f88bf3df9e4a0000000000000001000000000000000000000000000000203c0ecf2a9046f6304900ee6cfd69fbf0d9b216fbc271d7d99674655f188c05fd000000000000000100000000000000000000000000000020e9ef5cf8c4e7f84829120539de1ec49532f3a2f43e22949983096202fd14819d0000000000000001000000000000000000000000000000203d111dc383e2d9787f30e9154c06a0e8d348c8326635c747c62479b477e3ed940000000000000001000000000000000100000000000000207e820e33747503852de29a5b69f7b3814b934438007633c5d886b1dbe95b908b00000000000000020e8b1718199c8b16f6ea0fa7b6967a0db2a2f0aed52f066afa0713b90ba755580e754f2f6bc94f62dfaeddeb0eb5487fa363e9a985b195354d23bda7820c59ea000000000000000f00000000000000206d759f50e176f04b3ea0db6bdd87c15a024fdbe362820cf284721ea7a27d53690000000000000004000000000000000100000000000000000000000000000020015062427e8eef15dfe6de8eb05e591e8e8b1b594a4be85178c4164900e17975000000000000000100000000000000000000000000000020acfd44c2bfb08ba0e291ca1387d9bb3a47ab68d632cc4556ae6997450c5e7a20000000000000000100000000000000000000000000000020ce5582b2c35c9553b52013b0576624ec325318c2bc36b38395cbe10ca48d340c0000000000000001000000000000000000000000000000209a804787a51e13ee49cac2a7e7fb57613f09d5aeb32ca7946986aa0b5aeb48b600000000000000021ef07bc18b4e5117508ba8b779968195f39f4977ab1984e65f5b87f35b2fe38f0628ae7bc001154114af407c9bebaba0a8c474ce02041a16e3944cc39476f9330000000000000007000000000000002052ea78578ef0a2f5430f1b757700ceacd6014c30b7f62f7afd81d5e0782af70c0000000000000003000000000000000100000000000000000000000000000020ccec0ba48767a26ec96c585f1ff346e9c78cb7df57421a213c74ebd9e2ac0a200000000000000001000000000000000000000000000000202db4fd8282687a288982616d4d838781b4d5b80740efca16e39e5673501442970000000000000001000000000000000000000000000000205102e254cff97fae653739a6ce30339b05512899a881586532663fef76fe344f0000000000000002376cee8a4f2ed24a853b704a91ac5b6a0afec2370fb8e0b46e071375f0143b801c74c5be864abc7089075586066607b0a631733724b072674eb929c25d6a1d3100000000000000030000000000000020ad4df8e4e74295d6c7c7e754e397355bc558ed7f181b922881f30d4e6939ffe1000000000000000200000000000000010000000000000000000000000000002085cf094ff17bc3b9b78906919180f6307543845548a64cf3d31c0086e81196b1000000000000000100000000000000000000000000000020ec5cea7ed9234091f279be3e5f3336b068d4508e63e5e5e94fc6dcd6bf604657000000000000000233dfbdf9e58d01b143fe0d5ce217edc7ebbceb4ab3bed556600b59d84c7443813d182ee13e91fffb431ae5824d71fe63d6d3176270dc82d77732361cb0d8176700000000000000010000000000000020a8b916b7cbab71d0e8ac46a0bf12af901e15cf92ff42e817458e002fdad37cfc000000000000000100000000000000010000000000000000000000000000002064ccd440d20046fc058491b48c38663107dd0f9ad969303c5192296fe0ea66950000000000000002152cf637d4febf40a7998e10a0b41aadd6c434a68a6cc82c274d57510d9a75ab045823c7ccb878b4d0d2e978d1d0e826329d9d105b3a6a4161067f77241c801d000000000000000400000000000000290000000000000020d987953986af83240f5ddde87804a97c6b3fbe9f29afefab074710a945e013e000000000000000080000000000000001000000000000000000000000000000204594218a0255697cdf4168f695474011c328745217a4fbb94730c6f86e2da2ed0000000000000001000000000000000100000000000000207d6df90ca65ae2fb7bf434acd0aef9cceb3a4bce75d5717612f5fb9c541e76060000000000000001000000000000000100000000000000207dc1185ad3013a588a006b43ffcad0f7ab3deae0092242d29ea85badf14da94f00000000000000010000000000000000000000000000002068d3dce559d3bab0f4e448d30def9a1f2e03b82d82d2f8abb6e4cb39a657205c0000000000000001000000000000000100000000000000209bd2f9d05e06f462d48c1552cd82868487cca2c02833b5fe42590ac07dc91af70000000000000001000000000000000000000000000000205a0f56b938227ba1af01ad30633cf1776580195c9e7322982fc11937f712940e0000000000000001000000000000000100000000000000206c745c5e73642693c105fd5d818c6b0c649043184575723e4d1832f179d413dd000000000000000100000000000000010000000000000020778d02026362d618bfc6d8c2dbcae031d5a619a28176a8169a9bf4f9a2d0d1c2000000000000001400000000000000020000000000000028090355f731c1f000556b29c12534ff35ee8a2be38b20cc78e83e4475f2d5bfd81076a8c55733b9bd538e99778b13dbd06d0eb765e197a61f3dbef3b6e4fada4302414b14bc0d2a4c4c37898db939bcd1a4ec007bf856e77ee03cb872facd0bb02465e3cb25a73941a4eb37cedeb42f16fabf59917d954f095f02d33ba5b7919a087cdf263719f9bf9bab0de99942d5df75559191f1fd57d7fb080533d3a4bc0d19390bbbc16aaf28338bf77caa351ea40d9f33562ac9afd36583655dc9d2296511af4173fd7c88f4ab1df57d3cd8b4f5da40d3493c95c31b4a272252a3e03cd3034420159d8a16268e7dde221432d46bcca8a1c742d46156cb0df75c031623eb3f9ab251e8350d2aa5a2230b73098ac5f6ec392305adc1fd08c0abd5ea10cac42d21de452c9a45a38d309a0beb06ae7e41b77ea7b4ef262e9393bda53650248a21a47ad616c2ab39c437ec93b38ae345cdef71ca1556dc0fa1960a6eda51f7eb1c13115586f2b30416ab3f40cda134e7ea7073ce339dcd5a0a3f6c3ed9aa772536757c50fb9a228b5a59173ad8b4ff3e108794ace6f97a283cb43c1ffbfea6a628c5ee5339dde2e3fe217a6227fbb1dd4adfd8783d2f3dc786188e9b1e9b73d803a6811a664ce78489f1ea793b4710a746f288e4cfb5f06eb9504a829cba44a3209d4f1e695b281c2759aaf198ffdc7cc57139ce05de0f1560708d87d0938ea92461f0a6346d3b7fc60121e47f87eecb29e81fa7058bf49f3539ac40685c1b8319db25b8e0b45d29509df587d22c1d6fa58d77413c7b55a18392f08942a823ec21eca576c6bd3d97aa05ec4d3c46da01b15c55fc6461abb148534d374d94648b00a0984e397240f54d2a48acf1a513057250964642f24df85bc192473e774ff9135cdbba796f5f2437d7013517e3e8458b0581e620e6ebf13fd1f96faa143f263875c34d956a2cb1b1daf41a390e26ddf105a5d69643ae5362fbfaa2d7e0ea5430b5179aaf86e87aa652af5daa47ecb0132b43b24f05b8ee94ec2c2e87ac769708b655dcf88b94ef060b078d78b24b89e23fcd6f27e7c0f84997457045a44cd2104b5ff5a93ff0d010587168cf379d4c352637f9514ce4daf3a17681cc03852a1117fb1527157c92874bef4c05e2d3653f2bb4ac2a62b6e9e59b32ea58f56565004acf862042791628ef2b590411cb3a6c42b2fc96b5f4797f71d7fe1e3becc23b0e3a51775540a9d43ea8dda3caca99764e713a803e920983cfda47a15b5a881056cfc65f47bc8cc7f5d2b1e68b270e733c9530fbc804cf402c2c2915cae0a620b9cb387ed9cf17cfcaacd8d65ea94f8d370e7131667cec354ac76780126d25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000290000000000000020c83d9f2a299d4734a2a61405e72426ae8d1df319c33103ce5e797f7b9317da180000000000000008000000000000000100000000000000000000000000000020cf73d95b7f5cc41dd0f0fd163201d1d08f84019d9df5354049276d6e20a0c6250000000000000001000000000000000100000000000000206986115aa04cbde8cf08de0526c045f8008020d8b16e7b08b0de5db38c8b357f000000000000000100000000000000010000000000000020a55527e020a70c3b7a831ef737aa578f167ad9a20b96ec50c904e2544fcdcd380000000000000001000000000000000000000000000000208463539e99acf61dc053835f68adcdf73b590acd68cb4935bf8bb321c304b72300000000000000010000000000000001000000000000002075653d98a99f9bb485cca6f6ef654963cd40352c8392f34c66c228a753ccc6d900000000000000010000000000000000000000000000002099ae005769d7370afdfffef0212ab1b12e1abb9886866b2c447f9f9ba17c5f74000000000000000100000000000000010000000000000020a7bb4ca9c1cfa578c95ac0fc36a0712fb7f71b8da23a068da85701254806476d0000000000000001000000000000000100000000000000206348a0be4adb89a2ae7f2ce707507fb267b3b5c289f86dd067d2d0515712308c0000000000000001000000000000000200000000000000021ed60dc4573560de99db5029deaee6ad5a9b2fd381a45d669518f762b8e1042d04fdd62626ca2c59b94f5ecfef39355ee79c4f8d38f8c0b8d83a2fc414a494cd000000000000002900000000000000206dd71d18378fc891c5d45303fe433d1427994cd17f4cdc6dc27a1ad4d1340b58000000000000000800000000000000010000000000000000000000000000002035cae41dee38e0c3e6349cdc0c996293b1a55b52e4cd0fb7de2fbced6d092ded0000000000000001000000000000000100000000000000200152f11984a1155d561d2c703f14a1a38ca35cd3bc3a6ccc4a85075d43432d5f000000000000000100000000000000010000000000000020aa4225f168c3a7e148d62d11ba22f5c057a26d0bdeba9e2a7cde7956dac776d700000000000000010000000000000000000000000000002075d7bfed40460d2cd2272027b340103cedc5ba231dc9a75f45fac4188d08e4740000000000000001000000000000000100000000000000208db796832090ccafa978d32f682f94ac74a4bca96e7b5a48950a2449c570e4e9000000000000000100000000000000000000000000000020d229f3927a118fd3650fe45c106ab8ee2c5a2b9f725ed7fb2c3b26ddfac2da11000000000000000100000000000000010000000000000020cf02cdd971ea8f205fb3ae3e37a27415c48d086261308da19113dd856d66bf80000000000000000100000000000000010000000000000020e80e640890bd71047455ee74d8e83b3467692b84c6d1cd915030a69eec36f702000000000000001100000000000000020000000000000022342ef11b8ea4fcb9677ce345fcc0701f3704d303fb0f4e08759b4d6cc63b03f527b4ae356e7e0e8f79d19f1f18e0f11197fd80150f5b36cb1f54e7d5f9b49e3223a2ef04dbd33203fc81a0c8e38ed261a4dd2e6362b40c2fbd1843b78b561542149f516fa747f9df45baa6e5f6944e083fd15925fda18e41fdb9d290bac032e3341032cd176ae63eee550a3b8d91be7d27b711978c00350354e5cb25e9c40b84232cf356a7285d2c3c87f299652b9d02a799981c66e34d7764bce1b0c4dfd515100f8aceee59e4c921e4812c61b31b4a60bae026f1347fcc5ecfb92ffdb369912311e9ed9f90261647dcdbdc0600c5b13a348f7298e9412eb210fb314786c6d9009726a4fe52efa66b1a4e38ee96b28f4b855e64e4a2a89fb1145a2d08ce6b961cab79577f20066b7c0d85163927ff1de215e91c757a97463a0a943dc30484dd0e35458e30ece75dd5655dc26e4444613cacb11fa94ce2a0c21cc789fe2374721e5f1356dc5cd64c2258eaa256a247d8d91808d6e907e2b77179eb875c716e810dd180c3bc49b0c4b819a716fce9361518dd9a40c35c41a214a0022249b8ed212f4bacd2cfbf2b9739266c19ea9d813fc7bf6caf23fdd5570fa8b3fa7f43fc751877139c69023f3be7ab8db5168eac4b08e3673ce37ba692c8eda7cb08eacb6815e1eb04d6cbc5392e11584abee1ad763a31cb63c18939107eb839ec26e3a3e12ad0720204e0bc6b2d9f6b8dfdc4f65254bc3ef0c3b4216ccad0d63f0c3d801e3098d80799fccec487b29f5e113bfe6a90adb7f42cdced2c1e244a016f0b14ae2cc2765c2920680b9f84e13c31bc1b44b16f0a32dd8fa41b62c9d4a14c16d6010fde6ae0403c267f00f6eaf644514d094aa19d78b9f2e40a5ad7905256a67b130b9b6ee9ee4603f935412a91c358221fe0aed53aa8d8914ea9641b02d2aef93a304f684ad27073611337c49be11033e492a0d52ef91831dd2f5f7e9dffae8df22bf7577f55658ab1fbeb8d02303da5865672c6f8409f8dfd27e9669a51966e5215a471b99137b0cfa23ca42477635255c64686c230e35192932e04c73bbf3cd0368157fc51c75478681144644a2b4307ae315d9d7f06d9b3732be440adc515e33bee80c3d2df6ef612cd7ca14e6683190d395aeb733e14987687a6eb9d2534e518d3cdc6626ab4bc383578401f330429ed2d2d0f34d69430b6e765814fdbede32ee2146953fd0b6e3c8e4583c27940777745cd25ad21332137e8ed31cd2c9ebf23c4ad338468c19be6441d142f3b3867d1464ec953c6c63fa55a5da209307ac21dcb5d5bda5ec3e1859be2c2fe714764bf0e83a8f364ffb8f67875120aceb86819151da0417e1f2af2d6d1260bfc219c912dc614a2ee1078e2bb2ec7d53fb17304ed7cacdd99ac36d10576e1e302b9b97abf73bde3adab89d912a6804c22cfe21d1ca20b20afdefbca6655551fc632f36a4afb7ef0ed0523e838a9abcb2624673a9f713243f9a47fe7900edd7b2e1d073abd93d92d0d2e143857bec2507b905300000000000000290000000000000020185ecb7ad8b09d2b74db5d84f6e58b9b8ed9e8bcfd9e3966c56a1beed6e771bb000000000000000800000000000000010000000000000000000000000000002022b574e36d15656da41f3f3402a16a1cec866b7794e51c3241e0445e11bf80db000000000000000100000000000000010000000000000020d0a629ab214342d68d419e3ffc6bd7f0bce4a0b02eedbaeab022b20af39980ce0000000000000001000000000000000100000000000000207437f1112fff1a9100c27cb2cf641d2ff411881839a23b23398f344db305831d000000000000000100000000000000000000000000000020683be866c8a453e0a32281e89cda8e86881df7ad0cf2c6af28870fc19afd99300000000000000001000000000000000100000000000000200bb8bbb4384040b1694b06d1788d4451f54b6115e07267d0c37dcc94d7c57eb20000000000000001000000000000000000000000000000206faa29b74d583928784f77e414c15dcbab545dc62ffe8d0b1bcf7d903302877a0000000000000001000000000000000100000000000000204ff53322ebe50686b221a07b20d9765b98711ce9594cd52aadab191860b40766000000000000000100000000000000010000000000000020ac21ff28b032fa1ea86518ec8118a0d499d3406706aae9718010ff72125928b10000000000000057000000000000000200000000000000ae3bd8e314163d33f423433729fcf2ba354b069c5e49da006bd92abb2999c7a02304271cebe9c2cc0bdcbcc8d6030d45cad73ffc9dbf72f8afc00275c366385fde2b3c6f646f3203c4b05013d1f0bda309ee06a9e74c0e1dacd920e41c00e620ab14c3909b90cdfc3b4fafec2e0f425cf6343fef14bd3edb6ec00c4cd0ff19df56182e2cf62bfa12d771906319b3b42f313f4d8690605fa90d721ce1c5047ea35427d1d309d405ed288e6f9ce64c4bd0cee2f9126ba8ed500e27104f27fb815cad38e6e0cedbe25e3537d1ef808284ebf61a3d07d5d8915427a16337ec167930a307191f31241da1cac82e107f7d7b140a0809912630bba4f3f7c9f900e986cf5e1c82640a4b6bd70a1719ad828c989bcdfa16c33d15a2c057c23b53e8705df32b237d9bf5b49428f5e8e6527d73676432282fd5bef3aa38c3d6f1dd048fa20cd60e8bf433791b33327380638cbefb0b059de49e395993cf7f98ce41b031d5bfd531740bcc86e4cccd8c7f9c734104f4fa8461fac2afb9299c005eef3cce2a402c08bbc5015d87fffc4181f1bfbae7371bf3307e22b696146262da1783f92cbf2837443afea2780003be7e0e404518c8e42f161ad952b6e4b93653196906d340d92baad906d3a7ffed4789b8bea684138bbff276ad90ee65ebee427593dddfbbc8145526f92c580012b8764741597bec746254224e785e932faaeabb59222044391a563d222247ffa265b09bb9409461ba58e8866fb8c11248dbc4b91c555eaae525a9c2ddddb8005d9a4f6446bf6b9e45c95e128c508be6d2bd6877d0aaa1551c03af31aaab67fe2bfc730a9e42e5e8a377fd6e36892b6935187d3bb3aad956773c50ce55549801d4038cf561bd1a175caa492ac580218fe680aff5395526a98a126bf8555907f6dbee3f35174e7d8b3157f32710add90e097a722a82563eb0532d9407aaa6f8092411c0cae8b18274ceca5371eb5b73eb121ebb066aa9c14fae1c1bd9aabd27d24ba73c09748873b7f695792a575bf04d13cb0da39eaf39719e23e4265542d82db458c3f68b778c48098ccd6ea4ad5cac07ce1f8d4e50c68e630c8b4055b1c71b7a442c2f46aa4297d0a6d0a1bcb9178f2bc4e9d03f6c1f38143374bfaa4e38e485bbd3d0b955bd682f7b75f73f503569efd44360ad93e0c7ed3eb841ac78e3896354dcec61534cf713421328af9d75cbdad891113d1c9c18640147be53871c769cab23139eacb308ece033704c6bd72d40c09c1fafe363e79d3999485e5c71aef0a8509de6a080d35fc145677dee1916d7d620927d8f0c79f00666b7a1a38e510f57af62195f7f2ca06101317e1b33e243c30c9e6f70f386111ffe69d7ce386ab349931581228420de3d40a18581498dc8c9ee18bfcb3e61ac2001962831c7954cb66cea7edd7bdf21e505f77688036b52cf3f182d34c19e551ff81137071a15806fdf6b85ac94a456edb5f5a373d5d2b4bf4c19e4f837e85a2007eec8f8e5ea7f9020947a536b5ba93490a35895772666d9e1170807c817a71fd8561323826b822f5d199c5ee735b260009a3930932b508a221f9ed91789c02027a9ecdc7d947dd0a2e663a118ca4dc245fec2d8b9cdcb0f0b114e26e876411f39ae5fb18c198aecd1800dda840c7b9b75d125e045e65b80503c403d75b0be20c651a04e73e675132e7ff2257bf38486d0c7d6290712c018dcf4acc28a4f431c2067de77bc7fb6a017804544943e69c4bfe3c54ec38d924f36cb67334c73b423df9821884380495fe87fbabb6bc1965d86b536ba896b8949f66585ccb38c4d0ca2075856ae7e912075815a56e53810933240e27737d1a459b7972a007e4282335df8a7a951816edf8a7ea5a91ac7ef8f145819921527773f7599c2ff81bd7f3f2a24b9b16878d5a24b86c3b27a1852dffb446c54171835c095f3d202774c8a00d5db464e97872a5db4793c4d85e7ad424b548fb535e0e5d8973d1afd88b3773bd2b7a0770a5c2c2b79a1d27c62799dd6cdf22d7f3f949e5e38ff660c547eae042d485f88f5a3d3d4865e2d839d86624b78a6ce8a0d647d3af43186f3ab81532b1d96225333ccdcd960291c6dec6014a8eb56f3570a02a97268394a3da6796214e269ddaccc3323269fd6e392139feb795b4208b242f67226c4f7a2c259869f1793eeaba00300503ee0cd8e259de066e5c4e7cc974b21fc70818bac34405ee7286c11545ffcffafc11f3271da621f993c81b12f7201d71f28aba540cbbfa11a3bd8e314163d33f423433729fcf2ba354b069c5e49da006bd92abb2999c7a02304271cebe9c2cc0bdcbcc8d6030d45cad73ffc9dbf72f8afc00275c366385fde2b3c6f646f3203c4b05013d1f0bda309ee06a9e74c0e1dacd920e41c00e620ab14c3909b90cdfc3b4fafec2e0f425cf6343fef14bd3edb6ec00c4cd0ff19df56182e2cf62bfa12d771906319b3b42f313f4d8690605fa90d721ce1c5047ea35427d1d309d405ed288e6f9ce64c4bd0cee2f9126ba8ed500e27104f27fb815cad38e6e0cedbe25e3537d1ef808284ebf61a3d07d5d8915427a16337ec167930a307191f31241da1cac82e107f7d7b140a0809912630bba4f3f7c9f900e986cf5e1c82640a4b6bd70a1719ad828c989bcdfa16c33d15a2c057c23b53e8705df32b237d9bf5b49428f5e8e6527d73676432282fd5bef3aa38c3d6f1dd048fa20cd60e8bf433791b33327380638cbefb0b059de49e395993cf7f98ce41b031d5bfd531740bcc86e4cccd8c7f9c734104f4fa8461fac2afb9299c005eef3cce2a402c08bbc5015d87fffc4181f1bfbae7371bf3307e22b696146262da1783f92cbf2837443afea2780003be7e0e404518c8e42f161ad952b6e4b93653196906d340d92baad906d3a7ffed4789b8bea684138bbff276ad90ee65ebee427593dddfbbc8145526f92c580012b8764741597bec746254224e785e932faaeabb59222044391a563d222247ffa265b09bb9409461ba58e8866fb8c11248dbc4b91c555eaae525a9c2ddddb8005d9a4f6446bf6b9e45c95e128c508be6d2bd6877d0aaa1551c03af31aaab67fe2bfc730a9e42e5e8a377fd6e36892b6935187d3bb3aad956773c50ce55549801d4038cf561bd1a175caa492ac580218fe680aff5395526a98a126bf8555907f6dbee3f35174e7d8b3157f32710add90e097a722a82563eb0532d9407aaa6f8092411c0cae8b18274ceca5371eb5b73eb121ebb066aa9c14fae1c1bd9aabd27d24ba73c09748873b7f695792a575bf04d13cb0da39eaf39719e23e4265542d82db458c3f68b778c48098ccd6ea4ad5cac07ce1f8d4e50c68e630c8b4055b1c71b7a442c2f46aa4297d0a6d0a1bcb9178f2bc4e9d03f6c1f38143374bfaa4e38e485bbd3d0b955bd682f7b75f73f503569efd44360ad93e0c7ed3eb841ac78e3896354dcec61534cf713421328af9d75cbdad891113d1c9c18640147be53871c769cab23139eacb308ece033704c6bd72d40c09c1fafe363e79d3999485e5c71aef0a8509de6a080d35fc145677dee1916d7d620927d8f0c79f00666b7a1a38e510f57af62195f7f2ca06101317e1b33e243c30c9e6f70f386111ffe69d7ce386ab349931581228420de3d40a18581498dc8c9ee18bfcb3e61ac2001962831c7954cb66cea7edd7bdf21e505f77688036b52cf3f182d34c19e551ff81137071a15806fdf6b85ac94a456edb5f5a373d5d2b4bf4c19e4f837e85a2007eec8f8e5ea7f9020947a536b5ba93490a35895772666d9e1170807c817a71fd8561323826b822f5d199c5ee735b260009a3930932b508a221f9ed91789c02027a9ecdc7d947dd0a2e663a118ca4dc245fec2d8b9cdcb0f0b114e26e876411f39ae5fb18c198aecd1800dda840c7b9b75d125e045e65b80503c403d75b0be20c651a04e73e675132e7ff2257bf38486d0c7d6290712c018dcf4acc28a4f431c2067de77bc7fb6a017804544943e69c4bfe3c54ec38d924f36cb67334c73b423df9821884380495fe87fbabb6bc1965d86b536ba896b8949f66585ccb38c4d0ca2075856ae7e912075815a56e53810933240e27737d1a459b7972a007e4282335df8a7a951816edf8a7ea5a91ac7ef8f145819921527773f7599c2ff81bd7f3f2a24b9b16878d5a24b86c3b27a1852dffb446c54171835c095f3d202774c8a00d5db464e97872a5db4793c4d85e7ad424b548fb535e0e5d8973d1afd88b3773bd2b7a0770a5c2c2b79a1d27c62799dd6cdf22d7f3f949e5e38ff660c547eae042d485f88f5a3d3d4865e2d839d86624b78a6ce8a0d647d3af43186f3ab81532b1d96225333ccdcd960291c6dec6014a8eb56f3570a02a97268394a3da6796214e269ddaccc3323269fd6e392139feb795b4208b242f67226c4f7a2c259869f1793eeaba00300503ee0cd8e259de066e5c4e7cc974b21fc70818bac34405ee7286c11545ffcffafc11f3271da621f993c81b12f7201d71f28aba540cbbfa11a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000290000000000000020af76b9057c77f932363b606d99db651b8b1831ef0bf12ad3699c390db870c62f00000000000000080000000000000001000000000000000000000000000000208f42dabceff7ef94c0da5218d16c09d3a10574ac7adac9916902dc95c6a38f7800000000000000010000000000000001000000000000002068111c5e8d8935326de6a3e923f10af9e6964137428ddafa7c12d8f9e01fe74d000000000000000100000000000000010000000000000020b89dc0c31a9940876e80eaf7dbd14ac4645dd817de77242544a763413566e6a200000000000000010000000000000000000000000000002098fb2a1093d660d0f2c3d4b4819d9aca6fde51a1d8ed873d0199a9e49eadc75b000000000000000100000000000000010000000000000020bd41016716c1aed626a5574f63b515ce33bf673bdbb02600e1fbca647b467f4e00000000000000010000000000000000000000000000002026a3856bf126b2f66156fffec2749efff07b624a9bf8c7a2c850ff5936f52b94000000000000000100000000000000010000000000000020e330a3ca79333607e25ac69316823648a22a11ec2281f47bd148f9ea777449c4000000000000000100000000000000010000000000000020154455463d06ea7384929c514e4e48c3982e795fa93431109b732283f06510ec000000000000000234fea6b28a2f8560b73268db3468b5dde5023f22641c75711119ee00de457d46076433ff854c84b04aa6569f8ef17b5f505deab8de7f494047e97f5d5243cb4100000000000000290000000000000020f781136eba9b4b02f699f1a647e435c58ea82bfbefbdee2054935086e622fd040000000000000007000000000000000100000000000000000000000000000020337874e37b946402e73798dc00768639f93b8cb83f02b5794a811f8a0b77b763000000000000000100000000000000010000000000000020d9d8cf05743f68e34c6455330ee24d6c2343227d666e6981501ffd2c4f649180000000000000000100000000000000010000000000000020ee5628355f5bb3048313816858c7e3e6b68ab3aad9461a92c5969122cb7d9f48000000000000000100000000000000000000000000000020ec7c4f47dbf3b731bfb926c00b4650e86c5bee4013b64d4e0db16a4a48fe0144000000000000000100000000000000010000000000000020b9c8974986d17b0c12de3f0c1346822b652de813cae786c2278798c894398af1000000000000000100000000000000000000000000000020b9d97d113886bb55bfcd08397f7a856cd978cfe2c909dd7d9fbed613d6041549000000000000000100000000000000010000000000000020558fe936ee685288d941dc83a9a37bba94131d179fed815b5b48d2ec41aa912900000000000000020cc7406e51c008e55eae9cd93375090f07e48d81ff1b08c80b38623306024e141609b3655d781fdd7c6de0bd07cc51b3384d09d6b71aefc896e8defbde215f080000000000000029000000000000002017261fbb39ec35ceee742646b1e571dd0bab81ba9a7a15a65ddf8df00d172cd70000000000000006000000000000000100000000000000000000000000000020f9ade45c698000d4db6bdb2afcf13e88c9adfa673c964f87b929383405b7c4d70000000000000001000000000000000100000000000000207c08b3f0bfcb3b064c177f3066a168afc6e05c59dcf6af007a1e8cd1806fcb8a000000000000000100000000000000010000000000000020dff32ca48d4971cf5f93d302222b8226b985cd71ce3c295a08128b201c1c07920000000000000001000000000000000000000000000000207ba848f1e675b8883e48cdf04865e44723e47996866d304a428430575d7b767b000000000000000100000000000000010000000000000020988b27a7e5234a6fd03ea8cbd817a6c5f063d91b38fabd3af8b641bffeb4830b000000000000000100000000000000000000000000000020fad84bea2102473bd2e5903e5abb909047ccf25aa71993ec60d53b0cd97885fd00000000000000020fffa8fca43ec39853162e5912233199054b8080320d1f15dbac44fd7174bb3b14860460c95d03078ae13c2c5ba447154269d91efed7ba86b42eefe6d989bfc200000000000000090000000000000020c943c3e5ba7150c846e31d58370456768cd8bc0fa02fa85aaa2dd38d775ced9a0000000000000005000000000000000100000000000000000000000000000020cf6ebc9aded1c37c86193c66cff8c99ef48458a84ef2b1ffba31acf4e85ec69300000000000000010000000000000001000000000000002000dd060ea92eef325ae1446558517dfbf3d7742d7abe888b991217c5c3931a34000000000000000100000000000000010000000000000020a744b4250d3c04603b19de93d9b1fd20e0b3c2fd9f2a6061c9cb837c8347044b0000000000000001000000000000000000000000000000203d111dc383e2d9787f30e9154c06a0e8d348c8326635c747c62479b477e3ed940000000000000001000000000000000100000000000000207e820e33747503852de29a5b69f7b3814b934438007633c5d886b1dbe95b908b0000000000000002043df211a260aebd21b0f5419ea01c17ee25cfb220a5454bcf812911e132c46a303fe3beeabd3dd8ba5ba3e7908e0b137eb1993e5d74f950e4508698091ea192000000000000000900000000000000206d759f50e176f04b3ea0db6bdd87c15a024fdbe362820cf284721ea7a27d5369000000000000000400000000000000010000000000000000000000000000002038f6e270a5dd6eb0c51c3a4b1a41137e2f50b12886b853ac56976927f1b1d164000000000000000100000000000000010000000000000020dcedac952818b94928c6b6046007de85756b9466716a8dfeaf0fcbcc028374160000000000000001000000000000000100000000000000203c2f0a5874434e7592b7b4ea72187a1a43d0a49612dc9bbff7cdae5734ee34d40000000000000001000000000000000000000000000000209a804787a51e13ee49cac2a7e7fb57613f09d5aeb32ca7946986aa0b5aeb48b600000000000000021765406deb1b04c2873ab813745a6ab8ba98a4f8ef9b8e87b69b4d9d75e62b2d39fe0160aaaa297324e99645b5c6947f2e4aa30694893302125fa2b18456bb290000000000000001000000000000002052ea78578ef0a2f5430f1b757700ceacd6014c30b7f62f7afd81d5e0782af70c000000000000000300000000000000010000000000000000000000000000002059b0cc6978261609812cb94cfcb1f99c0db80cf167ccc39a94f946a59ed3ee7a000000000000000100000000000000010000000000000020c552e74f0ff5cd5a976beceb64476c5231ffa0a8be701392b0cfdfcbd43bf12e0000000000000001000000000000000100000000000000203e5ee55f8cc8311f3bed6a4309ec06f68a7cf1198a909e84a2b62d6d9560c34300000000000000023cac27bc92774efd06d90b5dcef71371f0ed87d908885b4fe5bd787550de3aa1396dd705c9f6756794682266c279e364bf72a16ea13ae74e5450c1868bbf324c00000000000000010000000000000020ad4df8e4e74295d6c7c7e754e397355bc558ed7f181b922881f30d4e6939ffe1000000000000000200000000000000010000000000000000000000000000002074022260d04bea54d8bd71a21595ff16c838df6ee96e499fa36e5cd349659b92000000000000000100000000000000010000000000000020b83feb26ae2178221e3d05f44e9c162801635800ec3d4bba853ea900ceda208500000000000000023d182ee13e91fffb431ae5824d71fe63d6d3176270dc82d77732361cb0d8176733dfbdf9e58d01b143fe0d5ce217edc7ebbceb4ab3bed556600b59d84c74438100000000000000010000000000000020a8b916b7cbab71d0e8ac46a0bf12af901e15cf92ff42e817458e002fdad37cfc000000000000000100000000000000010000000000000000000000000000002064ccd440d20046fc058491b48c38663107dd0f9ad969303c5192296fe0ea66950000000000000002152cf637d4febf40a7998e10a0b41aadd6c434a68a6cc82c274d57510d9a75ab045823c7ccb878b4d0d2e978d1d0e826329d9d105b3a6a4161067f77241c801d \ No newline at end of file diff --git a/contracts/zkllvm/merkle_tree_poseidon/public_input.json b/contracts/zkllvm/merkle_tree_poseidon/public_input.json deleted file mode 100644 index c4ca98d..0000000 --- a/contracts/zkllvm/merkle_tree_poseidon/public_input.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - {"field": 5}, - {"field": 11} -] diff --git a/contracts/zkllvm/mina_base/circuit_params.json b/contracts/zkllvm/mina_base/circuit_params.json deleted file mode 100644 index 10b34c2..0000000 --- a/contracts/zkllvm/mina_base/circuit_params.json +++ /dev/null @@ -1,31 +0,0 @@ -{ "_test_name":"Test name", - "arithmetization_params":[15,1,1,30], - "columns_rotations":[[-1,0,1],[-1,0,1],[-1,0,1],[-1,0,1],[-1,0,1],[-1,0,1],[0,1],[-1,0,1],[-1,0,1],[-1,0,1],[-1,0,1],[-1,0,1],[-1,0],[-1,0],[-1,0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]], - "modulus":28948022309329048855892746252171976963363056481941560715954676764349967630337, - "r":16, - "m":2, - "lambda":1, - "batches_num":4, - "step_list":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], - "D_omegas":[ - 21090803083255360924969619711782040241928172562822879037017685322859036642027, - 10988054172925167713694812535142550583545019937971378974362050426778203868934, - 22762810496981275083229264712375994604562198468579727082239970810950736657129, - 26495698845590383240609604404074423972849566255661802313591097233811292788392, - 13175653644678658737556805326666943932741525539026001701374450696535194715445, - 18589158034707770508497743761528839450567399299956641192723316341154428793508, - 5207999989657576140891498154897385491612440083899963290755562031717636435093, - 21138537593338818067112636105753818200833244613779330379839660864802343411573, - 22954361264956099995527581168615143754787441159030650146191365293282410739685, - 23692685744005816481424929253249866475360293751445976741406164118468705843520, - 7356716530956153652314774863381845254278968224778478050456563329565810467774, - 17166126583027276163107155648953851600645935739886150467584901586847365754678, - 3612152772817685532768635636100598085437510685224817206515049967552954106764, - 14450201850503471296781915119640920297985789873634237091629829669980153907901, - 199455130043951077247265858823823987229570523056509026484192158816218200659, - 24760239192664116622385963963284001971067308018068707868888628426778644166363 - ], - "rows_amount":131072, - "max_degree":131071, - "omega":21090803083255360924969619711782040241928172562822879037017685322859036642027 -} diff --git a/contracts/zkllvm/mina_base/gate0.sol b/contracts/zkllvm/mina_base/gate0.sol deleted file mode 100644 index adcc72b..0000000 --- a/contracts/zkllvm/mina_base/gate0.sol +++ /dev/null @@ -1,1020 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate0{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(0,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x113aa632e5e0d0977603751a0f88a80e1f9334b972d5301c3329337f6c9a64ba - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1aac4f73877aae401f9b26e3e814e1249be470c9dfd78209e67a28570f55c454 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a58f904f0ca4d9f490d729e1f7d2c9593307d1a1473b7b827857a8dd40501b3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x83fd7e02599b33dbb72f182288555fbad24487a8eb89e5caea0363dc11c6461 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2bfb77cded6e66747a7d153114c05635e8c5ad9764f9a1df3e8307dcbfa6c94b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x58c01ca4e4229947f6552a154b84a37e74551fe8986c63be49057d21ee96c89 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1e483d4ca0288ef4f9dba8ee0d93f9ca4e647b172e3c1be125c33b4db972841b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x27fc5f972da010d109ad375b7b855e75f875109d8d557944f5dfca9992f6352a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x16e219e3a19d97dec88d3081fc37f3d19f07e17fb08893d2c7d489dd44268db6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1cffbc5f23d20549c9f8341e463b7d02490e9b0c1c8668c0f42c0263454152ee - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1e750885fa3afd2c05cebb1030b85f0d821d746348408af830d6da7818789b0d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1dc1d26b3e882d81f8e2aa8d62ec564e0bb13c8b06805e85aeed2b5e04af9eea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x15e7da83ea52649017483a52ded6c6b1921a5cc40665c0294c4a3b6751a095c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x35908458a0de9bfc2d1b6bfb962e66b8d7e0ee9d113815b7986f51fc9ea72309 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x29641be39dd86a91010a4b32219a2ff2c4419a85a7d43b5467cbd47ea46c1ce3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(1,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x11d70af565aa2d16e88bf7cf8d8cbabbe0c86ff1ec4e3d1a19119c1c8d70199e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30212072579ab5dd7cefbf3038bbcdb9d72f5a158323fb8b4fa8b0336fd0d7e8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3b95c12679c2d28c622743616f58b902812d279938ac3a57be0e018cbd30fb1f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1e61f74b9f3cfa4bd798f453547953e18dee91a490799ce57f7eb54b064d128b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x744c95ed14313b2b178d714bc1c0ed5b412e6fc6806c5a2979fe2dabdb19d37 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x21655c01da2ee933042957033251f55666304ef85dce6404943e967ba041211b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3cf0cc128f25b3d4047bb00e58aa747ea527d5fb2ec657b249ff7c9cb82a0e76 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3d7d4fbec8cafb6a54be830d3b8c7640ba2a5f05471f5ae48db239904341b450 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x364ead7215d14a42696fa47700fa020c415477fdebb927664fd984540137da11 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xff7c2444a154c6cee3857402a1aaa9827c04dc7a096fffb8ada9412fc261090 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3e815318c309839eeddc6340ae213f190d584aa177712ffafb6bb52e5a432f6d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x850e2170ab8a45e9a46f072a9797c2ad4253b028aba718765bc61abe7bd7f6a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x29008a6d7c95bacbf1390d4f0edd8c931e55dc43c939fff8f47289ae5f1990b0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25a67a2b4ca62fc219f4d12544e7ac0babb539104868e997f65b60e4b103c028 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1aa562b41464a15e754687d4e544d9805c8f25427e96a31e4be69a541e1e068c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(2,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate11.sol b/contracts/zkllvm/mina_base/gate11.sol deleted file mode 100644 index 794477e..0000000 --- a/contracts/zkllvm/mina_base/gate11.sol +++ /dev/null @@ -1,1095 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate11{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x6ce96688c89efe6c3c0600302b1dc2c979a862e8db740494255bcdce9af5937 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x26e1c88b9d679a9c0254064dcad60837d5db78f0784b45768fc1668dc8867e06 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f0765068dd086379f2dfa65f13df630e7cd734f01b42e6543408abd18c00c28 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x235a9751224d10c6e58387130efb2cd2a9eafc5ac3737ae6118f3d99b582e1f6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a21645f5c8b8d3c4b3f463c43da3440a96d807a5253aa348ae271e3fdeedae5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xc6c2142c72cee77e38a7c411f819fa131613c9918fc6c4f6c06df602a971e12 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3c720d02e75728a9c7f9556266b59ee0be193cc295c4273e5ab47472baea3a50 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3a39afc00e11ab70dbca526eb728046b59246df30058b3c81ec6c9e88092afe5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2fb377292f97d27d2c299b7d9236a9a27144f6db5ebd68c46a7598a6757d5d56 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x135529ef73f611951187ae4b5d2d2c485e7c5ca5614cf553520da02d5b539d76 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x35a8242b3cd87d937568438d7a06b43246b03784d4dde188d46fc06455fcac0e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3eaaad06edbce747bcc2fe44ac45fb48079fa42ebc94002b5fd46b30416f707 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x31ef3ef3441e8e856bbe39d663b03f7860247870345269dfb2c0107709dc4aee - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2174dab3400d36d57c200e8d737e22dd78ef89a2fb037c68c2ed2cc0478656d1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x27ed24328f3bbf9effa844022f33b2ce504ba383a53343e357688328c0d4dcaf - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(11,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100000000000000000000000000000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1000000000000000000000000000000000000000000000000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc094cf91b325a61da00000002 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc094cf91abb73c9e9094cf91d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc094cf91a992d30ed00000002 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc094cf91ad92d30ed00000002 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(12,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,1, local_vars),get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,1, local_vars),get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,1, local_vars),get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(6,0, local_vars),get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(12,1, local_vars),get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(13,1, local_vars),get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(14,1, local_vars),get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffb,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x400000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x400,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(13,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(14,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate15_0.sol b/contracts/zkllvm/mina_base/gate15_0.sol deleted file mode 100644 index 37b3e6d..0000000 --- a/contracts/zkllvm/mina_base/gate15_0.sol +++ /dev/null @@ -1,1234 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate15_0{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,2, local_vars),get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,2, local_vars),get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,2, local_vars),get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,2, local_vars),get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(6,1, local_vars),get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(13,1, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,2, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,2, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,2, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,2, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,2, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,2, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,2, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,2, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,2, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,2, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,2, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,2, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,2, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,2, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,2, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,2, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,2, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,2, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,2, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,2, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - gates_evaluation := mload(add(local_vars, GATE_EVAL_OFFSET)) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate15_1.sol b/contracts/zkllvm/mina_base/gate15_1.sol deleted file mode 100644 index fcb6287..0000000 --- a/contracts/zkllvm/mina_base/gate15_1.sol +++ /dev/null @@ -1,345 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate15_1{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(12,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(14,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(12,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(13,1, local_vars),get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(1,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(1,2, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(14,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(13,1, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,2, local_vars),get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffe1,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffff1,get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffff9,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(15,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - } - } -} diff --git a/contracts/zkllvm/mina_base/gate16_0.sol b/contracts/zkllvm/mina_base/gate16_0.sol deleted file mode 100644 index d65e9dc..0000000 --- a/contracts/zkllvm/mina_base/gate16_0.sol +++ /dev/null @@ -1,1110 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate16_0{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,1, local_vars),get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,1, local_vars),get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,1, local_vars),get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(6,0, local_vars),get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(7,0, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(13,0, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,1, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,1, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - gates_evaluation := mload(add(local_vars, GATE_EVAL_OFFSET)) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate16_1.sol b/contracts/zkllvm/mina_base/gate16_1.sol deleted file mode 100644 index b04d1f0..0000000 --- a/contracts/zkllvm/mina_base/gate16_1.sol +++ /dev/null @@ -1,1269 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate16_1{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,0, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(8,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(7,0, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(12,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(10,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(14,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(12,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(13,0, local_vars),get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(14,0, local_vars),get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(13,0, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffe1,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffff1,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffff9,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffd,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(8,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,2, local_vars),get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000001,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x496d41af7ccfdaa97fae231004ccf58c412ebcb86019a410000000000000000,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x224698fc0994a8dd8c46eb2100000000 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,2, local_vars),get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000000,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x496d41af7ccfdaa97fae231004ccf5908a01dc3992aebfc188dd64200000001,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x224698fc0994a8dd8c46eb2100000001 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,2, local_vars),get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000001,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x496d41af7ccfdaa97fae231004ccf58c412ebcb86019a410000000000000000,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b692be50833025568051dceffb330a73bed143479b6b5fd0ce645cc00000001,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,2, local_vars),get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000001,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b692be50833025568051dceffb330a73bed143479b6b5fd0ce645cc00000001,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000000,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x496d41af7ccfdaa97fae231004ccf5908a01dc3992aebfc188dd64200000001,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,2, local_vars),get_witness_i_by_rotation_idx(2,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,2, local_vars),get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3fffffffffffffffffffffffffffffffffffffffffb8503e0ce645cc00000001,get_witness_i_by_rotation_idx(3,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000001,get_witness_i_by_rotation_idx(4,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x200000000000000000000000000000003369e57a0e5efd4c526a60b180000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1b692be5082e35c713e4bee4711f3ce08122ed4348e6aec5809f5aab00000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b692be50833025568051dceffb330a73bed143479b6b5fd0ce645cc00000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b692be5082e35c713e4bee4711f3ce0b48cd2bd5745ac11d309bb5c80000001,get_witness_i_by_rotation_idx(5,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a1a93d689e9f8b44bf04c0fd60a0f9af9d508bd2e179c458fd2678ffbb69a75 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(16,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecffffffff,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ecfffffffe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,1, local_vars),get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(17,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_constant_i(0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(18,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(19,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,1, local_vars),get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,1, local_vars),get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(20,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(21,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate3.sol b/contracts/zkllvm/mina_base/gate3.sol deleted file mode 100644 index ce12d5d..0000000 --- a/contracts/zkllvm/mina_base/gate3.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate3{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xb57260badff5653d7fde8ed417e16fa8bcaeca3ff415a361d690dcda1346c97 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3686aa934c12341b0cc122df6b0ebbc4d6f7d237b19cb6c014c94964465d2327 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x15b2fd73f652c63cf9994874ba30522afaa736c2d1b0908126adce8686d8d9ad - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x33ce497097af4c428e01b17667b1d378e0f17500b45aaa52eabbede98feab4ce - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x25d835f46ac2c2459471fe30f828939f08257be86a1ef9c0d90943c8ab0d1271 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2f651683da29fdbd47928e96e692dded2fdddfa929739ee2619bc553facfce81 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x96736cd0d5e9084465453f7613d218658b0407a98c480b35c7ddd2257c5263d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x381da1f537045c23ec9f07565605f4214437c6f92a3c483e16268ffcd521941 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x103afdc3a1b512a5582035f0ab6d0e49329b6862d33e2fbb75b81df8737a7588 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x13edb8ca0c06dbab904b0205d5fe71fc2d163528666479491372a3888125989c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d378a36486a6e5306fcc07493e1ca8efb824dd81604895cb853adac5cc7ddb0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3256ca176a7a82c658247b895125a5b0f29e79665f9f1dbc548bcef77aaad74 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1e7148a905a0e2060e146dd107f4f7adc9bf1f54d2bebc1a8b3e1bda7ea278a8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1c430efcd6a8fea10e8e044bcd6435f3ca710076b71dd326e8aa8d1dcfe3043b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28b8b3c495643efa8209b461b29d45245a531280cb75a1547d0dcb8afa284316 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(3,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3e67d93f11dd68d214be8ba2c42bed3d74094ce3b5edadbacf44bfff005c2ab1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xf434e82029dd3b90cd8a0967ce649729a2fda2bd2bf0bd83a57175a43bc1058 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x427e93deb399befdd63042e0b5c5bd1b837160848785e11dcb1e4e8d00d36b6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x376bc13fe260460bc37bf8a88c76864edb82e22a712a78326eda481cba9cc160 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x198f4073fe7dd1ce38f689d9627612a765ccebcc6c2ec7d5b9a424f4674a81ba - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x322ac4bea665187242c197649a14335b8e569e671bd69a2cd1d323b14dfbf808 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x397e882d6ca7a1f4737189575a9a3797882910155f9d5189787226caac0dfc3e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xade90b8efbc799123cdb5272730f3388f481eeb49c5adfcae66b5a7e294d30c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2029104dac9401ee13c8c91808bb73fe371c3e6bc79100d56760acfefb9b0952 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1367d38cadefdd7603e4b72503261c33ebf93eb8e4f59ad47752403deffcc39a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xad08173899d27924638dd2b2f88877a9ad4e0c959f1433f5e1961587ae3e4bc - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x271c3f3e355a1c129911e5490aa5a37fbe6dcf4bd49eb14055e9dfa5eb61c82c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xedb4ed214c82344c2693e5f72af8adc3f38951b77b79f5c6b8285c97bdd1523 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2bc40f210cebc814def6adff2d2bf9193cd420c8a10f61dadf6d6f7bcdea2367 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x214116debc0cd4b062656f529d47b7c38ad218858df931fc2d4e9da2710c70ea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(4,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate5.sol b/contracts/zkllvm/mina_base/gate5.sol deleted file mode 100644 index dec0a86..0000000 --- a/contracts/zkllvm/mina_base/gate5.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate5{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3009386b52e5055b6bf772a071193b84285e68e8c1c6d04bf9eb3e04ec7c1416 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2f5ef53c118f839d17420d324b653d32e3d2c07eecdd7cbbc0da152db7fb0ea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x229efeb32c10f2782fc83a94205c8f58eef3df9ec21e4c02616e6082ce7fe370 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2dc1e7a4d1380f8daf853e1b18bca7646fea0920c2bec67d1b4bc765a06f3adc - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xf487f3f3e34f9f69dc8cd7db38afe8278ccfd1f8b4443f3de453ce31424130f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2204c7fe4851b1df6097e6a9ed69a391eaa3ab9f175e0ade523f3a97290a5012 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x10211bd7fa4d88bf9b169c38beaadaaa20ac02ea76bf1ea90db4ffcee0fb6ad9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xe4d49a3bceded12c90225aca726f32656f4cf07758d01febcb7cba7b81b5dd6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x21c35fcc27bec49772485abc19d53d198c01d89ac14bc17e9aca36cafce61f12 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x33710ee97bdafd73ad5cd26c06ceceac3d17fc0aaaee3666cf2360d5cf252bcf - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x8738cc8c5c95a126b5cb08a1a218585c0beaecbf5cc0c202a130e1d7aad9c73 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xde75113dffb75a9bfea170dde9a8041d9aaf4f7315707c01690b67757a3d0bd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xced10834452cebcf0df0cf6ce4f8fc885cf875ff12732c58c5a68c0089886b3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xa9bb658ec7c98b39f805ce21273f3f2f5259db645e66049405e6354d245b875 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x333772e36eb7e2acdee8b1aa4b64db7aba1a1101469f45e982b310304a824ca8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(5,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x22103342cc8bf7fc52d7b43b7546a60cd88d4ae331d9325ad3a2e5596f33cff2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x12d9c33d1650ed92897261e2d40d340d01e2da78ec9ba48b9bbbc529118fcb03 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2ee1ceb24904e5d71dbefd731c2cb83afcedf5c09e3bd0c1012d36d1b8616964 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3d8bf6bfe16dffe2bcb345d797161c8eb214ff39d21fd52c668edd71aec0bac3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1b57ad420634d570122a17a5a67982b70b8df3802bed743a94afefe58f000061 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1fa2e4f11ca609de7ba539b0081c7c5c36c4b8bedf2392c621e65ed1b8cd6293 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a3cd81d336c1390f0dc4a1be36ce40463fa86218bf75669d010b71167d206fe - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x620c1dd2dd4f64bd9a25af10e8a6f633aa809f073b3192b7c35227c77b67d48 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x364f72a77ac27536f73a4eb1a1479ee4dc52895163b0403b9f9d7dde03205600 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x21319dc8b28618e824b59706322550ad29be49c295d73827d36b554263a85f5b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x42f7648d85f11f71d9c05a1ca49e7249a6edc2e0608e4a5b52fe78964605e40 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x12158a0c85263036b36aebe404b8e633ab66439493bb4bd8611df7e584d502 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x9205e75645e4e6bdd7b6b575350f9975702ec52346c56c9e71e6daab2f19a34 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2e616724c0b6328034c4f9cda98263357cfd0deec832e4e3a3b0cb5dbe6ce2f5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2eff4de3cf9b8a27e94c10328a3c51ecc5f1ebbf43e056f0db91b1a7192fd3e8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(6,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate7.sol b/contracts/zkllvm/mina_base/gate7.sol deleted file mode 100644 index 59ae177..0000000 --- a/contracts/zkllvm/mina_base/gate7.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate7{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a86e064415dec6c8df737d86b1499810cc798bfa396ae72191de52e1b15aee8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x252414a163b2aea1302daf1411a95d580b5b5abe407724dad781ee674caf419d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2040b8c77bb565db6513dac171bd9f1b773cb6901f234e1b786e226bc311343e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xbe756d6aa913ae5f79ba644619c57de4e3f606f3ac9647ffe394d3cbcb150f3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x36bf94a3c50fd6f0668bfa2f3ae4196add96e6bb34be0e6a25c056e8cd170063 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1c131a28f4c733362bc326dc1a1c1d09f52911bf780b0a19a091c30bcc90a43a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x27ad2a8b1b92c8f5f4e19b093be11472e1770236e4a6cfb6330e01f48198dcb4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x359a8fd833172b0dc715769221d8c48aea919094bf168cb4e5b49354d74f3171 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xb7d0675b913ca7ef7044497026b070d679f5c89cd9dd7896ea822a7aee0a5d4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x9d0e9b0736fa4cca5934089ece2dbd200eb78132a131ae6eca072b13ab9c13 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x381c680afc063e315fd7b9a4d6af15bbd730d31153e52374fa8a9e967a96b211 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3bfa0e038ee78dc8c2914af5f60404fa6fd65e1b68980b632e3f7ed624e8578b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x341f7b714c1f638fd8eef527bd3afdbc05aee95abec8b5149c2e69985da9a740 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x19487877026753fdf4536d2f1886d44a225992457174b1257b94e15ca2645791 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x702ace72c6faa37d0106422cccea5ac0637d4c5cae038b32927a9d9aa205a8e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(7,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7f42fc47bf3b73745c7cf1835318d0707f696da7ceb8686b064748482ade923 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1391a8223e2837e5fd6612b63c28b8a6e0dad0b99a1c166c430aa790ace4b1e5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2e2c57e4d9d038910af91192771a66e3145dcd5e37ea1f9f407bbb0943ba7b0e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x36494d7c1450ba044e1bb76965316419f767311e13c6e48941eb52365e458212 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a2af6ae9b377a89c057c3208892bc9c9fc47ee44cf79575e236511f53afb523 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xbd8024035c315dcf9c14ec73afaa39374aa56a9570fe65a769a005e00826edd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x18d0ed18cef8848bce810dabc3cc479e8d6b7b5612a5172cb8c7ca7a37e97a03 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3acdc07a21473f83e6c3c858c28909eed8df07c1dd701802033bad05960bd69a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a31bea1351b45bd4be815c5afe4bb98d5229fe2959fc510402276dc7ad2c29 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x31713e7384ad3aeb2bdfb80e0f4d56f36985d1c2ec53b17ec12fd4eee2c2470f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3ea6e379a158f9a2abcfbae60744d9744487e9c10e67aa3ec912adae2f5610e7 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x12241111a135a2111b40e8763bca1ede065c1ea827408256bb8be4f03cee606 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1c96e38ff646d7c4d97899172b6e8e92e62d05151c58a03ca035ce3dc1caa8fa - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x193254d37c814153a415b41e290fb77fedb62587313297784a10e339682b3f66 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x12ddf98cf99b2a741f989252e011f16716204e87f8aa2b64e3d6dd2b208d10ab - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(8,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate9.sol b/contracts/zkllvm/mina_base/gate9.sol deleted file mode 100644 index 4b01391..0000000 --- a/contracts/zkllvm/mina_base/gate9.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_base_gate9{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_base_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1448b44e7ac8dccb5b10a092e71d131ae1bfb2d104b49b4404761f71f416de82 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x99daf016d73ba272a55ca0f5ebd8ab71a475ca2853cdf804092081f7ae4ddfd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x279707ee7b7d394b5a59e57e375535ed98f3815fe855bed796ff9776423cb510 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3486fe398f1e28a28d914772fff6af4c58e2a8046282d4824d51293ed0874b2e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3cd3b427548f1e0da508850a822cbf373b7df7fa2987103e95fbeb86246f4791 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x231c924ce01915c326cf724655bc5750c604f00b62fc5d1d983c4938793f5477 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x19a691561e6ea1ac25cb86162ec3c36e1d40b6b76b1aa10a99c0889701b48393 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xf0d695d967975803570a4e1d963fee9f1f8a5e4dff75ef48abbfbe32c592a25 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3da7769e1008768278149538dcaf1060cfe292b43d7ac7e50792979f02e6862c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x295b61968de17f96f2be1f9dd61643d2674cf65014946592be08ab93abf629d6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28535fd3fae03527f8c30298def32bde81510710d02b4cdfbf251af93a25842 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x16642b758bf4886ff8ad97ced547f8d3b0047b1663097975b6d8fefd6ae7b84d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2e59647982615dd13e4d0d71699e8ed63ed7a94d5f64e6afbcc2ee336f8d6fd6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a43e50c6e0c3e0dd7b56a256d4a77c3070c5882be29a068b1862122dd259b33 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x9e54c7bc0b272252121c627d44e57ef82bce2225f3b7d8c62cf4cb46a21f457 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(9,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x710c54a49e3ee85cb9a5fe8563745b3ffd03f47e96de4c99257678c0b622ba6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x66d07c0d9ebc24242cca9fb5e5eb250febbb4bfe4b57525042e8196f5551df2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xafd78688148e37e4ef132fc655266307859145bc64b2deb128f132505e239c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x504a43ed9fdfa79233345cd22fab3267e52e0c73eb680451900e83b25682914 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28d483d27181b4f92e7c5da8a486f8b651af8ca772e8f12109d429c08d621990 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x114ac01c5d8797758fb6ba961ab5f0f2fbad634d4284615ca459c82b0982a81d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3c8a51a94726cef2aac12882bf92123c320d5aa1d7318750aac2d535f874afcc - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x22b65f2ac43d66c340e04a2e256448903ddc28ca336724dbeb6ddc30e83e10c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2cd2e8478354928f82205e0fe20e8db54ecd41127f88a9fba2190ab6806acea1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x39d25ad7f6b727393b5338195e55bde112a7d782650bb2a698cc72a1198aa07c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x35b4b2a321ab568b15b1a811becd2d54fd35d5fb1733c844dd6e0fcfe5227f08 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xca90e04153b6c33548ad48f44127de33dad333a76c82170cbb434f90079b170 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x25642daf8a81d610b6a646410a64b19f403c42cb8be86733e1431140986386fe,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7b55f6050c5b78c81d29b095fcf55dbf3d93bb6ae6857e50278a679df3af934,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d484fdf643cf7ff9b2a31b585fc9ac2a1233f549a628a5931b192e6193012c,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3bd8de175633cdaa87ae014f1fe6f3a22651cde07a05259d1ac7f2260075bfa8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3611a838f43caeddf4ef867c503054417aae305760a767dd747585f94b40c5bf,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1f67666943d65692e897b2c52b37a67ef131727cd42a9b9d7a92d598c95dba72,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2b1c6524d1e8e51dcdee9be61180d9270927bb1363e9d68364b055783c4d1964,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3ac264d9cc000ce35b03a8db3194bbddf0c5702e193461487744c1a53208b750 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28babbca8497809a56a6f3e209de7e74cdf3c327c7f37e8763ae1fc9e9109836,get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x356d9c23e5e62e83040ea4fe9944da08c669ca8e81f47139c3efafcd3d3beca,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x30e04108a2b549c4857ed07f484fc8c6f6a77299f927ccf4bc7af17f551eeb5,get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1982693515021a242c24e0f9974f6332cf1c760be8f864aa2eb4ced304b37fe5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(10,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_base/gate_argument.sol b/contracts/zkllvm/mina_base/gate_argument.sol deleted file mode 100644 index 743d55f..0000000 --- a/contracts/zkllvm/mina_base/gate_argument.sol +++ /dev/null @@ -1,119 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "../../../contracts/basic_marshalling.sol"; -import "../../../contracts/commitments/batched_lpc_verifier.sol"; -import "../../../contracts/interfaces/gate_argument.sol"; - -import "./gate0.sol"; -import "./gate3.sol"; -import "./gate5.sol"; -import "./gate7.sol"; -import "./gate9.sol"; -import "./gate11.sol"; -import "./gate15_0.sol"; -import "./gate15_1.sol"; -import "./gate16_0.sol"; -import "./gate16_1.sol"; - - -contract mina_base_gate_argument_split_gen is IGateArgument{ - uint256 constant GATES_N = 22; - - struct local_vars_type{ - // 0x0 - uint256 constraint_eval; - // 0x20 - uint256 gate_eval; - // 0x40 - uint256 gates_evaluation; - // 0x60 - uint256 theta_acc; - - //0x80 - uint256[][] witness_evaluations; - //a0 - uint256[] constant_evaluations; - //c0 - uint256[] selector_evaluations; - - } - - // TODO: columns_rotations could be hard-coded - function evaluate_gates_be( - bytes calldata blob, - uint256 eval_proof_combined_value_offset, - types.gate_argument_params memory gate_params, - types.arithmetization_params memory ar_params, - int256[][] calldata columns_rotations - ) external pure returns (uint256 gates_evaluation) { - local_vars_type memory local_vars; - - - local_vars.witness_evaluations = new uint256[][](ar_params.witness_columns); - for (uint256 i = 0; i < ar_params.witness_columns;) { - local_vars.witness_evaluations[i] = new uint256[](columns_rotations[i].length); - for (uint256 j = 0; j < columns_rotations[i].length;) { - local_vars.witness_evaluations[i][j] = batched_lpc_verifier.get_variable_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, i, j - ); - unchecked{j++;} - } - unchecked{i++;} - } - - local_vars.constant_evaluations = new uint256[](ar_params.constant_columns); - for (uint256 i = 0; i < ar_params.constant_columns;) { - local_vars.constant_evaluations[i] = batched_lpc_verifier.get_fixed_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, ar_params.permutation_columns + ar_params.permutation_columns + i, 0 - ); - - unchecked{i++;} - } - - local_vars.selector_evaluations = new uint256[](ar_params.selector_columns); - for (uint256 i = 0; i < ar_params.selector_columns;) { - local_vars.selector_evaluations[i] = batched_lpc_verifier.get_fixed_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, ar_params.permutation_columns + ar_params.permutation_columns + ar_params.constant_columns + i, 0 - ); - unchecked{i++;} - } - - - local_vars.theta_acc = 1; - local_vars.gates_evaluation = 0; - - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate0.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate3.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate5.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate7.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate9.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate11.evaluate_gate_be(gate_params, local_vars); - (local_vars.gate_eval, local_vars.theta_acc) = mina_base_gate15_0.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate15_1.evaluate_gate_be(gate_params, local_vars); - (local_vars.gate_eval, local_vars.theta_acc) = mina_base_gate16_0.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_base_gate16_1.evaluate_gate_be(gate_params, local_vars); - - - gates_evaluation = local_vars.gates_evaluation; - } -} diff --git a/contracts/zkllvm/mina_base/linked_libs_list.json b/contracts/zkllvm/mina_base/linked_libs_list.json deleted file mode 100644 index b729908..0000000 --- a/contracts/zkllvm/mina_base/linked_libs_list.json +++ /dev/null @@ -1,12 +0,0 @@ -[ -"mina_base_gate0", -"mina_base_gate3", -"mina_base_gate5", -"mina_base_gate7", -"mina_base_gate9", -"mina_base_gate11", -"mina_base_gate15_0", -"mina_base_gate15_1", -"mina_base_gate16_0", -"mina_base_gate16_1" -] diff --git a/contracts/zkllvm/mina_base/proof.bin b/contracts/zkllvm/mina_base/proof.bin deleted file mode 100644 index 52047f8..0000000 --- a/contracts/zkllvm/mina_base/proof.bin +++ /dev/null @@ -1 +0,0 @@ -0x000000000000002014cb1a286c58c4ab2ac59057c827929acd2caf324140fae2d2c0dd768bbfed7c0000000000000020b3799bb2b33db62682d33a18f7e53d7c6831a34944d341f9e28d32d59f24fe550000000000000020e8d97ac3b25abd10e6f572df58a247025f5ae92954ae5f0fe782d2662ff4a767000000000000002086717ac43b7d5f82c8302f3d130b855380f095945b7e69704f38362537aa44091cfabb054c12cd71a0e49d558454af35c6fa55fdc11ab3ba7e9386f5fea75f7a2a1a4bf5fed988d7b3a0d882ba1dd35487ef417fcf1ae607652c1631ae9ed09100000000000000040000000000000010000000000000000313cce3fbe2ffa151b5a9ead5bc4c0a1ec86f1fec6d6acfc0415761e29ea022be1067bbaae9780a6d25fdd013b4e2ec9cdef3ef1ead105fbb92b6690c8c8fbb542c9c23f6daee1371a349506109bd90da3c2fcadec128f1f2759f22e1b2bc1e6d000000000000000336f5c615752f7ee51c51f4f6529b02f98a8019e2eedc18a2a3c7b91e726376520324f1bee5504015518e9d7463f0ddadd993b324d2d917f5f8d2d11665d408ac3981dd9fcfd5fda17713ba27af721d1ab84e12772957ca3407f6e662fde7d00d000000000000000333ededad7f29694af337640b2db62bc7508f30441c64ace3e941ac2d3ff3014209bb76293c4c1749f575dab500620b54bda0bf84888053e370f350e78a46aa281ac1f3b817303e9f3d3a2a36aab4a8ec9efbf2e83bfa9f8411c761cfb331d0e20000000000000003212c7af8f01c4e46539a61dd6714e82f41a84bb0a3221077182fa0c4cfff47d522ae21015a789c482bd7efa40da3f64345092abe63f60fe5f901bc09f0bf949e35108299e90f77b5f7d804114e25e6fbec03097a142424c72d40616c79cecee50000000000000003264c84e3d6d8a7d9721a20cc0185bf07fb6ab61ea8459cd80ee992c8fb8a0e822ac960e6a1773743c7fac7bc3c64d383dd8f83034f06b35fd1108f68fdec24242f5dc6b6e3700bc35782356156b211714a5cbbb757cc069df4bda3a1a3e4b0e900000000000000032a996ab9875716152bcadc1ddb942435ece805d11b86266b57dd29cf4edce0c50d2f7c4a5917fd2410f4c94e311270b61eb0a56cdab2817d19f329f1d6807831025e55303c0dae69f899c103d68d36157596c4e777bb2ba694793ab7442502b40000000000000002098e202af58516e27b2bc679c8474220358373625925bcc479c85fe37cb4551310601b373bfdd61a910c783005e8fca4daadd32ee1c127570136e4853685cf350000000000000003322d15b75e8541d64520be70443466366772ef1dea0b0512e493aa0b9e9fe32412768525718fff265c79f8d06a511cbb3940b7df6ece6495e8f91d081ee8491a003b9d0eb64e989e9c6eb50778811ca0517020cb0bc7d59e423ad2fc75df827700000000000000031d6d1d0dea6c034c3f5ea2a9b9aa7a557fd81c36007aafa341c567424b8d1291267aa916eee51d77123414daf0f98eafa904f2f5bcb4a9854c1beb1ddb6717b52386fa4d10c90bbade5316ca76312a81e2f0f49ef77156fdc0e777d8efeba97f00000000000000032d11cc8f25a1875ae84531feacbb2247b133813fadeb99786230d53024762ef422e91d1707986d444b304e8c7e449a4baee35a858d36195f0b2f16cacb449b15027745bedb5f8c3e9127edc32907ede0117e40cafb12bb505e6dde86081b8c3400000000000000030ab79e3cbd068534985889abab3648697ddfb2d7d7b300d965f50396f35015ba1323dc6fc42e71c62dc39dfe458de5790ba6c72a4ac01c222cfbf31e85ebceb82371e3c3976dd9b06e2c38f6b0017caceb221c7a586a407299b95dfa5f1a27070000000000000003283ba6860a6f8bc8078cb68c9cfd7bef5574b58c29dc9a0c816207303df277dc15b305c55d90eb1e374af61a530e8240eb88e8b9239b91068a2954c8e43b07cb0013cb16d17fd69593446fff87c3a5da892f897858c173e9bef3f1a358ab6bd400000000000000020f264eb9bdcee242a45647375d412061aaf87458de3f68992cb43c14263588890857636a2d19e26e512e280ebaad0053e995f3b621c2d62f95d7674edbe0ee13000000000000000200374fa9569900a515bcfb4cc567bc1fd1d8dceeb263b575ea1ddc60e1c683e925e5f202adadd6c0b844876aaa1f864715a6c27bd5e9f1a4fc360a048a4d86a400000000000000023197307388b020679ec93ab82662d3010fe511e3ce705a912e62538c746125290ca7d4cffac824e6b5001a3678ad3841bf85415e6a877215f77f4be7788cc04900000000000000010034bb7b023343677744637fb03b6b74b71013065252908acd9e926e20f8988b000000000000000100000000000000020f55858c4757b0c4866f3134e5038c652bfdcf29e5f736f1ecfaee79eac567a71e7a81f69b4d36a4c3056e8888e4b7a0d0750414ba566541b2d5c9d1a829a86d000000000000001200000000000000012ff2d36117d2b6d1b710ded9ba86618ecf71ddc747f8424d971e4236d69004d90000000000000001133bf41c2efcb5798e985dbafb52cf5156a41cae929d74cea89a7d88c1048d050000000000000001250526e7e3be9978b3d7347d5e5179122401b6948426b7d25d1cfb387f56ec9d0000000000000001343f3e3df4d15f7e1ca5b26818f046178cddd0020897e25ab45d4479cd32cd0c000000000000000116ec5b9afa9fddb5a1444ef86be06debff776a722920898091c66a484af02f6c00000000000000011e09dd75b248d709e7bbf55f6d32bee4046b7b0fb72971cdf7c340a69fd0eca500000000000000011ea9b055ef6d81a6bf7f2de5eb2f51540845985d6cd83aa8007122416b146c2f000000000000000100290d14f1878f0cbbf08b2c7eb59871e4a16a3a6b49cfb2ed35202e15bf4380000000000000000126c84b8483bab3972ac06b8032ba0e7f38e3479985981618fcc472501e6eeda5000000000000000137ff0ca960b5b175425cc4f9de7413c7edb98a4f65bc3d38d3923a16b0009d51000000000000000113392ddda4cdb03f5f1e9d4fa524ce7040a35c97d4b9069e64a412d6e7b5d4fd000000000000000105cc297c54a8b1f95e9237737ad208b630611129730338f2b1a39e8de931332b000000000000000112668c7ef69ff5a9da88df2845479eaddea16ff4719d277121fc807c5e642d08000000000000000101db497a3b0980697c2c59d84f782eec84f271c34585bd7d38579197c3e426e30000000000000001009b323068a189cf80a3bb674d775d7c433e02f4a614b7444333a53b69866b3c000000000000000128cab0b7371e6f56d7e5a61f508732eff4d5e45e6f1ddb7d556b3485fe49acea00000000000000013340e839649c7d2bae604890e1986775914705f5f8b841aa71178c1bdf611f6100000000000000011fa35b582008c73d600a84a32e1e999185e764b606f55d083c88464e8d579739000000000000004300000000000000011cfabb054c12cd71a0e49d558454af35c6fa55fdc11ab3ba7e9386f5fea75f7a000000000000000110e5a71a7c5e0338247712ab95a76c0c9e567bfcb2eb906d468740f3f944dd600000000000000001147c43846dd61018b6535d59ec451c3ef569d2f3754cd906c77713d6de5852df0000000000000001266d5196252e507b8fa0d2c19d598d3aa8ca85c5413344064c26324557b99e5a0000000000000001002297eeb9e79269ce241dc812bfc224e520d1e62a1968ccb1376893b6a017bf000000000000000100acf7a9a185dc1106b494e85dbecab879a4197ed27f0bff76150ae2912076bb00000000000000010360d650279d4c552186e889d4b9f59a60347f7a1c7b3bfd4e69366cd5a251a7000000000000000110e42f90c6127da9a7a28ab127a1cc03e1067d628e682bf2880e10202c2b984300000000000000011474edd3de5c7450462cb575c628fc1342d9d9f0bebbe2a10f191fb3dcd9f94e00000000000000012648a52357ce45915edf8b4cdeccec602bfaa8b7b05e7409b2506d965041de8500000000000000013f6b39b0b7075bd6da5db8805a009de09758199e5f3e51f94937c2159149589700000000000000013d1820739324cb3243d49a81c20315626b9e1c27b703b570096206b7d66ebaef00000000000000013178a241dfb7f7fb53270488ca0f6aeb90fc28d66ddea6c1ca355de33029a6a70000000000000001375b2b495e97d7e89fc316abf24d16996e19013c09725676278342a8f0d04140000000000000000114c7d86ed8f7378b1ecf715bbb8170fe9d62a23c0a07cbe060db8998b411463c000000000000000127e73a2a3cd415b79a0d36caa98734f8f0a6923028da02464b1c7f0e84565f2b0000000000000001078422d330246c96024211f54fa408dc4c6d0ffcb05b200cac06e88195afdbd40000000000000001062253cae1b85eea3a277f8c73bc5ef54d408fb3eb87c685fc747c4fbc414b96000000000000000112a388a0a8a66ef623ae1aa6d3259f145722f53557acc6cf8c3f970a18f6e4b30000000000000001391c1a1e98354fb99382552e0d01c2f16e23677fc9760bbe7c504ac8b3859bec00000000000000010a3fe93ca50cd05808acad320c5c32bfa7dba62c42372fca0edb62a65aa8f22e0000000000000001252bddd5abc1004b218ec7121eed41638d3bf87630892581aa99cbfedc7ba5c200000000000000012e2c0ff4a8ab90988b76d03b44209c39e134a81827a71d6e08bd21b3170e8bf900000000000000013cff91dd1f05d40e129a20e17dfb548d389a45a21e38547aabcc0048d1a4520600000000000000011ae6ba2a815d3ca4cd606ac609b4cdd68beaa81e5aa0c1565409f18513bf848700000000000000012011da638aa120135d170576bbc3a40778863703e0189cb30fdb2983a9a6231800000000000000013f022e28f476709068a5993acddf620d070a27ad4151b16b47f83a379cf604f800000000000000013b0ae6ccc65032d20b3bfe26055cea409a186272216492aa03245f6210ce18d400000000000000013d1820739324cb3243d49a81c20315626b9e1c27b703b570096206b7d66ebaef00000000000000013178a241dfb7f7fb53270488ca0f6aeb90fc28d66ddea6c1ca355de33029a6a70000000000000001375b2b495e97d7e89fc316abf24d16996e19013c09725676278342a8f0d04140000000000000000114c7d86ed8f7378b1ecf715bbb8170fe9d62a23c0a07cbe060db8998b411463c000000000000000118cdce3d748f460a4029272116d086a00298619b61d1f7ffa1f254b962cbaff000000000000000013c016d06271907465b60e3d65ab60fb9c562e32e68613f9096f4a31f49483edc00000000000000012dbcb53a1d20faad054d31997e87f384d067fe86099316054062ff1b1d946a9b0000000000000001387d3c716cfca2ed1f59850ea5b8886e02db8792a7add5eb4bbe37ba6e25894000000000000000013f4d6b421651bbebccad7e6138a1e12ed4a2347604706ad333344f12c5eb82ad00000000000000013d037abd9a03aa19c2476186ea1be8ddebd050e3c320e2980414aa4b10cfa1bf00000000000000010ac2c9afac705e36fbc080cbd05bec9f24858d2be614e787fa936a4986fdd22b00000000000000010a82505c7328c9a443203dd77f1da1324379d21823ad492f4c3c1565b18c286400000000000000011a28037852c09bbd598e07952f15d596f0bc53b08b59b336f0ba35b2646926e40000000000000001325113e909f164be212ee2b3a7bf3c61570a45e0a95088e4e1a0d952debaa2b10000000000000001311c1f4d94c84f035b4d5d5a92727a761785bac5482f6c52f4310e0bb92e34a4000000000000000115d91f44fdbc0a886dcb0a0366631fdaca42b071ec59adfcbef6d0998a76f82300000000000000011c8d88c7ea19b2e7cd2af41ce6936798878b03540d262d60c15f4c92ec0f06b8000000000000000102337403f74e49f26e1aa3818b4b7ec6c6ff8149284cf4b2910144b7dc097260000000000000000120d147c26c3bea231f87433b51e25addc9dc32f92a0730dec2926a4a01e4207a00000000000000013c0b67d6684d5b65fef4deddd0622c0d9a5b6f1b6b65d550637b0513965f125d000000000000000117b01ad7ee7b9d7bbd889a439dbcfd3d1768af3578770787e37a8cfd303a2eb40000000000000001379234d5017db831fc42ebd3e3b4c0550a0b1552d95d0276de5b20e0cc64459200000000000000010bff1248a0bf01fb05bd309fd3d9e16cdf11cec1b96cfdb678d5082b82183d7800000000000000012794cd3e8f5ddf7547713bbabb96eaaf2c43646a375863099cb29ff3d8be260e000000000000000135a23b1cf43c40bfb5d65c77ca84f9081a34186d354d6afd2de831c24923eab1000000000000000114c820fa8ee93cb28488476694fdb87a1e847b0a7614d6b349357fd13774f10000000000000000011a11e4eeb66384f86dafb6b0547c0772281396731077a610171622ffab5a9ab30000000000000001369e6205f77aaeb2b65678bb102bc1dba52d8bfea1c6bba92c930ae9326660eb0000000000000001210678c1a7581ebb87f3f223ca2d58ed215b38f5dc6eda2f4a3f8e1bb1551920000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000012a1a4bf5fed988d7b3a0d882ba1dd35487ef417fcf1ae607652c1631ae9ed09100000000000000012c0f7faa98ced5cc2c21e9f45749e6eab5e99844595aa4e1ad73b380c415b50400000000000000100000000000000020979efed344d3af4abce365e81207d83a8d909f8ff4e32f936d87aa0bac7983d90000000000000020149a0577ca6898642f277429dadc5df8bc3a56e16f1b87a2f5c3e45116fdef75000000000000002015dec83b8a701e3a8dba34b8237dd2f7e4ab7565f8e81f3dc0fdae2a0c85ad100000000000000020d6e4a966a7c7f6f32f3a643421c51839b2ec8bc31d734b6a0e67c6ed4135f25700000000000000207ce51763167c2d5d61537d41337a8ef59fecef3bf2ecfe6d3b79b2fdc48c576a0000000000000020223b8f544e9763c5295ccaea6eb3b7cb1301419b4cdf939a065d9a9e03221c4200000000000000200fdd2b336f69dcfaa4e58a4dfd3181ca6cd4ef89828312e1ae53351bec7c5b520000000000000020fe5735b472609d52f50c9af7acebdf51b0136d833041e9902de1009e12dae8c60000000000000020d5705c7f7acb049c1d7cc974667c1b1f4224452d9f625be8d0a47b3b1840727e0000000000000020e950a5a0895127c95a36fe86863f28870b0157fa416b7c13fe721cf23da3db860000000000000020d48556dc18d572c1592a5fdada495a41b85b6468e628fefd1018d0bc3e2e35da000000000000002071e2c5d6bb501163893110a8ba67bf1fb5e3366e357f3f8390c7ffd8ac46d59f0000000000000020be4dc51a95106cbfbe2fb1855a7faca3c41c092b94732d454f4c5daa8545a7e10000000000000020232a105d258b8d50dcd3e46e1c13bcb3ab02dc1c373554ad086e3dcec0adf23e0000000000000020bee9323487a966666f79a4e3e054937b5315994054cdbd49852e71b19807fd37000000000000002060bd35c8f6ad3d0af8024557ada4a70f6c05f624b98bd6a000c08a4ddde8c7e600000000000000021ee7b8b67ffcdc5f05420e62c815466f6955536898b9d9f521e0660f514c67232564dc274ef7815eb78c3f945ebcb946d3ebf478b0162566bca6993a190510b30000000000000001000000000000000400000000000064ae000000000000002014cb1a286c58c4ab2ac59057c827929acd2caf324140fae2d2c0dd768bbfed7c0000000000000010000000000000000100000000000000010000000000000020d49549919a7e00dac71551dd4ee20a822fb1d9f44b0943a786cf645e7b81bdb8000000000000000100000000000000000000000000000020942eeec4d7ba4d74861c232192257077b5cf335ebab19ef9407de919304f4a54000000000000000100000000000000000000000000000020b167d17410d217772b41a0ab7c1f264fbb899fcd309f49a150f96b8800dd19830000000000000001000000000000000000000000000000202ff10ba9b2faeda05104dbf73e69a83a5fa48fde3776f5f0098d0b7373f914d00000000000000001000000000000000100000000000000208a977e44fd2770cbe3a7c5e5f604cb1f8094ad5466adbc660649b2d6eead31370000000000000001000000000000000000000000000000203a3e8a96840fcbca7e799217c1ba18a172721c0ff9e2165567cd07596b35472e00000000000000010000000000000001000000000000002075777ef2fb9ba4fddd10c4dfad24a2ac9e8c4c7385f824c78270582f53be906600000000000000010000000000000000000000000000002015d0d39a5e00da941550e94f971db47a78f03870ec3b4a4861b7bc86ec4fc3510000000000000001000000000000000100000000000000201663f21a1a689fc6ebebd71c1f3b6a77e29b1fc03e5ff9a81c9b499b5173593d0000000000000001000000000000000100000000000000206442b890248152ffaa37fc61acbec69b5db9ed38379e9bf5b8c3cb925bf31bad000000000000000100000000000000000000000000000020637a4203c0ea3d058cca3e35ed9b05288c1fe353b8bd40d1713761f780229caa0000000000000001000000000000000100000000000000200cfaeebc96978bb063ac14d8fbec0df7ca3c72e8472c1057e57db37e87e11af5000000000000000100000000000000010000000000000020b09ed4616df93a5293796f2d942e7363eed0a896123589cf1b4391efa0a2e2e5000000000000000100000000000000000000000000000020386ad29cf6b4c2b60bc236496613b7fc643b2ab118c971e0b38bc4e1f487c2ab00000000000000010000000000000000000000000000002031af884e42a815caa911b8b68c5c81bc80162de933f6df48c73b1f4b6b663e20000000000000000100000000000000010000000000000020a0631c443d2eda027eb66b1a243e3b9bc0454d1da2a989884880d8e9fad1b62f00000000000000100000000000000002000000000000002010272075b9910ed61e5c4b30ec20eab12358a071f519607578c0949f35777cc210272075b9910ed61e5c4b30ec20eab12358a071f519607578c0949f35777cc200a76ff255c3a0f15cf15814bf5df8ba6aa2ad2d219b47379d5a3a09b05e9ee500a76ff255c3a0f15cf15814bf5df8ba6aa2ad2d219b47379d5a3a09b05e9ee508c43954a3017746359f49010f84ab946d64dfd0a98c6ade849f024e3c15d78510d521a88acaddf74db588a98cf64af12fe9b59eaffaced942ffa8e0603c72a02fcc1510215860fe14cc28f98cc370b84effd6f642571402d76b540df23b21133b7e9adde53dfe77540b04b1cd90bbd2c079745041f69c47040dbe0906cdcf5a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fe4efcf56610a39f327fa4a6f08f2db266dac334608303f5e1350ae3e01f9d4104c9744b376dfc2dd8b21d3607416b564a2054a4f23cd2c32c51ab48639c3ac15158c3b1f6f73439d588d76d1af7ba7d24a629eeb34d5b18918f0f665d5b3e1291766b9f5ecee8298348cc57d3c1886e524ea3847fc0964909fd1213eda3b5b141dc34b94c38465f526163a122f525e1c8aacf5a85cf41bb050f51a20d6703507ebb74b2e43d0ac181cee8f513de7b81a3bb61d24ffd9d0469042ae48abaa071fbfda6c4e56678a14ae4bbbe4c043c1a993c4e34ec7496be9c43ff4927dbb2822765f4d7df99c6a093925b4cdbb857b716e1d7dbe32436c0e18baffb0d0eb3a2b5d54dfc3bc3e4a89f94d5a3fc394e611c58d8127ce5fbd0ce5db314e82dd4837377f3e62e9c6b939f7064f800a9d583877736019602b5d09f0b1fb099cafbf196980d82ac3e398d1f395028f9a98dfabd9117a0b1bcdc12dc77d7493db5d3f285c2c0ea33d9bf3519324e89801ed7882c0f6fe9fc7746af3bee87606572c72355674f8b49e70150ca93d1ed655c7d1f11f746c5651bee8f81d11c846d35f021a7ed3d063fbc798d513a5dada262c6441499d9fb98a1a192bb6adda580640c72e5cc138680c92cc17c6b1bd6960c39285b57c7573953e18c1d52c6d34039db8139d42d8a9dc18fa879375f7425074b90f28c8494818d125da04cd2216ce894a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064ae0000000000000020b3799bb2b33db62682d33a18f7e53d7c6831a34944d341f9e28d32d59f24fe550000000000000010000000000000000100000000000000010000000000000020b8ec915946ec0754e58dfa0dd93b0fda0540bd70cbeb497ff915d0e1a7ae57b70000000000000001000000000000000000000000000000203967d6b8853e97049af066bbf189bbd82c20cab13fccea5a49366cc213ba98ee000000000000000100000000000000000000000000000020992b6350b148fac6f350ed764ff0b8247daf11eee0de168aea506cc5cb7a21190000000000000001000000000000000000000000000000204bd582eb35e26cc7bc7353f5cc7ede36c02fc22909928a48db4093126ac2f5fc0000000000000001000000000000000100000000000000209a37bd00dcef28dc2d8c2ebb50e64aa533b3036227d9d9e4a77300fc6eb884db00000000000000010000000000000000000000000000002043eb882e79308adad8ecc2bb626defe973f51157b075b8daefc783a227417e650000000000000001000000000000000100000000000000209581aeae9a64a9bcbdc47b6ccc5ca55c2183386bd70e121c6e983d7655d45ce1000000000000000100000000000000000000000000000020cde2aadec572cd76165a38ccbe4d2cb02896ff1182c1de4843be2a4c6f39e4eb000000000000000100000000000000010000000000000020df23174ce9f8f68cc9ffdb23ac8e6fa58b681cbba5f78da6f9f46b5435e175f00000000000000001000000000000000100000000000000201828b319bb8a50c9c59f893750eb864cff74ac82d589c3aa79115d35d13e5d71000000000000000100000000000000000000000000000020be121bd5730d5ec252df62d085bf48cd903e6849e9cff20077fcd685eeb226360000000000000001000000000000000100000000000000205bf55131faa55b6ad21a958dd22a46796cd5f99b13dd5e6fd3e5d8393aa75f6100000000000000010000000000000001000000000000002097734017d618d99400a2e4a7f51180b6deb42609b3caafe47d7017e47b7913ee00000000000000010000000000000000000000000000002047033ffd4b1a97ac782b129acc90603d77abce64191abc1554bf05d4472ecfc40000000000000001000000000000000000000000000000204582e1a214499058a4a77fd5de7518edbb35fc91e7b84e614548d4404611b94e00000000000000010000000000000001000000000000002010e5f08558c7683afc888014c3989accaee54f66bc8bf7b180654d0cfc03b61d00000000000000010000000000000002000000000000000231da5b9e01b13bbe092dcfc81cff7338e1183e0926af4892f583bdc4c1c4043332174c1d2ef84582964174300ff199c98762720dae82adec4d2798c74c254f2f00000000000064ae0000000000000020e8d97ac3b25abd10e6f572df58a247025f5ae92954ae5f0fe782d2662ff4a76700000000000000100000000000000001000000000000000100000000000000203e2092a0a6b023fa527e9167f7720422cb239636a6bc0abcfd59faa634240c31000000000000000100000000000000000000000000000020f2f9644ac33864db181fe9858b5c86a5e850da048a0be4df1ea04177b6bd9622000000000000000100000000000000000000000000000020197e863560fd1c03d65832534cbc510e569c6da5aaa1b8fb47d757803fbdaeff000000000000000100000000000000000000000000000020a4e6f0fe02db666dbea33ca82095d93ce9d54cfae8e3104a2fbcd699f60735d6000000000000000100000000000000010000000000000020850776d3f52c2338f29a11f57c195198c8129174582a6fd122d8cedf19b9e8090000000000000001000000000000000000000000000000200d22d7fc56d3374aacf2eac81a136ea30a64b8ed8ff3a300051754969745fd7a000000000000000100000000000000010000000000000020a0baa956d6504f75471511ed70444b751df1e788a35c050c948e6cab4bde79b5000000000000000100000000000000000000000000000020fd534a1666e163e5c5181e2cecccea05e710a37fefe015bcf52302fc3c424c9c000000000000000100000000000000010000000000000020f9099fe44068188f6e127d78cfa5ff116204c9514381f056a447889c1132204b0000000000000001000000000000000100000000000000205a4502a7ae298a328e1f116e5c9f66d3f5bcbc4ea4603b8b5f2426ff39eb0db70000000000000001000000000000000000000000000000205d9176a763d4e85fef4643a9605a924779d7ab9814c4c31c9b0076edffc0929a00000000000000010000000000000001000000000000002080131ca2d1bcf2c7e3dcc45dd68f8e6f43f08adab303af379aa6b461714ca5d4000000000000000100000000000000010000000000000020eaf9507d496f5c13d37eed733026ac07f4970b1d623daf31dd15aec0156216540000000000000001000000000000000000000000000000204f6d422d1cd92393dab45e23f9a18b5e2401147f4f069b23d023eddb9aa8e4240000000000000001000000000000000000000000000000205fd0b73bbe3b479016c615024b55d0d83b308125578070aa727bd181a30f796e00000000000000010000000000000001000000000000002038dee1f17eadf91cc84db949075cab1d85988517cbb11c3dc902d7ffa3ea0cc40000000000000012000000000000000200000000000000240330b2f07f11fefbd05d1668e18d641bec473c5dd6bfab279b3ba83e81447e8807dcd1d19820c3283829017fe8877201996f617555c7bf246563690bf49abebb0bd200b0b59175332a98269acdcb2b54a6e10b53cc1af3ef92f9abccd4167850007c9152c9cb4810fcf2ce49ee4667d66f0dcaf69319805a5b8877d29291635d14172daa47b68c4425fd881f412241c494c7fa16907dca36ba57ae1069bf9893316cc8ce0209ac748e9e45be48c9532c31b956bb0bdf0c540e8502643ead57a215e216a2d421b8d524e1ff03e2e888d0336af549d882e5acc1d6b2d6138fb03108daf59521fc50502fbedaf9ba5ddefd63a65af88eb8109a9183d9858601b18f3cf6fa2608eaaa00cac2a1a8a422c2abf0347519fa5e1f156f16304b60c6d5763cf674889db5b74aaf0edeabd910bb1da16a288ef8e1f163cbc1e06c447911910f5de915f06c37081fd2411ec5f6f943ecf12a179ffb408ea62dc6ae2b7a09512b123c161771e8b8433aa1a9569a03f5d778d782e34048d0b14875584eaa66952cd7615a81db6b54ff9331148f65f3f7d26f2fa49d9ea6a898bc660c624690ea0cb61d34b9e5e1cd932a444cecb39873666cbc0fc295f257d33ae4ec5855ff05031e29941262f695cec5506efa2bf4ba178cc2158f9f9b4e4291e18c3eec8fa5209eab75b83ebd63985dc06a0eaf303573c48c00bbac08bbc9aff81a29e890fe1c969fcc5eba298d95d9e44cedeed6fbc55675d99754fcc7d6c69a413a3453cb2ec8784948a0bf8b896e5b5b2530a0e1da82a71d249246b5c89aca20d2633ca42e24f43aaebb29c9e0b79c981b2fea563777c1bf2ce4154b6382488807f08edd1e90e834b584845b9e7d51045be078d5c1766ef75ee978938606ff66eaf5229d323ec2007a6e6216717fe073dd6793bef0d23ca1deb1d0cb14fd007870cb755606ed3744c7d0627068c2698dca3ce4bdccd0a6dce710c3e4dbac4d782baa164e2293a0182505143e275f762a2e42739a0bcd44d08e84661ad1214a7ef3679a112c33a7c1018492a203ac83659972255dde7c153166e63e208a7c6c2f230779bd3a809a1c51784bc756858c02f4da4fdd21fa89c06231fd860ee1e34f4392cf372abef22db6bb8a2cce60ad2902f5044e9b23d67f3f7284d161a0c9bc7e4bb0960f1896c3c02ccac1c005c47bd775eb36c9b9a08dbd33f923b7050662e347b1ac04497987611abaa3f1197ca79dc87059f61471c2b92df9e7dc4891231e3fb6e31e17aad475ebfa0323993beb6a5c27757e8097eecfc6c3f926abe1c3c167feb408fc2dd3bc41bcbf816f3ca96fc268180556ce1003265d52b472df5e8327293d06d0c578c1ef5e89a5eadfe30ee5ca019938dbf4dc9dbe351ad8a026744da4340d23a93fa88972e0fab65dbec99429e9525d8acfe47ee7e0af66a3ad7dffdb40365a08ee3f1895e58876bc27408a567ded77997b2f24fbd2038a408e3a4690ca2bd26ce78e3e775e3fec5853c6b106c237ec6612807d9594d528aca12bcb4b893569a6762da69a58f5a6643af7ab746f4bb2548465fe7817e9ee52dd713f23ca3989bc9a8e92f08e541036ec71dfaccba71532eed20dd81499d97da08d02b74a00000000000064ae000000000000002086717ac43b7d5f82c8302f3d130b855380f095945b7e69704f38362537aa44090000000000000010000000000000000100000000000000010000000000000020906bfa523ba810d5f46b30006db1b43e29c2c66b030ae4eaccaaf04c9ef8493c0000000000000001000000000000000000000000000000201b042d145ea3807991e568c6842ab079f688141fff5116de0291e4c41eaeb5ce000000000000000100000000000000000000000000000020a71dc7a66bdcb63aedd9736dcec42371ff5617e98294580b5fffffb4c565d8620000000000000001000000000000000000000000000000201ff13da5c534887124cd7211e908ad187e3f0b1fc6bb700ce495edcb5eb08c9f00000000000000010000000000000001000000000000002090be2df98f517f40b7e3a32e843f4b94b169648a6b3ee36a788e6acef94359c7000000000000000100000000000000000000000000000020e32566bc640cdc42a2d416dd8e9ebe7d9740c8477a96f47848d4e3454571fb9f000000000000000100000000000000010000000000000020f81cfad22771fd9adc4a1c2eb3d35d7206c8e61de47fec96cbfed9a8142060f5000000000000000100000000000000000000000000000020ec41974a8de27e23ea619631f2c48fc4c33979aca3f615a302231c1b01366a180000000000000001000000000000000100000000000000204dec308ae45410152d0c07fd5536a43b5ef2b3fb00b42d72731cd0f56a2f7a950000000000000001000000000000000100000000000000201643fe66e23782f873215dd147f0a608d1dd5162fb1a0ec8fe05a8d3d03dd06f000000000000000100000000000000000000000000000020f189451a8e6ad486f17fea63f8645b2dabf4216c1842358e7324933f81f7ea8e00000000000000010000000000000001000000000000002062065792a6c03983076f815f583d61ac0cd4b51fd65f5df4e80b4699bf2a1387000000000000000100000000000000010000000000000020b43f76ad68b950a3c7985b258ac663aba4aab7fd09d41309b4494ca1557d88cc0000000000000001000000000000000000000000000000208282c4eb352fa7af8ff2e54989de6e5ccd0146617a9dcc9487ee8e1b861008c8000000000000000100000000000000000000000000000020e4cab9b3d6b7cf6da1e73c16ffd4296568eab972c55ecc94c6d376d2d7a010bb000000000000000100000000000000010000000000000020e17990fefcbe5e3cdfbb605c96183b6be41e54a43f46f605683c0c7e49cfa3de00000000000000430000000000000002000000000000008620a15ed90ad32ab3b94a75f28f4310334fee79284a27251e7643539def058c4e1f5ea126f52cd54c46b58a0d70bcefccd2581fd3bf25d3fd22e9dd4f10fa73b32326da3d361fd5829e744dbccc4f51004b1b2bd16029c7611cf6403bab1bbd841cd925c2c9e02a7d618bb24333b0aeffd72b6d2aa92331ba7c36f0b154e4427d2fc243320e9f2b8d184584affd8c950132faa91ece36f2ae5e74df50578ab392103dbccdf160d472e7ba7b5002736afeef4befdd3b16066d3ab8519ca8754c6f2ecb4ffa491bd9c1795b976ff3bee905981182a5eb2bd2150cc0c9cab5b581d71134b005b6e4263e86a468900c4116fa8a3516561e2127068c6c67224a4a7e2a29f88fe36d8b40c75ec9f52fc2ba8d1b9183c2497bf42f16743c5e2e8c8b89301607701c9274bf38a1360ad03d4572e490c2d6b28d58ca0524f0d2be737476d111dacf7123b843e4d9f1c9eecda4c18970bf007b4fde001d79a64421beb9aded2e25308edc47bc1b260e3611325b3e76b1879880b96ef8fe1f86eccb4146521419460d35b299537841b8f1aa0437c7af1174696c86090777c71223bbb9a065a026b9f2ca4d66ac87be470e55fbc8385110d22f8f8343f1a3d21b0d31465f9a613e5e420c7cfea159489cb8521516e66b34ff762294e02c3b4a2d81bda021fc1f01a1bdf383015ea6b76347adeae91994ed4722d9746ccce04effaf2f5fde03e237d74a3e70f926be6b0f999a697280177fe2eabcc32cf8ba0e2ec50020a9ec970828b5c18f06d94194f06665968d7fe8a263ae3f462000618afe6becdf56136a1734733834ddc1b8174e00040f3c8074f65431bfaaacf733e235154ca3519eef28cb8cc7cb223e47e8b1fffbf0c37f8b2bf2673c5ea001e7b6f81ba05cae6112340640190854c898748600144c2e8248ad5e5fc24c13dae7d1dc399230981aaa0bf9bfe6f7ab37678b79ffebb3d17db774e83939bd391e33c750f75acf67e557041f407d29a7eafa469e00657ce88b6ad9bd7adb572f6218b4985c26f2f8854e3be0bf82d6581505b961ff9a8317749548891e20b21d9702e494d4c60d077ab3149c4271d04796e3611601fb708ab91640b36648b3ecea7b86f9ccc2beda9a862b63bd8e2fb8691c9ee9fe048f7546e9e19332b355600ea01233642a4125657b270d4c391165f270e56e09e932b59d6f213a666f7a539b4e09b3cee0ba45049d18f2b3c6ee9a0d8f1a91f616cd4a6291010c328c8ef95dcd8f79620c45bafb6403427d1d56fdbc347b26318dfd8c132b3f50353947bb1d3364fb779ca359170e3cbd82e2a90243cb84d9ce720273ecd4e2f663c2c191dbe83431b9505ca6e8f3104c7192b2f4ad0667bef7c5f3bc5fd83c910a1e66a79200f8e9560f30bd73462fb38e6d4d0b52f99841083a0c43a027e5b58edda2a5671aa043daddcf428cbb117e37dd7ec7612006bad6ddc2addf390c8e999bf7f8e0e943617d5ef3b3405d2e81c82281389edff94529223d5220c715b7ff601154183255cbb38e0c4cbfa403e28fd25cfefa1d85a1239becdad8920fc18080648fdf30d575184ad046d6ef3c1d702da30105e27a5edc641325276e1285187ba4bd19eac3b818a22fb92912136ccf1bd0fae2939c25b20ba0463ada4ec78281f6cf5bf42b497976116232ab2c9330e42f051d6c63da4df45fb9c525d37f167a127d9d276de3b776ee9dcd56350d86b9fe622c55af6aaacc3787e2c162f356f84a2ed600dd153371e2ef1f8b0af27946019dd3aa50955533c8781d3ebf534203bf1e231abc17fd7b1d10e0760943a1a1f7eaddac6d1555fd15a76dc665a64ee94db64995ecb53d856eab9db336bc5e5e0815225392eaaa02ea589239bca04a12bb96af85ac77f3679154624e1a563bd5d9a60f9acc83ca0ef81bf3f27c44dee73d27e3748ce78cbbdfabc6c225a9c42a2659f065337c35f107e40c0da601ba14cc2515a70c45a4312054393f3c2120950a80a2133e67efad424abc9383369d082b1fe53bff583c657cf2bd5a03dedf6af57f5decc1981052bdb5436c9f0ffbf3de2d13df99d4f487830d42a719460d35b299537841b8f1aa0437c7af1174696c86090777c71223bbb9a065a026b9f2ca4d66ac87be470e55fbc8385110d22f8f8343f1a3d21b0d31465f9a613e5e420c7cfea159489cb8521516e66b34ff762294e02c3b4a2d81bda021fc1f01a1bdf383015ea6b76347adeae91994ed4722d9746ccce04effaf2f5fde03e237d74a3e70f926be6b0f999a697280177fe2eabcc32cf8ba0e2ec50020a9ec970828b5c18f06d94194f06665968d7fe8a263ae3f462000618afe6becdf56136a1734733834ddc1b8174e00040f3c8074f65431bfaaacf733e235154ca3519eef28cb8cc7cb223e47e8b1fffbf0c37f8b2bf2673c5ea001e7b6f81ba05cae6112340640190854c898748600144c2e8248ad5e5fc24c13dae7d1dc399230981aaa0bf9bfe6f7ab37678b79ffebb3d17db774e83939bd391e33c750f75acf67e557041f407d29a7eafa469e00657ce88b6ad9bd7adb572f6218b4985c26f2f8854e3be0bf82d6581505b961ff9a8317749548891e20b21d9702e494d4c60d077ab3149c4271d04796e3611601fb708ab91640b36648b3ecea7b86f9ccc2beda9a862b63bd8e2fb8691c9ee9fe048f7546e9e19332b355600ea01233642a4125657b270d4c391165f270e56e09e932b59d6f213a666f7a539b4e09b3cee0ba45049d18f2b3c6ee9a0d8f1a91f616cd4a6291010c328c8ef95dcd8f79620c45bafb6403427d1d56fdbc347b26318dfd8c132b3f50353947bb1d3364fb779ca359170e3cbd82e2a90243cb84d9ce720273ecd4e2f663c2c191dbe83431b9505ca6e8f3104c7192b2f4ad0667bef7c5f3bc5fd83c910a1e66a79200f8e9560f30bd73462fb38e6d4d0b52f99841083a0c43a027e5b58edda2a5671aa043daddcf428cbb117e37dd7ec7612006bad6ddc2addf390c8e999bf7f8e0e943617d5ef3b3405d2e81c82281389edff94529223d5220c715b7ff601154183255cbb38e0c4cbfa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000064ae0000000000000020979efed344d3af4abce365e81207d83a8d909f8ff4e32f936d87aa0bac7983d900000000000000100000000000000001000000000000000100000000000000205c80a48fe1da2736b446b8d3f7b163bde9acfee21ec77bbf6c672e3e72bbc238000000000000000100000000000000000000000000000020cede000a10c6ddda52b1fc34fa5eed11652f62f72594dcbed9b3938669f94fb2000000000000000100000000000000000000000000000020e3074e1c6f248776335e71ef670f13dbdbfed54970c93cf74498f28ca69c100b000000000000000100000000000000000000000000000020a83cd5b629af85d19e2f246be4c9728044c972200ea3a7bb7ac6584636758cb8000000000000000100000000000000010000000000000020e41629a5222a8dfad51ce46434c149d341e86ed5ba9c8ed7909c8739cdf88e4000000000000000010000000000000000000000000000002027093121b7d71b9cec8277ee0cfe99a1531646f0e74955b74b47561c29e090750000000000000001000000000000000100000000000000201080fa380f6cf860c82abab8650c2744ffb047255fc1b2d531d95c9ad20b9fef000000000000000100000000000000000000000000000020e8eebc63d0f1d26fe9c45ff2274e1fc349bdbb63c136e3897d9916c0c377c97e00000000000000010000000000000001000000000000002069a428e7f0a57c3285192e818bff134fc91dba3565bb2ee2e0abfe5382fa60c7000000000000000100000000000000010000000000000020400bf86d9170b6ccebba2a58cf15458e9d12958250c332896842f9e45e639c07000000000000000100000000000000000000000000000020a6b7c58eb9af99692f5538aaaa53551585364bf0ddebaf1ad4dfc54ec575b26e000000000000000100000000000000010000000000000020d5df49fc7f626d1dc2ac02cea912ab49cba8f1c5ef19fbd5c5d18fa8e1d497c600000000000000010000000000000001000000000000002060b07b4e39e3a836d3d63f9260472d1e747a194b94448ca7146936ef0bd57242000000000000000100000000000000000000000000000020c1669bf024e483f61f4fd7ba0c53aae3c07baff70e00b1983c8609d511f6c885000000000000000100000000000000000000000000000020123b82ecc0c634ff753754364c16de65ec617f492a60ed23d4b72ff3f69d44ee0000000000000001000000000000000100000000000000209ad26706ad8fa3e35cb5af76c70e9dd6124d3b97b383ef42a76a0fbbfa9d69010000000000000002120421c7b6e6d6c0a0484563919ed714be9e164757f81db01a62e934aaadcfff375bdbbdd5adb0d886012cd08e7809edc0e506ed246fd3729260beacb9f7a69700000000000064ae0000000000000020149a0577ca6898642f277429dadc5df8bc3a56e16f1b87a2f5c3e45116fdef75000000000000000f00000000000000010000000000000001000000000000002099e1e3f43e1e1e5af92730325a08b353fb0588de9e94a17339e74c86fc88a2240000000000000001000000000000000000000000000000206121a034f872d359d1a7421eec2e96acfcab2c2048d646a25a83311e131c0260000000000000000100000000000000000000000000000020a1bc5c222694c3a3e37c863091da7fb348f421dc1e1903cf3cc88ec643340e60000000000000000100000000000000000000000000000020a773d4db12d8dd5f7bc9d1b4f1fdafc9ff6803ac33bd7c3bc5c9bf0c72959c9f000000000000000100000000000000010000000000000020d770c055fde059843903735baf012233cf93978cf9f2b3a002ff8ba0ebddab7a000000000000000100000000000000000000000000000020a7df48eb2fd584b138a43d3eb668e69cbf083cee17b822174bef97741e0dafdc00000000000000010000000000000001000000000000002047b616c0cbfe2d78630a2b24584f392cad76b463661ea6b10387a6846894afe60000000000000001000000000000000000000000000000201ce0feed245649bf5bcfab8d8ca0338046d647632508506340f7d74e8e24a89100000000000000010000000000000001000000000000002045ae285c7f23df7622dc38f658e2147fb12bb76655a3f154e35e3c4211fb50f100000000000000010000000000000001000000000000002082938c68f8f81ff1bc8fcafebf8b083db1b17b088d93230d9fe75ed98d74cbed0000000000000001000000000000000000000000000000209dfe79525c6d9377a808ca1918f235bd833feacf26cda7ae91d8ddae3103c6940000000000000001000000000000000100000000000000206eaf865c04e43648a3deef4c121d90e93b402ee60d6e69bd2206751687de2489000000000000000100000000000000010000000000000020e29c6cdcc2dfee329b9e75efa45d88780ae2c751a9546aa40c75a70d3b69816c000000000000000100000000000000000000000000000020ee448efc1745abd0f3822d75f0a055a53984039529c02f9a96152cd28dacca04000000000000000100000000000000000000000000000020c938d64ce1b122f61c9e9c6b66220969b0be52d44112f69ed75c402ed8c74707000000000000000234e96076bce9d638ee017a28c13fe4e04f04967c3f5d22e2127ed033c77233701c56943a3130084c1b877adfe7a26a82a3e63d01baf864392e7c25d530ed2a7100000000000024ae000000000000002015dec83b8a701e3a8dba34b8237dd2f7e4ab7565f8e81f3dc0fdae2a0c85ad10000000000000000e000000000000000100000000000000010000000000000020b51084f8dbe646b9fc5e642e8f5cfca32150db1776cffc5fe31371a66b0c634100000000000000010000000000000000000000000000002071b8f19bee93d07dc17ed3840f4fd2bea8ad463b8901284fd91ac51c39ba21a9000000000000000100000000000000000000000000000020ad283e08a4f31a5d8400ccc26ce4154aefb92e1665224f13f6eb5f247929d35500000000000000010000000000000000000000000000002037fb6263fdb7bed138b3f1407fe4afb3311a191aeb545cdbaa417342eb72b0e2000000000000000100000000000000010000000000000020bf30665a658476f9c26f709b8fdfaa4fee76a7b13ee067d6e6583263b9691b2e00000000000000010000000000000000000000000000002084a457bdc60b39f20dcfcdbd240c55de33fc9a6ce504f56efe0ecda0ee8859fd000000000000000100000000000000010000000000000020d66e4684cae1f91d7ce4fadd526790544cb197406bafc38c71ecb6638a2f442e000000000000000100000000000000000000000000000020d13c1a2e6b53a4d990bffd0156e8d0bd9d1cca9b6e3e1b5f52e63e4f81db20e3000000000000000100000000000000010000000000000020d429dfe2599484c15584cfac5285b598c39405927fb545ac0191f3791ab6ed8f000000000000000100000000000000010000000000000020b7e2f7666a448ac8e7b128c5b031e9f3bca880d94f27a59ee7b2df0574face76000000000000000100000000000000000000000000000020b38fd66613dcb4f7ae2b6fef39ecd1282ab1f3f6916c3112067d4c60694aa23e00000000000000010000000000000001000000000000002048017e94c32327e42d1453acb0f979880bdd55f0deee3d6b3f6ad8eb07793edb000000000000000100000000000000010000000000000020e125a251c6be44e148d4d550bd3ef439e2b7a6b72c23671822268c61d49651cc000000000000000100000000000000000000000000000020eda843623c53145d1771876f402f14f06a4266f5c117def78c8bc72125b6410600000000000000022d42ab724576bba773e1b3fb750049c4e0966b94723a311c6b2be78c5e47b3621b3b5b128a6cd70f02272ad84eb287ee53ce3fdb781ca79faaa6758dfb157a6100000000000004ae0000000000000020d6e4a966a7c7f6f32f3a643421c51839b2ec8bc31d734b6a0e67c6ed4135f257000000000000000d00000000000000010000000000000001000000000000002085ff3485ee8cebe5ae55b20755004808d25cc1bac1c3719a4b7c4093a9a5f99100000000000000010000000000000000000000000000002030e7ea9c7ee472953eb98d252cd66048c5c9e961eacec87fe8dad2c92e92454c000000000000000100000000000000000000000000000020e52b9741ebd5b1be071a4a3db7c86ee0dad7a4ad45aed43d3d8b3cc56c9adce1000000000000000100000000000000000000000000000020550983ead7b328a107423651a35525c77ec42fc6377774e56297e73c363d0901000000000000000100000000000000010000000000000020ea9b313b0f525acd4b96e9064ae862a3901d97249433aee25fbba7b3093b200b000000000000000100000000000000000000000000000020bc8e7c13d79d50a8498a44a04fd7fb6f562a343900b33d83a17dd369eba5e4d200000000000000010000000000000001000000000000002042c1d637932a52974441ef718bec3fa47e5389f0a5ef8cf8de4683d82f8b214d000000000000000100000000000000000000000000000020537d6ba9cc90d5dd02f3858c4f4a2e71adf8eb88414a50cfa9f0ff712c70fd69000000000000000100000000000000010000000000000020fca50e3eef58da40a19577d0ede5712fbfb7f1eb9fbee104858374bfa8f01f53000000000000000100000000000000010000000000000020f8db98cf0c47a733484058635db670fda6fe46f27f7da22e36a0996778d3f20f000000000000000100000000000000000000000000000020e129de6e22913e92dc3044c7964f10bac9a1183b469210eab8f8c4e30b26c1af000000000000000100000000000000010000000000000020e273ee3b0f4eeb93605b5c92f828be9fa224e625e704fd8d5cf041f41b1d15a00000000000000001000000000000000100000000000000200c1ded992e0a23f5f77d4e8e34a9cfdb5bc7e56479fdedd2c60629b97d505ddb00000000000000022309214876443a012a878cd177fef5ec8b0a703be135e994e4dd3213931157b51fe462e9c154da6a77fb816940d73e2dc70b31d9d7a088f89d709e920431e98e00000000000004ae00000000000000207ce51763167c2d5d61537d41337a8ef59fecef3bf2ecfe6d3b79b2fdc48c576a000000000000000c0000000000000001000000000000000100000000000000209a0cd78f82b19b10d75e0569ba132f2137fa3ca7eeed37b1f0d9b3802d9d0881000000000000000100000000000000000000000000000020268d2811466a32901607226b5d211a4c21feed0bb1db88a422be1f76a7f235600000000000000001000000000000000000000000000000209ed525c2696e1c11770ff7c13d326521d00ee50d9d50b178486a23b2ff1d23ef000000000000000100000000000000000000000000000020d37bc33dd6f91f4270e790c64390b0b3886920cb907dfeb20c847636340de89a00000000000000010000000000000001000000000000002035bb14d060b0826f19e6213ece8945eb897cf285dac444dac92312ecc1b32681000000000000000100000000000000000000000000000020b10306f48627cadc5861455fa2dd78da13a89d044d10ba433a9a40f4eb4abd9d00000000000000010000000000000001000000000000002091471879e299d88332b5003434dd9f67888414954542f0cfe5a1f8f4e67df23800000000000000010000000000000000000000000000002014aeba002a7ed07b60db692b30338b3ce60b84468c8afb78d06eaa120410de2c000000000000000100000000000000010000000000000020227280c1575573f9c04c84fd29fa58ea5ed8cb020b9654cf1663b6163977092f000000000000000100000000000000010000000000000020aced71920c2c537bf4d4b6e8289d7c0f4c5f3d7d78bb34f558d7f826c5864a8300000000000000010000000000000000000000000000002024b0765265cc3cb702826c9bf2305bfd6afe3c3e0a996021ab0f1c744a228373000000000000000100000000000000010000000000000020e9fecd4d561e86cec3193691cc1096011df87a5506ed665b092613fb182833d9000000000000000236b4666b037a99112f0fa2c266cd529a2d3f400c316b480f376527443f3c0664088226c9971b5d62c236ba570f3ba0443d2255177dd56d7f2c98b0e08613fded00000000000004ae0000000000000020223b8f544e9763c5295ccaea6eb3b7cb1301419b4cdf939a065d9a9e03221c42000000000000000b000000000000000100000000000000010000000000000020180198656ee87e5ecee1ca9c07cf790b55cbb465747974654f01c81b8e65765600000000000000010000000000000000000000000000002028325f97538baf290495e47c009eb87dcd53707d098f5f7e2e2694307832f144000000000000000100000000000000000000000000000020f1a5b4f8ae0f39a6725f276cd4a262ce7a137ac88be51873936e1069c9293477000000000000000100000000000000000000000000000020cc62d4e66c9225adf6cb532ee7e674c4e6c4b1fe4d51160594a59069457359d300000000000000010000000000000001000000000000002065146b7fc636a1a21b984dc2b380be3b971b62fda24ec67977fe26cfcc03bcbb000000000000000100000000000000000000000000000020eda967e494814403749d47f15eabe4a0f24a551840465093141eea4a986aba810000000000000001000000000000000100000000000000202f2103cbb0f36dc4575768ebdce11e0429762b471fcb740d8a5444ef5fee4ec6000000000000000100000000000000000000000000000020a80040947724e7335d7d1bccde1be54e3b894c8ae2366c6df53223465582f6e5000000000000000100000000000000010000000000000020a44fe3b187738c0e789dcee354e53bde3a6e0b47db5f068d0b53c2e289f75328000000000000000100000000000000010000000000000020806a2863f4e7aa0d364bba4a0e6fbc77b3fb7ab3136c3423ad8f94e692a1c152000000000000000100000000000000000000000000000020ed55a640f0400452c44791e1c3b35db6b00b829511578fce7eb90bf71b2502fe00000000000000022eeb4a725d0a14a7067070e0ed6b03abd2934e700986ebf49edfd37be16499570220d34b1cd336c85485a5efc2d25f7c1c0a8bb734ca798c30417c025dbae6c000000000000000ae00000000000000200fdd2b336f69dcfaa4e58a4dfd3181ca6cd4ef89828312e1ae53351bec7c5b52000000000000000a000000000000000100000000000000010000000000000020b9ca710ad6f82c60d3e3b7c2c563b6f6e68ef5483b76e25bcce78069b4294f35000000000000000100000000000000000000000000000020dc7f62a65569622389798cf72542d897aeb8474d83ea04651cf85168bd28b2e90000000000000001000000000000000000000000000000206daf6767dc1c3e5b075eb54d814eba94183875a06ec3ed85dba07206410492290000000000000001000000000000000000000000000000201e8d4da69a04cf69c22d4f3b9fc8b195f3aba250dc04714043938db0f0a9e2a0000000000000000100000000000000010000000000000020b63cb2f08a0d5bc97052616e489d32620a8181ad29592b741a33c660541935f80000000000000001000000000000000000000000000000201662ba54109df28ad4dff17b79299f91c7d628c1a360d131c9ad47baa18b87f7000000000000000100000000000000010000000000000020159d5b0da6572e69a53ab68057d27f9327374f31b9a3b46ea69ea15b645f0afe000000000000000100000000000000000000000000000020e9c17d5adddfab763b64f47863654801856a70c61a99126384a7bdd8e3c3bebc000000000000000100000000000000010000000000000020be90e58560b0990ab555609d4773c22b7ac590e3abd02d0e9fce06aa113a78e5000000000000000100000000000000010000000000000020242ac4226db74f9713cc3cd135f58ddeeeafe9b15cafaf15fe6cd72de9b8cf1300000000000000023d7773ded6c72c1c58cea7b62bec71b1f06f1c70c8bb17d796b8febc416be8751a1cc82bbf8c84dcde79beb89330e5081c4a4e13024b05cd1abe11a48654fae100000000000000ae0000000000000020fe5735b472609d52f50c9af7acebdf51b0136d833041e9902de1009e12dae8c600000000000000090000000000000001000000000000000100000000000000203ecf2539f485e00e8c885c152be94116947aaee16619ce7eaabee887ad7cf1e1000000000000000100000000000000000000000000000020534f606006460496ccea949ea573bb009038f3cb9ed98addd607cee8691879e500000000000000010000000000000000000000000000002053ba0f223bb9b856791e453175cee53af76f0d1d3ff27016ca691a362b26174e000000000000000100000000000000000000000000000020663117ed350d231ae222fabf2e58d83e53f5f3b05fe2584ca325c63785885b960000000000000001000000000000000100000000000000206057da82d4e2fe7f1287e056b1d206ec9ac099eaf503428393eb54195a6888ed00000000000000010000000000000000000000000000002074ab66fc85c26fe82f3b866bd0a7a1ba41018d02978487c620e80f96cc99a7a900000000000000010000000000000001000000000000002082a9cc9918afb7ea6676c99b2e165b921909ff0ff5c3a55a8e3c3b7896c0e54d00000000000000010000000000000000000000000000002066f317543968efde2ab7bf48167d2e243cda6bd9060076b2344526860352ad3f000000000000000100000000000000010000000000000020e2da1e6cc1a336515e782c8b08b2e15bdd8ac7724d3119982cb34b94b1e000a600000000000000022147f0d444ead2c6ad3993978e25330e8785cd6acc4ad095311ab48f1bc985232ee65815b5dc44e4dd38b6a201d4d5efd6fa55259c4df9eee759df7dfa58c0ac00000000000000ae0000000000000020d5705c7f7acb049c1d7cc974667c1b1f4224452d9f625be8d0a47b3b1840727e0000000000000008000000000000000100000000000000010000000000000020d656138e339ecab11a042d60c53a24c6a42d6f9ee386d2ca70e617ce1e19b90d000000000000000100000000000000000000000000000020b46a0e46f45131c7f2bd5d63ee01667b44fcc601d8fa69af046ab86559558523000000000000000100000000000000000000000000000020468e2ec200dbaeb877f8073223c1377398c5ad31c1ca468249ffcca76a121b76000000000000000100000000000000000000000000000020196193018ab7d6827e85266cc067540ccc6fe93c8aad4fa284c073204888992200000000000000010000000000000001000000000000002039ab1167a6cedb27835753c98bc1d1e21bda1cb3766d11b2ba18c6d7e6dbe76a00000000000000010000000000000000000000000000002048c39c342a2ad067dc0bebd824f0c6c947e08712f47df58cd5c6234d57c296bc00000000000000010000000000000001000000000000002086b90f99cf4479ff51782e0b8db0cf6daa5296f8a84f11b00bebf5edad874e0f000000000000000100000000000000000000000000000020aec2dc54105f989a57d6732a8ce540e31fad645bdc891828db3c4db06dbaa6cb0000000000000002176a9e58df01e7cbf0d606a8091b70f05907d6e08e67faa95052ca6118f109653e4ef22975864ab7ebf308526afceeaf90c37000bd44ce1fe2b3b4b59a3df10a000000000000002e0000000000000020e950a5a0895127c95a36fe86863f28870b0157fa416b7c13fe721cf23da3db8600000000000000070000000000000001000000000000000100000000000000201979debbeb82f249d9ba45c4d122d1f4509ac71e59f489663cd75cc47e389252000000000000000100000000000000000000000000000020fed8e1f0e9515afe0df2b19cc9924ba8aa4becebc1f71c1dc05beeb6627baede0000000000000001000000000000000000000000000000206f1614e65bc210d2ef4c12d4537320895c767437921554473466d8baf56222c30000000000000001000000000000000000000000000000208bba5a4ab2d3e80a5244b59d45baac9605c9339651ee9ee7e24465435d70dec4000000000000000100000000000000010000000000000020b934ebe1d3287e8f86718fd75f888ae08e78e2bbd8119e1d48a1867a0703009100000000000000010000000000000000000000000000002065b826fe967ce7e7ab0a8afac7820ed75fd9bd07c9e10c8687be277864bd38610000000000000001000000000000000100000000000000203644241dd1406cfbca00c95a3999024121e51aa2dbb380d4180f011461fd9f5e0000000000000002380f209bc34822331832d76fec61ed19c0cdca79fa54e65a53a1286e9c77e0d509b80861274a332c45678a881228d8ddda5380af075f326db95ad5cd5a5a7208000000000000002e0000000000000020d48556dc18d572c1592a5fdada495a41b85b6468e628fefd1018d0bc3e2e35da0000000000000006000000000000000100000000000000010000000000000020d3d9dff3c8a1b07d7706f998c63019a1b7a5f131b60d9a13948202a256b26ee4000000000000000100000000000000000000000000000020c9fbe834fdda7270a06c19a11f098c9f4c94cacaef5f534a883732b4dc5e94fd000000000000000100000000000000000000000000000020f8378a44b31b31a3a5a4443a914b74966ad9bd0b38b5cf50dd10943490501128000000000000000100000000000000000000000000000020e80ab26e4b73bc13159c330ede6d7524094da97f4df608e8248a92e536e3c454000000000000000100000000000000010000000000000020f97b7253665bcb9e482c1bbca05493d13cefb79c915d3ab902c9c0dc09357aff00000000000000010000000000000000000000000000002055c5ef0b4af13237f9c2f5ca7ef75af861c82b30b96ffae906354b25f4c633030000000000000002388e2355516165a30fe58ee2308bcc1b90716073b104a4954ee48c3bd77054ee371943122f18ea857789bcfe633132386849c6148bfd796fc9a46a4d1a6c8c8a000000000000000e000000000000002071e2c5d6bb501163893110a8ba67bf1fb5e3366e357f3f8390c7ffd8ac46d59f0000000000000005000000000000000100000000000000010000000000000020e47b712064e2ae2151191099ad97240be2543de742d661a3df53059af10801cb0000000000000001000000000000000000000000000000201bba30d687b5522714f979b2c77f42c146fe4141e3c2d250b7ec6c6949b469ac0000000000000001000000000000000000000000000000209409d3f0ab184f0f1ffdc9df20456ba1cd643d87f7e809dea8fa08eb80213a060000000000000001000000000000000000000000000000203ab4a2297e7b1dff0b69481bfa4dfcbbb7fff5451853c502283375f27e0b02e0000000000000000100000000000000010000000000000020a863d1d42d49ea2713fd398e8b8d5048cb149e0efc6d7feb44617c5ad582ee2400000000000000022e3c38ae15e4ad881efa6950d0f9bd8146ef25795d67947c5749973aa1ab8de328645d0e1f14ea2409126960881e296c78b1a8ac9fe2a334586b5f688585489f000000000000000e0000000000000020be4dc51a95106cbfbe2fb1855a7faca3c41c092b94732d454f4c5daa8545a7e1000000000000000400000000000000010000000000000001000000000000002008c829a98bf5ec9c97230161bb36db8f557c91e0c7371344207ee3e4e2744e2e000000000000000100000000000000000000000000000020e337a65a766591a0bd46236b04857f733500a370a6f498263ffefa4f2d116d8c000000000000000100000000000000000000000000000020504f2108a89e3ec7cfc29dd0441d2939542ee0df4e6fa01b0d64b5e8618742a0000000000000000100000000000000000000000000000020e16038c5672c748f6a465b5ee971fe427aa1597636fea4bdb4db324baf86a250000000000000000202293a3aa80e04c72a8f1e4d1f38883a7b0d242ce10c629499444057504c5cfb37b4a7d4df26fb3aa72f649b1a39cd7d98fff4dcab3756b1075f164c7e679c4000000000000000060000000000000020232a105d258b8d50dcd3e46e1c13bcb3ab02dc1c373554ad086e3dcec0adf23e0000000000000003000000000000000100000000000000010000000000000020c8cabc2853cfe3e3baf3bd71e543d5571e59f97ba9ae36d21ce56816fea8c2b200000000000000010000000000000000000000000000002019eaccb94355ae2736211a001083da6cece1cc89aab7b31f28a356298e0fa02500000000000000010000000000000000000000000000002051c5e34e81f846787a36ce02631826170c999b1efede966386206635a5d3f95c0000000000000002326f09d71a6a51aeae5c153f1659f1a8b300525676b6bd1ca8c4a91c0ee3a12f34c8c366404d5c8a033c9218186ea0f7ab5b5670a881ae21c0243b357a424ce500000000000000020000000000000020bee9323487a966666f79a4e3e054937b5315994054cdbd49852e71b19807fd37000000000000000200000000000000010000000000000001000000000000002009941d05278a5038d4a444ebb8efd411da901bfea7c3b1ef19cd0507f30a31e1000000000000000100000000000000000000000000000020885d1d75dd6b39dd01476807cd5bb54fde37a29662e2552f3bc07e4f56b51f7d00000000000000022ef11f2cd900f75d4f5fa491a8d33c7bd1d37659fd3cbed52796e6cd0344114516ff72b7fa964c77b718877c8eeb3508ad2f2a2ceabd15ac6652f8b6534e2e360000000000000000000000000000002060bd35c8f6ad3d0af8024557ada4a70f6c05f624b98bd6a000c08a4ddde8c7e600000000000000010000000000000001000000000000000100000000000000205654f162b81764de2491138141b346f28727e9b9c58261139eb1b6119473b4e40000000000000002044c94ddcef45dbdbcce4df726d1ffb61afaaee53f8306404559ce5c6a5177d53982dc8f31055b004db5cece69588d28b7aff7ebf1f0ada9fe66fdc238475671 \ No newline at end of file diff --git a/contracts/zkllvm/mina_base/public_input.json b/contracts/zkllvm/mina_base/public_input.json deleted file mode 100644 index ea5c630..0000000 --- a/contracts/zkllvm/mina_base/public_input.json +++ /dev/null @@ -1,2221 +0,0 @@ -[{"array":[ - 536307267370630539298338195126964433002751717398567478076440137023181728607, - 6350606115317347363597932062914653689968227049601191251399544021742333315801, - 9206053199246011959796170615713822591061443878941333442050858420980669939261, - 14740129327326773513706376027412103724016117082575227265638296913289837688665, - 16564188617731377495958671911696425695275378581995049413049576095561177082240, - 1459402852807505758425734344247095015933414476343367133158131410788220654238, - 21242251638009076263837244634368230761467306958555850127441516362380970601929, - 12203749473252097888620760620069661970513373965870653289692378370172397041706, - 17023493465725290563114958107734317727618578283425655729913140427175936881093, - 1936155109368356260975382811249765940798571310720921617932889803196752158590, - 103621606440074842298860884963915571932207341288263535593423136481465714735, - 15788549173524065965494601883186777788481348653774064682772925388513088490090, - 24556817602523355881516499979792133900107571660647950589146887762260618793917, - 27877693238368699060036114711784573917884144573735884619429498469219619672345, - 11234564435070499732454975362552446632170478857538103411195827103831435116233, - 19696299749020838390353550078371750498311472970779065939065311569663098844314, - 14517262859386139453784451163200306258051499950987773522261210512269809352845, - 3506626427158490422968215262589432741643846220942237170310331734825515353525, - 18069268462400661468610696004339177451605142972711247747649561988038830077480, - 5507660155854988480882870488214047829459690716587074899934498171658182288105, - 28457410572438330078821308920979844705352186400010383880085962843250813798778, - 8108297390764722756141847769797360582386321039345257614125873793480991280276, - 20124320677729289454999690616690540935773779635778809434556892654343604647116, - 13044952534009992039995558782137745127351569353144298644073197002281488426965, - 5230215232274022868876655682237984971968711937082497203529000768386957975735, - 17223408048033595784589867752479488104084710870580444852766688748153556732913, - 13895322178800660077904419440086966384584832307123209132094144476919771677515, - 14444519033973404085785571982069457327169209614674770596932793977588846117437, - 1951626661817030253380834120240476753433168575378435861745254676984613581924, - 26012723732502368831680148476347811354313116006085422714526800574855323968244, - 2633770197326005383994291008888134007953313769992494793298115970819953799551, - 10415822002257259745593431055103097617944110753033232043304507309339010959421, - 11263780663566442940102663026475130298267242212496519779436831085936563474433, - 24001492724708152128532429997821042794733165711390518030990799793503273770652, - 2633770197326005383994291008888134007953313769992494793298115970819953799551, - 10415822002257259745593431055103097617944110753033232043304507309339010959421, - 5040900544588789580974365328702256596367844112246930459775611110584529384609, - 7092990540603933664815469356867437650509190941873280712662268306777998721827, - 1632236563317719695008729730198640039589730357093745235039170824750146237889, - 16652169300131653910155327620443196436194395189880674769174827139951269808424, - 14598550966483932632179699829625452635379722126108567167784437138120564839693, - 20306811152595640487102896873781062881758172217344029389177003320477749831022, - 17615063836093256737955629948400920327309057610637709904337930541684950744769, - 14798706087105226074606349229441602290425368359035868450856280400310862649453, - 28031147615665011020930911005082492108678871605485404483348900045611591196311, - 15532493715187601323994386363282289724738343185567523989588586248496642181116, - 12041359299346150731048481304744395174490583711441368184999432627273256440686, - 20171731618420933500834961253195824667717468874553549616264926128987207238305, - 8338764408230191660527245826377997779612639045485062237039111734789114961080, - 5294331539823830733672999254846325010922370950178039865249043517923935509426, - 18435959350199775380114620204245952878086069683633699170084972263505788509858, - 22615148526584566799242163061587431118811910739826880691356321294024779114461, - 13387251220827799131227109087987416343197824277133295028171894951028026505281, - 11738929106979254231959056613143873320116689507622043160265926692283853746342, - 13613743547132375544885500166750052716752728822215140630873419471477277754451, - 1339611690990420540278786731507497749242942031555462573125402654511837247265, - 17105052652685226132611531645516305921125549921921507180983799052533433337175, - 8003116155905402883587551370708919713816665412050668715094540996621344573556, - 13237014921156363248028278992066160415289376873002924625503682306486968382723, - 879989897167692502558703701769869689978652442115869161216296653258044839176, - 23649885992080284997312069604332978301563782692138157527340510083884153447273, - 22305596436880978069271851214690861621748463192958815655075725048084982067791, - 1451425340494882348171623298484168190261021946727534425449231043858011779099, - 13855861360899403261371668668097018296504795522146493259926371290313972367622, - 6954257121974752499817653313065573376496279811943155027781831699812077531362, - 1501700599866379178767456661675876032711819578325185988564773555075595034857, - 26466955264302307921595417630865890420421228720181640202674052643355257452631, - 14265908045059649351496882675935071478448791949596618421430394148982110077229, - 1835963538184581316457052136272345646670210933134617850130259523299806420440, - 12632732625785708295002659476525976475587039274159117983119427358207881182441, - 25161523487982557524107721978549994408681739312886322295940265752344566818567, - 2231669083221570759849372489381528975575907999642295406502435353310537314214, - 18132938202273313584400203069339760887826004821533369850046712175295282198159, - 28844493535187237528607766499370579562016716687537589355847077364881382054575, - 16990021968239165978258248347288953632403006017094618984060145871772212764845, - 28739389448124712046605612111897468595410331225789460909768028672273371581958, - 14107226133254157459232109243408184982737245955824165190452122666034557202087, - 17632738392935955425340258349255871945983195243645267361432152426104670283788, - 22845320334288032708942171750631058332979977296202817781606709660795310336483, - 15701132467871919825018024875207012608028960342034422348766110610076860097859, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 16282821295661236479023912685539589269086626120234649164462902685519476656592, - 4295205064453230912872101449993170792905970401678754749988147216841537937620, - 28198697833219334189923816684717002543602920069910594785597266487498148523870, - 17891203830156453876956078996004920271036014021533417224170974067208216601703, - 5911229141700227144541715457557567697281122878785361348057987395367730692283, - 22708119636146901915922769433803693592137966281563094238309392462134696713324, - 15255289086154637723543383447202141216898127084181538793835838955534680243549, - 9822992368845619458542559122419135424964624477009905295720933437908812438194, - 28336751196692125825206280078298394562971507269177652352864439918563362023984, - 17798914835779426211970460006818900956839587778737086433910561148699936807427, - 12173487650256236567877294766780225205439671195087725509374927206658919988314, - 8546295955797864127010988341190793828517919678470921685302947319507151962335, - 15105854952902418834269591301217280524366983711045984608317191166708978127145, - 18491376365795350144503269408455530343793482052663015956178048715513611406203, - 16221864536502615631980979964668288450317317371147091060694095899151503639747, - 9519306118137437477296160681347787831718742786237537419021099081673273432077, - 1828375556492032543370630871599181680626054083827149513821341616496533931180, - 14532553130399504128864273815175983572681327963499643450830578683158045051088, - 13806143828658920604653811214459745160526156299899194105003039829404281939236, - 21677366383028409741651124301672889055915143610106128174078188209337480718539, - 7497365406686591516136275799519851738056433500165297000450415380901841834738, - 11082673892088893582121464103698089526189574961395186300560026072577686710261, - 21840051173290088750377335154124032240668643658355954102158068406791911456411, - 17351682675035183551436994752568730447765316333728829284275431639098039334512, - 14022762599686302176026646914549540717100346176029056416113460334917709226744, - 27978245190056279229692763190303424169549043084254373363906247160646199594515, - 14461461771799677654017777117338945851377547219104322838600220560516293427356, - 17564757440118220600675489280590254151923712940706892869478972769840418457635, - 21815598907196777691445920277857002103959228082570912063323130218788538733193, - 7358237762751057012424941296608466274034817842087745360389357379284117549732, - 11810626818371604294708453458309753376008077755506945420564072757415239409545, - 26912748767395245377771123936593955842239086573241116606529426101611852107474, - 28045754565497567218313815510153164850160812290001533322256204556878672210685, - 4430614918184468006846751296134493176588839662954289976354926108393111505348, - 19872404709285819095020477536140820966231416330563398437289255091306661382284, - 19326322450955066267758337560000055419883224223428472906580812324929588841264, - 27674068120067053785042736434998263020785858204524681324028670844064644633023, - 27412857330835622333013445447634112239898888873844827807756556432593637880726, - 24682236218499316256116184057935956900066450357800305437458989367500718714833, - 27180938934433927690377545371633915753075499681300196017879714997797679192332, - 25629315461974072970256979424923440745009227427597797969419480653812297129276, - 1016868605640715040040077111084256295412989295229805290627862796628513565389, - 12174451344901867371747121143916474287913641433558421954298894775115636105605, - 12378066171942160329149126580141604161241179887990644873241995425596885988734, - 7354720043741565412245146949416661672231346925994487137406963541785007652002, - 18137987077150694625815400585246393656498160562154344002755317004470145216091, - 20176380948677499445673804755402884536434103092222401927043369592526199334698, - 26639113406603762994997253872861268998287702768326719951107939705363924703049, - 16207127342744662697004906974217699328124928520738315414896942451468679742680, - 10042405468630587369024209399619359647876676370159830003746139596973255635041, - 2106392139716826410921444012744773412824354042372186953626000304539450302912, - 17561438246294780941275031774356204175014323179177294715496325182731868568910, - 4292031084185452020905940016648601803499113748499572807208798084208217009321, - 16797976570717345665130946180893310089564099546398446160344589290942425835566, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 7306136642597923897555791151863996660212462335849450287367524537095180221634, - 295836087001599150219965185724981361284218003091634650488121505386715848421, - 3 -]}] \ No newline at end of file diff --git a/contracts/zkllvm/mina_scalar/circuit_params.json b/contracts/zkllvm/mina_scalar/circuit_params.json deleted file mode 100644 index ea53023..0000000 --- a/contracts/zkllvm/mina_scalar/circuit_params.json +++ /dev/null @@ -1,29 +0,0 @@ -{ "_test_name":"Test name", - "arithmetization_params":[15,1,1,30], - "columns_rotations":[[-1,0,1],[-1,0,1],[0,1],[0],[0],[-1,0],[0],[0],[0],[0],[0],[0],[0],[0,1],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]], - "modulus":28948022309329048855892746252171976963363056481941647379679742748393362948097, - "r":14, - "m":2, - "lambda":1, - "batches_num":4, - "step_list":[1,1,1,1,1,1,1,1,1,1,1,1,1,1], - "D_omegas":[ - 27089958442152501875810132276080823478704708607790900112361486996955217465106, - 4962941270686734179124851736304457391480500057160355425531240539629160391514, - 24698565941386146905064983207718127075873794584889341429041780832303738174137, - 19342635675472973030958703460855586838246018162847467754269942910820871215401, - 5032528351894390093615884424140114457150112013647720477219996067428709871325, - 22090338513913049959963172982829382927035332346328063108352787446596923585926, - 25165177819627306674965102406249393023864159703467953217189030835046387946339, - 20406162866908888653425069393176433404558180282626759233524330349859168426307, - 24118114923975171970075748640221677083961848771131734379542430306560974812756, - 25227411734906969830001887161842150884725543104432911324890985713481442730673, - 2799975530188595297561234903824607897079093402088395318086163719444963742400, - 19366951025174438143523342051730202536500593522667444600037456491292628123146, - 4855188899445002300170730717563617051094175372704778513906105166874447905568, - 4265513433803163958251475299683560813532603332905934989976535652412227143402 - ], - "rows_amount":32768, - "max_degree":32767, - "omega":27089958442152501875810132276080823478704708607790900112361486996955217465106 -} diff --git a/contracts/zkllvm/mina_scalar/gate0.sol b/contracts/zkllvm/mina_scalar/gate0.sol deleted file mode 100644 index 3746627..0000000 --- a/contracts/zkllvm/mina_scalar/gate0.sol +++ /dev/null @@ -1,536 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate0{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6819a58283e528e511db4d81cf70f5a0fed467d47c033af2aa9d2e050aa0e50,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(1,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(7,0, local_vars),get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,0, local_vars),get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(10,0, local_vars),get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(12,0, local_vars),get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(13,0, local_vars),get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(14,0, local_vars),get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffff01,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215ffffff16,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x140,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffab,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffff8b,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xa0,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215ffffffd6,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215ffffffc6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x50,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffeb,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffe3,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffff6,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffff2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x14,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90afffffffb,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90afffffff9,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xa,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffffe,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffffd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x5,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3555555555555555555555555555555571e57f7cb2a68cb89f906e9b7fffffff,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2000000000000000000000000000000011234c7e04ca546ec623759080000003,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f21600000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffff01,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x80 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffd96,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1c0,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffab,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90afffffecb,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xe0,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215ffffffd6,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x20 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215ffffff66,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x70,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffeb,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x10 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffb3,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x38,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffff6,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215ffffffda,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1c,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90afffffffb,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffed,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xe,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffffe,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f215fffffff7,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x7,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1555555555555555555555555555555560c232feaddc3849d96cf90affffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3555555555555555555555555555555571e57f7cb2a68cb89f906e9b7ffffffc,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2000000000000000000000000000000011234c7e04ca546ec623759080000004,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac18465fd5bb87093b2d9f21600000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffff0001,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffc001,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffff001,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffc01,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffff01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffc1,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffff1,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(0,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(2,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate10.sol b/contracts/zkllvm/mina_scalar/gate10.sol deleted file mode 100644 index fef877c..0000000 --- a/contracts/zkllvm/mina_scalar/gate10.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate10{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x32b861e624b9790a34e10657cce5e549a180c584fafa0e5311dc25917ff93c77 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xb6b09130ed2a3c28a73ac7f9adeab1db2c75c737c5e7a38796c5d5e9a03cd51 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3c8126cbc433b9524bcff0c2734773cf0ec392e4f911458bad7649da217c869b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xaab741eb1e3434282d3f173b56a1a03f9b2be41d57b29e97011e039f8d321b3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xb1a7cd810172be47e499493c052bdb4f24d987877040d247d95dc18b9d46676 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3f0aa3eddc540afaff3b53befc09862323a1aa40d307b28e98a0ac3e8eb97b92 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2e22b54e8cb08f96b6733c6f5be4821cac6e026f1d02f3163f57530e1711831a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x21cbb0daa283a1ac8bc618a063b159b25048f74b71064c5a29e6959b6c964bc5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b82465052d2d083bdb6ca8a780545667ba30b5a99aaee689d17ab5b5f7870bd - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xe88b31d62ff0a9942b660e7eae820dd065f78a003ad56601aa522844f17be5a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xd4209f5997a99a78e09abe966690af763bf88326a5501e941cb264e3da04029 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x10a9807b13ec8df9ee6ff3b4617cfc0fd5b9d3368bea5b47b258ea8bebdfa19c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1242d869de1a6e25a80abba60be9f221f2ea201790c299ae44e367f2fec43f82 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d8a04a45ac482d4acdd19c0f65b7fd94bc2625f7b8284c30bc66579754c5c98 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x222f41456da01e20ec08cd4fcd783526deeffb991d044f2dc97ed91aaa168289 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(10,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x35c82871c6d5a37bbe06716242ae56eb03cd9d74910ebc25069667d4af3015b4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x214481da6dedd32e92d81ecbef4d4b72d0390a6236088b56dd3c29eb9a201479 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1b59bab4f5963a66e929b0acd4a9dd9094fd0267d6dcd7edc5d0f5873c4249b2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1969974c187ca20d07a47d161079b83bf040b162f637c27466daf5c1f8bb7df8 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a378c8a2baeb442224027b1ae0db9bbb32b8240b0d75d039216f5a295599faa - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2e319d441edbdccb3d9f5987e8416f758e23bf4242a6121d84d3ee5803afe24b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1fcb748294c7e402c536dc29f469af794fc4c055b4e749ab7b7473a869be0169 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2c672f6f02eebb2e17b8671c5f1056bd764833f2c1b0050de83cec0c4abe0518 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1b9e5e5d291c5f4d1ae7a51937bb01d5e719131c57c51fbe8fcd3ca022889414 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1e0e216b3b50ff7e7745a1510e256548ab3caa71bef3d27e72d44c427f777a6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x22119152f8043f0177c0b2c6866b28a47e819ff4e8ad5dfab233e4b53c5823c6 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1782f9c694349caaa34d00bf715f8a30e21b8858438ca4a07f5407b8a1391d54 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x927b36ac2a7b9f8b87259e7c23b258e6487257ec3995107e70b3d5fdc51f8e5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1b3702ec2d9785606f39e25d97dc2b6cd7118c01c10756590a0d4d10958f538d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3ad1fad595b6cba836b89333b0266db1c5d451427b3c050de5be2a28ceb41599 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(11,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate12.sol b/contracts/zkllvm/mina_scalar/gate12.sol deleted file mode 100644 index 7c84c8b..0000000 --- a/contracts/zkllvm/mina_scalar/gate12.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate12{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x102cd45175bf54b670945d6f8cc447db1d687d1486d2daed5263ef58bc5fe1af - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3b17182cbec37373301eab23ae0ce3899fe41c8a0f495802e11ef87c2d9dc15b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1f3e92ff6831414c7aaf749f9b784550e69947a060f3ef659aea361ec6be71c9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xb0e209fca5538adfbc97eda4f3b313f1a639f11098f57606570d9e2e0c99d90 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x8a68c4a61284b424cc9bd2df19c9b0ca7b2696bf09dec37e085e41bb7ebda21 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1961736877fc1ae2bcbc6483e73bd9f1a0a88f1430cbd5568600af657ee39675 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1e41e6ec078b0c124775e09f32ea8034ab4778471e810e2f6beb90f99bf6787f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x85f57457c2477b08de3dafd82e773856a7f14f091344182586521e2bfdc6d82 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3a92f1980218864841a0cf75c31ee61de44195152ed6ed0873ab36d339590f5d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2bb8dcbc95cd625a9bb33169011b6ad51be606389dc380a4d74716f8c3017d3d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x313f4a0eb45af55d4fdd2f90446df5d572923343419c891c730fd0d44495300a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x397a21e7265cb95ca3bb5d5b538d7c2924184e5e493beb8a15462efc6ad8e8e0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2872348b4ab95215be502a26c10a9b34e76b8a06e992a702a23740d0d9447345 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x23e234e10930a0fc951ffcf40870e9bc5e0d14c2afb733e3635cb4bd8ca336de - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x33051936666b3a08fd345c4cd5b1c70cac04913c21c70ce814e3afdf7bc15ec9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(12,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x17c75fdaa78e92d4b63f904cb3b6327e137f7a75ecea157e4216acdefcf51c22 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x13e6bb0c13d7ad1294af043b544370d7daaee591e5e1870b1607f695e5a5fdef - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xf5de7532ef60fb9a86ab17d0605333baad379b17447b03179758c63baf16236 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1b772105baac05a42a5044a02d75e1665cc0d306c7ce84af1c24d56eded3e2de - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2f3628d7ddba3889255e9aa968057863dd5f68c3de0ea375c9debee5b0fb1b1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xc553b9adb0cd0caa912e95f6ed10d8b9f83e9313d990f0eb2c3566a3f1c89a2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x27a75a0abc54f58f34c6a81f77b4eb94df7a60980defc8a977ec3a843882bd74 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1262905197100d186c699e8df81d7245e4cd5dddd25ad5ceedabdabcb1606634 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28b8054f8b4c833e35824082923ec98c12e97219067af5860c7e52a1edb83553 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3c706fa24aed70db1b671c957b20a5a7350a8ded30a115a6a0cdbe6acb07947a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3f0001bd31b5785f4c5614181120e93f5493fc666e264f8de1dd2aae83917da2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xeb3cf6f32f5b9a256a502aea3f88e8fe3f7b6531ed61939866bf263b6431ba9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a048e26f8e39a73c6019bc6d16f453bc88e96c9759414cbf5f0dacbf31f957 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x160184702f555c8605841f2429bcf6a1a7a3dfbc245b27688d604ef6fd16734 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xc11b089006a428ca139fd1190b2e99b575a7154455ebe09d77e0bb44ae0fef3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(13,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate14.sol b/contracts/zkllvm/mina_scalar/gate14.sol deleted file mode 100644 index 794d43e..0000000 --- a/contracts/zkllvm/mina_scalar/gate14.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate14{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x298f3df7f0d69a412c0b624f49c510a0cc1b6489d4304d4b7045b870e337ded1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1efa9addb1d119b22b8641c569623cf3bcb365a94ef9866bebb2bf2f40b7a8be - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x36583922b72040af4ecfaa4cf017a06cd65d47707ea43424fca9066f209769eb - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x206ee97ee155209881934af04a631f057126ef0b2ba365b988e5dd07cd5855e5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x264ae5b73dda25064cb9ee333a45f8816685f75f0cf8ed060168d95159aaf8a2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xd792d6149f3c29dfb14acb2ec0bf2e52c1049ec28327ecad1e74ab77790ce03 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3642bfc2fa24ec81586c0ef4922f7858d7cdcf4bedc7393fdd0d3bf20a82cb93 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x58e9abfdc1bcc9c19f776153af14e0ea64252f5812d36f2dcc1cf6e2ff4c516 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xbea46b09d3a6b990efdbbd4b45182946efe008ab4c7c771babf98c6904a4bbe - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x35ca0f0399ff6d47e0ea2290f4c2e860ba645b3faa1afa78f5ee443f265cb9b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x191ec9f5080239d1641f79ae3d3a6ff14c979c4b31496e34fe119ebaa75f879e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xf2fa77be8b285e2162cb376ddb2e80c686ab94b9059541cb99c3c3333ca842b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x138099074fa7fdc90fda229d9adffb661864d8fcfb34cee6ef8a7a460f53a93d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x33a3465caf2d23b9c22fa2429691edd3b92ee195b57c9cab530f0c3cb394146e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2b2b28662bc26e4b2f6263d4023ec59b6db980870491769a2a4d2bae9813646f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(14,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x39f3a9577b3295e2caeb0d76a7e947b1b0e5b9ab02abd8ac1b3f8162e53a3fb5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1c1ea0c83ded993791526675b91bd0918a4ac32a460fb3c000f21acf57f28ac4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a14d6eefcb549410b56969ac0a33cc1b931e045c875a28ecc2b1c0b8015b1ac - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x216a3fb3afa8542e4bc5d0436bd4dc6e5165be0c825c702a42f87dc14f985eea - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2ab89fd037caa755ecd8dde02ddf05dd6594a20fc6a6f1118656f61839a77c36 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x294996153ce18d5618c604fc02815c77f2811fe0f423654af165bb5e010174c4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x38fcb0b1dae59a3bbdcb862362ad785ce085901b54267f39fa4d4aa6f357dd10 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2062a8ce45fbf23a9719e47a8e156a3773b05cfefc522abb1c6c991bc0a97e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xc0d320969fec65f04b5c57ed866d1d5667270b4971083bb0210fcae42a4fe3a - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3ca9e92aafcc2703f6dc67093a7403917753ac5e349496b87552614539ceba86 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x21357fe769bc20eb8c167256c01a756aab67a82a76c0939ddd8a196eef3e9fc2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x19ddc35b50d27278735aacf3c19800e38c918d5fae1212fbfaf62eef106f4569 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x26e7f05a05349b1164b7d83328999dd543339a7b5e7ce1a43bd1b492ef5d5ca0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3e960e9a7aa1f68afe0da294c5517ea33b5df739800f9fa6b2f085a1f1266bbb - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x9c57076e21a68b0f9451fbc4395d94bd0b97781133b9a4a7363c525dea32601 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(15,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate16.sol b/contracts/zkllvm/mina_scalar/gate16.sol deleted file mode 100644 index fd3b6f0..0000000 --- a/contracts/zkllvm/mina_scalar/gate16.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate16{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2dd55583ccf2234a8e7f8b619a69ff5b429a3b218df940327cbbbc3a21caf314 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x312dfc21035ec14209507fa560a242012946911cdec1792bc4158538c854a1c2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2e3316b4438569168f71662c9993f5d8cf1cecb00a5245932cae4d4403d70299 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28fa99ca785fc34eeb7a5362fe02ef35110ddae3e8c23ec8a79b7004f021372f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2d52d759fb7a5d26ee9c6fae68e0bc230ca5b92910f3ca681d3a66a1129c1284 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x35619e33ca1456c8b115ee88ac55556c4b93f9a6fd685420aba0e392fa246b8c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x38d3c29d30ff956a2374d5ac078744d925975cd3328affc757534a81adafab54 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3e3170e974bb908186846e98803b9568c519ee982d5f17aac47d7881a41db585 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x317b958dee1025c27eea4a40895548155f908f6be29833d890c53ed6883aa9f4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x354470262905c88dfdd05777ff3ed423673464b4d971dbc97a3316cedaa5f0ac - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x23a266c743ca5b7cd17c8a23cf82458610d96ea59b543e2a6dbbe77d9137f832 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xa41585390bf1f0af0f72cda4160fae04aebbe70064e89907694253f5c28dbd0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3be6ca83dfa581e1fd73f0b63421547a6a174b447a79adc236ddff052d1b7351 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x26cc1bdb387718b995ea60e01fea538e115228b72fb5406abe4cc8a61b2de6f7 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x321d8332256a544c267248929080ead619731d53f23bea2e5d692ec82ec1a9f2 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(16,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3ca5ced2a29340ff2aa0f6801450642a3780a673ead59de354c8bf793230d0b0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x33190beabb635aea1b256e88ad836dbd747a006e23b32470847915f8b0c60631 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x7028eabc25a3b3fbb823dd55d3e1c8bd58e4a4a0a7da4d74b91dbc3207371a0 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a7217a6552ac395e821baa54f985f654b7af6ccc892d73f146e4889a3f2369c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x13cffa7711517343c7eb42e289b90b8d32db5455fd239ce77c3db3d0b1acd376 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x34e67308bd5fd6bf653fdc6846e1d8fb27b1ac0ac2040934b5281cd0781d303e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2ff4c8a3de2ca82a9862719261484007347241a6d3d543c1eb952d9d304aba69 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a5b8b2bba6f1d4dc4744e1860a9ec0ebca81e194cb39aee7f654a1f14c1c31c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x155df199bd56761e19067eb3db0fdd670622f117fe9fa308d315e390da4812b4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x269a680d29a3a96d8f986a40b9148416b715347fe65096ca281a1e3223fe143d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1b7d6e55ae9255f5932e6e3e39ae57d0a52b39f38bc92beefaa46ed87b7c1d44 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x93fd46752d8dd488b514ece4ce402f7a5dc19ceff54fe9cceae513b0d8f7882 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2dbf1f96b65e526d427516f88d4a27afd0d280cf81f276b5e1d233bdf245be6c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x47c081c90cf6c6587139c34daab55f9b8a4d93a50dc379120bcb1c841495e9e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x29974fa7d31fb080a4e1ca1e4833c1fa6422cccf6b88bf9a26edd1e1d572efd3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(17,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate18.sol b/contracts/zkllvm/mina_scalar/gate18.sol deleted file mode 100644 index 99c6a9e..0000000 --- a/contracts/zkllvm/mina_scalar/gate18.sol +++ /dev/null @@ -1,1222 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate18{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x192958f716b9b37a16389fa1780469fcb2749a74d1f9e4a2b6e662cb7d1bfd94 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3a6b0330e79c66c4bc52f5ec3a0385ac2ca71b99db19887049ede3fcc59619d4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3871b3a7749222f01812ac560da4953c5f5bd735c9e5dc5efad79ddb66fae6c1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x30bb15c1eb3c1b7b61185ada0188e8f49bedf286d313c673c249ce0e6cd50964 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x117a98436171c9642088b7293809887ca5e684a6352f8eae7c1b5621e06aec88 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x83ca4fa9e8e67d33828b19f7e0353d0abf77918faab23025bdcc870682ae453 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x16243002a4aa298e37a35bdfc853a19b4f5756299949b4636bbf6ce6a1a0e264 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1fef67bdd1fab3e2233b9abee2ffd2d45c9e741a419fb5feb302aee942fb5ae1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3821cd12b3aebcbcf10bc510eff06b7129ecedc475ea56798aeff53926d3237d - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xb16a5233f3a3cb02c7546db95fb33eff8502041b5d3b1e0644e6ad06b1c9e68 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x22a050ea8ed93a66dcd67dca935f1584a06e233bec107d80baad60c4b8f059de - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x29f57fe8942d7e1c05647d1bbf9c338429d7e0e871af8a9b8dffa53e83a81e2f - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2813380a214eb73abd5dd2fd4f67bc68fdb58ec04c4ba59affb724a00ce4dbfb - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3fdf59551e807dd438fca25c476ce7695a2546c79a6a65323e46c1450fefe4c4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3615f13ef3f18846c7a5a7332a133c3796eaaba35a2202051092a43fb058372b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(18,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100000000000000000000000000000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1000000000000000000000000000000000000000000000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc0994a8dd188dd64200000002 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc0994a8dcae8d841d0994a8df - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc0994a8dc8c46eb2100000002 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc0994a8dccc46eb2100000002 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(10,0, local_vars),get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(19,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,1, local_vars),get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(6,0, local_vars),get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(7,0, local_vars),get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,0, local_vars),get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(10,0, local_vars),get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(12,0, local_vars),get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(13,0, local_vars),get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(14,0, local_vars),get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffe,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20ffffffff,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x6,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb20fffffffb,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x4000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x400000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4000,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x400,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000,get_witness_i_by_rotation_idx(0,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(20,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10000000000000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(21,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(0,2, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(22,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(1,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(23,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate3.sol b/contracts/zkllvm/mina_scalar/gate3.sol deleted file mode 100644 index 0eed653..0000000 --- a/contracts/zkllvm/mina_scalar/gate3.sol +++ /dev/null @@ -1,1031 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate3{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(14,0, local_vars),get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(13,0, local_vars),get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(5,0, local_vars),get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(12,0, local_vars),get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(11,0, local_vars),get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(2,0, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(10,0, local_vars),get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(9,0, local_vars),get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(3,0, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(8,0, local_vars),get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(7,0, local_vars),get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(get_witness_i_by_rotation_idx(4,0, local_vars),get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(0x80,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x20,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x10,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x8,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x4,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x100,get_witness_i_by_rotation_idx(1,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(3,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(4,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(5,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(1,1, local_vars),get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(6,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=mulmod(get_witness_i_by_rotation_idx(0,1, local_vars),get_constant_i(0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(7,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate8.sol b/contracts/zkllvm/mina_scalar/gate8.sol deleted file mode 100644 index 7b2f9dc..0000000 --- a/contracts/zkllvm/mina_scalar/gate8.sol +++ /dev/null @@ -1,1008 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Ilias Khairullin -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2022-2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "./gate_argument.sol"; - -library mina_scalar_gate8{ - uint256 constant MODULUS_OFFSET = 0x0; - uint256 constant THETA_OFFSET = 0x20; - - uint256 constant CONSTRAINT_EVAL_OFFSET = 0x00; - uint256 constant GATE_EVAL_OFFSET = 0x20; - uint256 constant GATES_EVALUATIONS_OFFSET = 0x40; - uint256 constant THETA_ACC_OFFSET = 0x60; - - uint256 constant WITNESS_EVALUATIONS_OFFSET = 0x80; - uint256 constant CONSTANT_EVALUATIONS_OFFSET = 0xa0; - uint256 constant SELECTOR_EVALUATIONS_OFFSET = 0xc0; - - - function evaluate_gate_be( - types.gate_argument_params memory gate_params, - mina_scalar_gate_argument_split_gen.local_vars_type memory local_vars - ) external pure returns (uint256 gates_evaluation, uint256 theta_acc) { - gates_evaluation = local_vars.gates_evaluation; - theta_acc = local_vars.theta_acc; - uint256 terms; - assembly { - let modulus := mload(gate_params) - let theta := mload(add(gate_params, THETA_OFFSET)) - - - function get_witness_i_by_rotation_idx(idx, rot_idx, ptr) -> result { - result := mload( - add( - add(mload(add(add(mload(add(ptr, WITNESS_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))), 0x20), - mul(0x20, rot_idx) - ) - ) - } - - function get_constant_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, CONSTANT_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - function get_selector_i(idx, ptr) -> result { - result := mload(add(add(mload(add(ptr, SELECTOR_EVALUATIONS_OFFSET)), 0x20), mul(0x20, idx))) - } - - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3a6f10d5eb45c31081706c59221b2b7f1cc93bf6c19db84a4a903262e63ff11b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x388055881287007496a7a620cb24aea82b9207a58a3570b2fc789791f1a00192 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1ab4836b6aa3766b12e91366af2a6537d7ce217efa55fa82421c25e145d21b1 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x8266e2372b21c6edcaa8ba38287074fdd2fe7aed8b215b8d0e91aab35f0f3e4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x33f9eb22e3009397e8500f627d107d71a17babae697126ad0349e910df07e0f3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3ccca1cca5c012bb7bdca6ad74c1771e9ffc81be617ad0ef234102f212fabdbe - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x34ddfd55ab2bd0b0f896c8998dc469db5849f428cf6909f97d2a6a86ea5b75e4 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x16fdac1f1e2d38d4cd5a4d8dec85f76d6cb34df07a6df3e1665cea4ac58f1622 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x16678c18cfda283748e02df62ec2458814488e819134a3a52043c8c49c2ff0e - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x29b97d0aa13ceb09c60a07f9d5b220ee34c5c379e40306ad96f7b7136fe9a27c - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xf645def6c362fb37e42ad8c52ef9b1e64b631cadc623effb167765e14e2c200 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a618d44fcf34766b4d153e2b1182f0fb73b8fcd9382d47d2bebad949f5d8b28 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x328bc240390c37cc31d10b6a94152c3f09496763a474706573433e8e6de7022b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2734a56dcf148bfba1217cb53922ed644fa652ce3f77120c248d2d12e1695979 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x127d07a03ddd4dea6fd29e37a36974c6aca92ccd6ef3c7bdbbbe696151cee19b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(8,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET), 0) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(3,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x16df7d741a68d347007fdcc7956f57c86649ce624b70a7a59474d93448dade1b - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(4,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xefe88b1e3c28d2fef104d63e93b89169988e488e7e5695aabea215a4fc9f7ae - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(5,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(0,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(1,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(2,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0xd84b19cac3f661be5700546efc669464fa99121fa7a8fc2e54b95608df390ad - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(6,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3f8e3d6fe722b72a3aa8c861562b502816b4206d348ada06d18270bb4574b8a5 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(7,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1a10211093a52a97cb4db301fc2a8c9f6e133a3306cd19f457b83052548d9fc9 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(8,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(3,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(4,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(5,1, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2f6001a326e70328258024bf2cd53bf92df311ac2f518ca7c263951f4308f718 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(9,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x20b21a2874bc871f135b6126b666274390fdf94e0c0b3c528c8c443e9ab2e742 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(10,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x28ce7a1e1552f99b45e3fe471be85bbdf623f4bea7684ae40035a302dfa1b663 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(11,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(6,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(7,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(8,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x29e5f174ce5902bd8d823f5c851b08eaba0ba5a395d770f5fe363f55f1de0544 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(12,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x21354c0bd6cb5339bb33dd8cea13294535efa9e76b840756850dcb6c3bf5834 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(13,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x1628abe2d5b03206380ebb31e16a85a1c5d93bf5c37c677574763de78f74d7fa - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(14,0, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(9,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(10,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(11,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x22fadaaa797a6882cde01793fa0b9d51f3effa8ee968d317613ed5eefbabeeb7 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(0,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x1d70822e80b8581cfb5ab2c8822851174db06f98c33edea8c227e30dc22a6b3,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0xf24f954496903346d4d753deb0b76c2e26e4dbebf04906842d108dc883cda01,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x28beef43e4fa739fe900a17ead54c004b4182caf07ae3e235c20915be480a9c7,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x3d82e513f3337f08e2f62d563f48911a23ac11aa9a863fc2ece730eaf34860cf - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(1,2, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x2d2c9057cafceb967f3fa5e2b7432af2f3a9556b26410784eb48b2a2d4b514f5,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x154e83714c9641589160f3c7a17450390d0fda1f7b8dd86db5ead4b016b263ac,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3f336eacd7e9a3ec67950ed81ef7461a48a08c9e40666a67558e2746a4b57aca,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x23d71297ea61ab207d6919ab4f3e4a78f46283a451e47e0166d91f0affdd6459 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET), 0) - terms:=get_witness_i_by_rotation_idx(2,1, local_vars) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3b26592d8f96997714bcb9eac4c7f39ee808ce0b0e3a8a5a0c0650405ebc2ce6,get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(12,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x3d57fa111cce837451e082ea541b2d8033e6ed2c6f61740c012db87dc88b3cdd,get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(13,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=mulmod(0x264f6d16392002e14e4920d243ff44dd9e8cf174e256dd2ff0b96153afd48444,get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - terms:=mulmod(terms, get_witness_i_by_rotation_idx(14,0, local_vars), modulus) - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - terms:=0x2a36341d640b1827451dd22ddec3798dd3ad5411bdf67427242b0005f68ddea3 - mstore(add(local_vars, CONSTRAINT_EVAL_OFFSET),addmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),terms,modulus)) - mstore(add(local_vars, GATE_EVAL_OFFSET),addmod(mload(add(local_vars, GATE_EVAL_OFFSET)),mulmod(mload(add(local_vars, CONSTRAINT_EVAL_OFFSET)),theta_acc,modulus),modulus)) - theta_acc := mulmod(theta_acc, theta, modulus) - mstore(add(local_vars, GATE_EVAL_OFFSET),mulmod(mload(add(local_vars, GATE_EVAL_OFFSET)),get_selector_i(9,local_vars),modulus)) - gates_evaluation := addmod(gates_evaluation,mload(add(local_vars, GATE_EVAL_OFFSET)),modulus) - - } - } -} diff --git a/contracts/zkllvm/mina_scalar/gate_argument.sol b/contracts/zkllvm/mina_scalar/gate_argument.sol deleted file mode 100644 index 14614eb..0000000 --- a/contracts/zkllvm/mina_scalar/gate_argument.sol +++ /dev/null @@ -1,115 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0. -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Aleksei Moskvin -// Copyright (c) 2023 Elena Tatuzova -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -//---------------------------------------------------------------------------// -pragma solidity >=0.8.4; - -import "../../../contracts/types.sol"; -import "../../../contracts/basic_marshalling.sol"; -import "../../../contracts/commitments/batched_lpc_verifier.sol"; -import "../../../contracts/interfaces/gate_argument.sol"; - -import "./gate0.sol"; -import "./gate3.sol"; -import "./gate8.sol"; -import "./gate10.sol"; -import "./gate12.sol"; -import "./gate14.sol"; -import "./gate16.sol"; -import "./gate18.sol"; - - -contract mina_scalar_gate_argument_split_gen is IGateArgument{ - uint256 constant GATES_N = 24; - - struct local_vars_type{ - // 0x0 - uint256 constraint_eval; - // 0x20 - uint256 gate_eval; - // 0x40 - uint256 gates_evaluation; - // 0x60 - uint256 theta_acc; - - //0x80 - uint256[][] witness_evaluations; - //a0 - uint256[] constant_evaluations; - //c0 - uint256[] selector_evaluations; - - } - - // TODO: columns_rotations could be hard-coded - function evaluate_gates_be( - bytes calldata blob, - uint256 eval_proof_combined_value_offset, - types.gate_argument_params memory gate_params, - types.arithmetization_params memory ar_params, - int256[][] calldata columns_rotations - ) external pure returns (uint256 gates_evaluation) { - local_vars_type memory local_vars; - - - local_vars.witness_evaluations = new uint256[][](ar_params.witness_columns); - for (uint256 i = 0; i < ar_params.witness_columns;) { - local_vars.witness_evaluations[i] = new uint256[](columns_rotations[i].length); - for (uint256 j = 0; j < columns_rotations[i].length;) { - local_vars.witness_evaluations[i][j] = batched_lpc_verifier.get_variable_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, i, j - ); - unchecked{j++;} - } - unchecked{i++;} - } - - local_vars.constant_evaluations = new uint256[](ar_params.constant_columns); - for (uint256 i = 0; i < ar_params.constant_columns;) { - local_vars.constant_evaluations[i] = batched_lpc_verifier.get_fixed_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, ar_params.permutation_columns + ar_params.permutation_columns + i, 0 - ); - - unchecked{i++;} - } - - local_vars.selector_evaluations = new uint256[](ar_params.selector_columns); - for (uint256 i = 0; i < ar_params.selector_columns;) { - local_vars.selector_evaluations[i] = batched_lpc_verifier.get_fixed_values_z_i_j_from_proof_be( - blob, eval_proof_combined_value_offset, ar_params.permutation_columns + ar_params.permutation_columns + ar_params.constant_columns + i, 0 - ); - unchecked{i++;} - } - - - local_vars.theta_acc = 1; - local_vars.gates_evaluation = 0; - - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate0.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate3.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate8.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate10.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate12.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate14.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate16.evaluate_gate_be(gate_params, local_vars); - (local_vars.gates_evaluation, local_vars.theta_acc) = mina_scalar_gate18.evaluate_gate_be(gate_params, local_vars); - - - gates_evaluation = local_vars.gates_evaluation; - } -} diff --git a/contracts/zkllvm/mina_scalar/linked_libs_list.json b/contracts/zkllvm/mina_scalar/linked_libs_list.json deleted file mode 100644 index 68dceaa..0000000 --- a/contracts/zkllvm/mina_scalar/linked_libs_list.json +++ /dev/null @@ -1,10 +0,0 @@ -[ -"mina_scalar_gate0", -"mina_scalar_gate3", -"mina_scalar_gate8", -"mina_scalar_gate10", -"mina_scalar_gate12", -"mina_scalar_gate14", -"mina_scalar_gate16", -"mina_scalar_gate18" -] diff --git a/contracts/zkllvm/mina_scalar/proof.bin b/contracts/zkllvm/mina_scalar/proof.bin deleted file mode 100644 index 558d601..0000000 --- a/contracts/zkllvm/mina_scalar/proof.bin +++ /dev/null @@ -1 +0,0 @@ -0x00000000000000204026793606dff20bf4f7e0ed0ce8bcbc9cfddc806ae51de108c69d59e4983fad0000000000000020a247181950362fb8ac7c5e483dba73b56f443a3cf107ed416dd17798ae4dd8080000000000000020de8e5a022d9d3a4bd552c4b0c22cfe25f0987d1ddeb961359461f1c0e10af62400000000000000200a04b55e5bd650bae7eecd02622d29219f30ded9842f997c44c8c7a627b13f8037bd494a2be9b7dadd8a8a13faedbef97236954e6fe256dd34abf3b2df1aa42e2f6b36cb5852e508706b47917797fa10ce2bff6c69db8a3a35b74559d259b56b00000000000000040000000000000010000000000000000305c12f947c5b4c77387b821f9a466626033b5daab2e7a0cc67bb89aa6cf88b6b234f38469df0b13dfcd0f3b11cf5c311e57c3d447ec93d7c8e4d5bebd084d2391a25c781a891bfa65c6a14c8d65a78e9631e0a07a5189474ebf9bab3dfa9b71d000000000000000315f9bd8a2972e4db3e9a47b9692c9e2232dce3aa4141bbe03eb142babfffb7a610fc3266e336e527c7b71005f2dd378510fc8075d1bcfce831e3f4727e3ef83b093d8d3de7863d55a8ce299c55ee3f9292c3f8a22b24ad6eeb65ac2dc0e93d3a000000000000000201c41d2cd8671dbd506305b248e6f1b9918bc45a420797b5dec4b0f86e9b360e0da7e02dbb0ad4e5634d5eb83d7837562e96fe6a4b5c9cd7f50e14cd5a17b6be00000000000000013a1ae7ba2656ab25d2d9f727b82c29001e61242b586a2ebf12f2bac69bbe8ce8000000000000000137c3749b50863efbc6ce480d59963e4c5c2173e50648a7ec2d6f11fba8e53c93000000000000000204d863c482232719ae4bd97c1ade5fb092861b2ac1c601726215dfa887bd1888313684bfaa9771fe5a4826ccd98b5e5285040cf9702aeb55fd11f74c991f477200000000000000013621494a8b7ccf999413bb24ec3eba2a5f506285ca51dc99cecdac78d1efc3ee00000000000000011296d56752c4e4cc8c7cd8ea3e822c3f4b5a5c67935e12c61c125fc1f456046600000000000000010e0a6c0d0ff96a5a9fb058e3579796175df6bef48848f3600426483cc71970dc00000000000000010f9a12e1402fb1990c069d53c9e1789f02cda92f9b7b420e4e2c70aba019aca30000000000000001082096b383a9a62c356988bc912dd5bb278430db6d295ed6081b4a766cca7adf000000000000000123e6da47db375a1a4fbbc03549042700f7bfdd1a42008848549c4ee4e77cb29400000000000000010d4a4f1d1cb3448f2b1189ece700d8f5aa5832122dd58c942f28bd872e10904400000000000000021bcd8cff2aee845ce5bf30b84d52ab1ed2cfbe193721ac713f01366dc072cead3b95a8f73d9f0a1130bcbda3e3d2f43ea1eda8177a8aab5557aff0532be9852d0000000000000001239605b60a9271e00ea19e8e55f7114b5286ec3aed456bf2245beb88df6bf67800000000000000013d569fa06de0ffbe3d1525d27056e9fa6b730a6c8d3e4f1e2b50e035c18747b9000000000000000100000000000000020eb83231d2336a10c4910c9f2de471dd5f856efb40b586263e9e66193a218edd3bbef07b30b8f6e7aa0694a5ef35d7ef6fddfefd12aa9516dc0d62e46914b9290000000000000012000000000000000118e3a102067267396d6c54a4d0049e0071e86a704e089d771f12801e7a367c2700000000000000012f12b7351e7a98b560ad08703a259867a6eaf78e89961a710b0674826704e23800000000000000012a8748324098c682b793b5b70eb5cba9eb829f8c5bb63e21960d6bc24f051b6b00000000000000013400000116922012fa83f2dc99b96e35f299eb4535ed27e2b619bc7c71fdb79a00000000000000010100d267a49e3dcd2db00494bdcf74cf13ab11648c27de0c78a863c514643f22000000000000000100b0e26b9fc53237f8df10b4adfd9bd3445cddfc7402e7b6241f5a4214c0184f00000000000000011be032287ad674091e63517216af2c2adadcd026e0a4494a758c2254b1a35c1e00000000000000010a8ab34e8b50c4cc2f037cb43e7e930bfff4a0f3f54991a67a5f60a4cc8fce5800000000000000011ffba259ce28eabe63c2549915d7ca07b668a7e6469c2c081808176129b271c400000000000000010c0fbc789f7ec5feb91a0d2c5d1d894142204530db2b8894591a727122f9a8de0000000000000001093c5d69965e450cb3b02199afc3b50af90792a1b61ff2828adf55552d6b076a00000000000000012afb5282c0e78c93d4ba512a54002cffb5ec13a82c7cf589be08ad76cc3107e200000000000000010e759405f83bf281a92c8c815813b71fb3f92b5bda9438cfb7a56f2a9c06ab4a000000000000000137b97b816a9e122b8250a7ef78cb9c07cf5aff42710223b61fc33388110e1cef00000000000000010123ea7f7a7a5b526e68ccaf755692d789b64c61d8df6fc8cdaa8b6e0c00aa49000000000000000117186e7f85dfede18adf71a32ce739465c6e1d10eb23850bc38e976933c720ad00000000000000012d5028c5cb0f29c8cc22328283a38ecb382ad9e18e76a2e63c4cf2180e22b13b00000000000000010f2eb999fd42d77e08140e0b113f17d11039eff609bff36cc1c6aeddd09616550000000000000043000000000000000137bd494a2be9b7dadd8a8a13faedbef97236954e6fe256dd34abf3b2df1aa42e000000000000000116b26e72db90974653b4b263e6a4badeb1f6869809190edbd64015fa5b8534e20000000000000001317c283e49d2f45fa2877bf38137a659578a07fc23e8a16da2f982c2c99a08690000000000000001376cc937711ec5de2ca56bc186163fbe4ede5cf896cd2c8b8a0acc6af0022a0a0000000000000001151fee153599dd56df3b1ac79e6f3eb7013d6ceacbaf3b43811a5192b00ad22e0000000000000001299fa66a0c0152b25c2785e6182c3992e3ec8799f0d77f73f93cacbc70361ae50000000000000001101e40123c069d7bccc59d7e78dd1fde0ccadb0d977782ab395a9e4b310e867600000000000000011097405b2c21136affdc13785c519f561dafae47ebc0e47a927e2c56f548a04d000000000000000112f441c7dca56116ff4c6159cd981cae7227ce6b912fcd87502ff291ca6b218000000000000000011ec548e74f3ae572fc7de6c103f88f6818806f1dcc5a5ac704a8d1b7f417a77f000000000000000119da6c848c267b3eee7581c513dacd0835f4f99cea9a7427febe4255c4764579000000000000000101441e96bcc0683aa84b88d963460128c93bae1881daf30ce129756ad64f5b5b0000000000000001065498f1afc209254979ac3ef05e05cbee2a667a8946bf4065cf4b162f8cc8c700000000000000011fa6fcb86eca2dba6f605d3ab1d61cfba6d40064ae61bc41fd0c776eedbfebe300000000000000011e42ef9a29f2e4a42ce1d225792e90e9fd96cfff54bf5b8ed8b07ee8a4bf9b6d0000000000000001174eae02d1be7734e0691abb5de8d491af64de049493780f22e4a44937be091f00000000000000013489660e18b85408620d85a8d58c26d84ab1bd1add4caf6e22304a4d16b62d9a00000000000000013991a211375e01d8195fe0436bc5783fb06c8092dc6dee93dd77de1be7fce1250000000000000001173110413f8734f1bb20423763b5f05f91e89cf2c5aa4755818b8c1a0cb79d2800000000000000012728c29c313367d761022f6828779ccc40cf2302f442c319f09db63d412bfd4700000000000000012917631881807e66bce9a1135c3b813d556280cb671eeb6e9cd8db883806e3aa00000000000000013d26a13cc276a37deb9456b340ebe0e09350ca2f4c95164f9cb2855af8fd26620000000000000001156e3adc14e4a0b2ac0f9e47c9ec02ea2a82483c6483886efdc7342cd2caffe000000000000000010ea5deda2ee8d239c57580769084e380e347537cea0df9d465f168be8fe305b100000000000000013dce01cec472e74fecc883db5b7bbe680d5e066504a8c019fc229e58face9e6200000000000000013ee75a7432602674d8135a0fecb1e7de7c2afc4420920e295ceedf6a6993fcc9000000000000000115572fba2e18c535af2fb6540faae02d31d4ee6edfbaeef67d97b11508453135000000000000000120b585278540962894b3a2d60aadaecfdfd1f6a80091d37599cb5a3b52e09e1f000000000000000121f4ebbab14ddcdac83073a04ca636acdf06ac6723e7e1a7097418eb6b78ee7800000000000000013f7f74ac55e507fcd5c9d0991a27fde17ff9f5d95768749a862d620090d1f41f000000000000000110602247de0a5ef759657ea234feacf79249bf8968e2e2f463077c5e8c1d011200000000000000011e42ef9a29f2e4a42ce1d225792e90e9fd96cfff54bf5b8ed8b07ee8a4bf9b6d00000000000000010ce6c2cfef40d26a11bdaf402f3e11df95f0b5b602ca203dd9a7427e47f04cfc000000000000000106803d07e9e288f1a86cf77ec16f5e56e1a50b4eea1a76a81ba779b68ec68a3b000000000000000104c572656d2f08acd30c692897059cf8cbb80466695a720b26eec74d460b03900000000000000001306acda7eebb4caaf6e23d135d57040238d828d25593fff5715d4608639d101900000000000000011ddf4c6cce4e5972ed4fd1df167c3c2eeb4a4b66721b45b54657828de0864e790000000000000001386ac00ea46b92bdfc03ad3a655646ef5cd4c5c6878a2a432654d289ed2db88d0000000000000001109c41d7e73802e5686aa83119d94f6c8e492ba7ea51181a1bedcc70f6b0620f000000000000000107328677a1af3220596d04fadc3ce073efa536b41dd06fec1ebeb090e06b49fa000000000000000111f54667e36dd1facdedd373061dc9a580275ddc673d02bab81802ee52b95b97000000000000000117a2b70450b17c480227d449cf64efd42b0bd681cce8f9e51a54f5803fbc41fd0000000000000001243d1bce901d4ef37eb75db20e9bb111a8629d179d5ede5af3586a269af9110600000000000000012d20d5d36d6dc58067f3e6fc5e33c311cd6408ef4d1069abacf4767cf802d7900000000000000001368452055a9e04886ce27ef850e087ffd6b58b7b13cfc325122514e7cb3c8f260000000000000001381ae51c4b3b01861420e8a81cf2595638224e1d8f860456795428d5506becd100000000000000013aba757b5f70774f38a886d8e3aedc07e6d1ec07146bd2b019b404b03cc1e60c0000000000000001089e53581d854be5b6b6aa3997e6c20c6786d5d6aa07bfd71637d46c23a369680000000000000001285a8e90d96ba03c91c7a438fbfc52e1036fd453759c25563a056feca777de1b00000000000000010cba683c25d2ce4d20faf7d29d12e97d2749d8d797f02411f8c67146b9c0991e000000000000000139db6abe8f51be5768400e35c5dd8406fd3f839f67a5d2e127d475033b0f0943000000000000000124f586eb761b16f3d03b9c42c7543297a00267c30d51e717846eefcc90467b2500000000000000013310d3cb80fbe5e6e60a53c367ae6207efef125eba4fe55b65ae8448879fc5c20000000000000001048eea743118811c3a2f4cb779efbf1b456ef0a9d3cc9f3477a9ae77dc16ca320000000000000001386629950e89f0efbef374c405658883c906ed23f2edcd1ec1c52c3964fc62f900000000000000012b5aa9012fca6b81b081423f940c2f8f7cca383b7bd56e509728dc1706f03f80000000000000000126825b08b536f5128928a2f87fe3eb3ae1ec43f91985a0cc24d0fbeb83edf49b000000000000000139ef44dfcd603ee1f06aae3813de592e2e95564fcde5d3a62665a92f7e6a024500000000000000010f570f895607e81d68215d451ed96beb858bdee66978cc92c7dca83c9a95763000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000012f6b36cb5852e508706b47917797fa10ce2bff6c69db8a3a35b74559d259b56b00000000000000012405905e6c49b0b460e93faa0a307f572c20334297cf9f7ace555309a8f58460000000000000000e00000000000000201b495fff7511a029d82d5886f6a5963f504443d24c452bcdcbe6c20fa4d20e4400000000000000208165da858234c01c5937752f1012a13fa8ce956563e71b793899b1fa62d754fe0000000000000020d97cf990477b0fccf51f96a8156a3eed057056c525f926a94df62ea42ccd6b8d00000000000000203c52c96ab338cd46ffbc8cf65c39a2fc5a575de74cc53c27ca9ffdf7d6c4c5da0000000000000020083733927491b21d1708811da6d1bc9cdb9a9bdfe4fead641f534a5eccd09aa80000000000000020b996ee7f74dd8d97dbf4ea4c5713f66d18b15e650072f9e7293b0acb4e09c69f000000000000002096d0eb4ed5f8a567e63d2519a534d7be32eae875587c5d338daf58c14002de090000000000000020454300a98d94e204ba3fa90f19bcb9600eac7546a2f6a3650dba3c08c5455d160000000000000020fb491f74187ccc3fa4ad9d6e472bc2e6547484ef14fb1cfefe8306bfd694ba3700000000000000208674c8a5f5554a1bb613c82f2d9577ce2676c70df07428a442eab5ba48ce4c5e00000000000000202ca2873d58dee8a2cedccb2d85b80e3109dab9fcd70357d3d77d7537e5ab5a6e0000000000000020dad4bded9062650497187e2aa03d57886d92cd5870a648a7e41319ffb78778c000000000000000207adb29c0f4ddd9715fc19632800ef203c99c7ae25624a795b96aa7ab50c6d7680000000000000020fa5224e1ad69ff9bad1902a84c9ae051012d75b3803a20b17ac0c8fca9e8d565000000000000000225c362848b2c097cc0be6daca97a1405e74e4cdae32203e656999e73448763d609b58a43ff85d201985d072a09b43c32f3d86080b5e169aa6b38b8078fee238700000000000000010000000000000004000000000000087f00000000000000204026793606dff20bf4f7e0ed0ce8bcbc9cfddc806ae51de108c69d59e4983fad000000000000000e000000000000000100000000000000000000000000000020cdf3e0c51e44ce63b1e58d88791483de8c1e13f3e7c2bb8ff8842d6cd7328f6700000000000000010000000000000000000000000000002041e0528794a10694c52bd80a92f94a0ec36f7ce43b32da1677a1acc719064baa000000000000000100000000000000000000000000000020ce741cdbcd5b6320245536b1639c833a7f084cc07924daf2f3ef919dc6d2031f000000000000000100000000000000000000000000000020644ec7197e4de3e23b478f3a00b5aec66849b246185de5cc4877a0d0b4ad596400000000000000010000000000000000000000000000002024bdf42d3132c873ec4c1e68154129147793333d66887d6b400afdb3a147bbc4000000000000000100000000000000000000000000000020e5bb8d9b9d417346766eff223956e2baf7b4b369562b19dcb4c957448ed51e9b000000000000000100000000000000000000000000000020c514df7cae5aeacb5ff80804d061ec51aadb2c1488318fdf417f0222063aef3300000000000000010000000000000001000000000000002036141eccbf363ed86b5fe486df48258be91c849c8c9b91c2703ea007ab5e060a0000000000000001000000000000000100000000000000207b28f9e59ee46551da2e7e585b0f4ac2997cc22130b7a07d3a34875cac3e7502000000000000000100000000000000010000000000000020645e3a66eb9e498987a83cfd5504bb8e13b2122c3840f990fc5ca95e6d7ebcd9000000000000000100000000000000010000000000000020591f8a64f612fb9e5a327db8a2c80a5f07f01804ce66fe795779be2077be4eca000000000000000100000000000000000000000000000020dd1be860fd13274bace53ae563afec83c4783d9298f0da078c2809589c614e350000000000000001000000000000000100000000000000206b0ca228cec92ba675fc36944dffd055938d7065f721437a4196515f95b597bc0000000000000001000000000000000100000000000000201a30fb06ac01807573876b4c9cc0d46e94e5d54ab139a9c82f040842507aaed10000000000000010000000000000000200000000000000200e65b27ed9292804b98710b0d3dda18683a783cfae6503ab12b8f2c992a0b1630000000000000000000000000000000000000000000000000000000000000000170a090faf2f807189b1badac7fa8c1a1b16e8fb6e68b57894f164a6d24d244a1dc4964fc611e14be71d819f97cebb393645369431996f7c6a5071b541f294743bec8182a17e2aa5a99876bb5a7900e993619839da8bda65ce91242c44e96a25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087f0000000000000020a247181950362fb8ac7c5e483dba73b56f443a3cf107ed416dd17798ae4dd808000000000000000e000000000000000100000000000000000000000000000020661d7685e118514d937ad481b82f2cc355de6555fb5fecd9e179b50b8775ce4900000000000000010000000000000000000000000000002091a4872ec84c85c9929325dd5cb4e766546f10755e13933334adc1e6e82c7cfe0000000000000001000000000000000000000000000000207d8e601023b97691f3b0ee3e809714226d498e5b7205844aa20ac090ff3446470000000000000001000000000000000000000000000000209dc84c468ae6cdd63027a4f686f5da84bec2536f3d047504ba1e00539b0f77270000000000000001000000000000000000000000000000202d0d9fecc7c63cb2b1f47a3a5a544925324434b65e314766e51c7ad4ad6becaa0000000000000001000000000000000000000000000000200fbfaf025c60ee1afedf02d9066a142185b078058a215a32438e9fd640918d610000000000000001000000000000000000000000000000206625ef0e3d2fdc6e2fc4efc379c1eca3f7d5a96c04f86b5f590879bb8e29ec050000000000000001000000000000000100000000000000209a8a7ad6d3dcbc64218361152bb84263849f1a9fe8920b87ecac45d3087e749700000000000000010000000000000001000000000000002018d4b11060d9a084a653c7a7ccd980b2a8cca83151e9821327c7da7fcb8daded00000000000000010000000000000001000000000000002082357414a8b6e891fde581a51dc118a2b94a4588ecd905b86cd89351d3dd7909000000000000000100000000000000010000000000000020669c27b23ec6172d68db8b1a7afc5865b5e545a64e1c88a29cf8fc599c7d3d9e0000000000000001000000000000000000000000000000202a7b8c136e096856f17f333b5a606e7a2ef2101f1451fd11ee2a9b476b74a2cc00000000000000010000000000000001000000000000002068653bbf7282d258028448984ceff218d45966652d42987f7e9f949636ad0a64000000000000000100000000000000010000000000000020fed3ae1a0555dd8c2353fe5e347db6e42245b78297e372d4bce027375897912f0000000000000001000000000000000200000000000000022c38bdc509f9cce207cf7e87211c304f28c9eb0e9899e4b3fa89fb533d857e480a78bff5ddc58c7446b9962e7a7e8823df751bd0589c6ba553cecfaba09c86c4000000000000087f0000000000000020de8e5a022d9d3a4bd552c4b0c22cfe25f0987d1ddeb961359461f1c0e10af624000000000000000e0000000000000001000000000000000000000000000000205d97d2785807ee04768b8918dd2d441f378abf545216d46d6e5f1452f12b826f000000000000000100000000000000000000000000000020a45f2d8e1d95d158681d5799394f28798b2522928b9e3a7bb62fafa292173e99000000000000000100000000000000000000000000000020ac5097c756bf9226f1dd2c3e869cb637523b86fbbad56aabe6920b53314fda1b00000000000000010000000000000000000000000000002015844b43f69d672863962d01c80f5c31b24e8fa716dafce9aef7974ce330f7c30000000000000001000000000000000000000000000000204adfcce7a5de0c94d6447ceb5172e89d3f727e5b15e2f0670b783f06b9c23f1f00000000000000010000000000000000000000000000002075920bb67bb2a0501dd255380d4ce603d2fead835b99055e5e0af6fe4760ec23000000000000000100000000000000000000000000000020e608f8bda8b66c9ecacc1c245d6d1c1441ac963d2aacace72de01dc3d3bc0efb0000000000000001000000000000000100000000000000207b2b8c8cf0afafc9a5f5dba5017042f7908ced40b90cf4d7161aeb53003712af0000000000000001000000000000000100000000000000208f199948d814734df46d045872dec5eb0c8b93d7145b9b82a77cecf34ee2a6a2000000000000000100000000000000010000000000000020dc3c1737cad2c52bd657476aa81041e03cc1f70e5e9676f1c9ea5bfabc176df100000000000000010000000000000001000000000000002036bf178570702f9ef55044c2ed5106f127b31381be358a927240442e92f2f30d0000000000000001000000000000000000000000000000201c839a0c740dfa455702ab2ee239295201d5413e58f159ea46dc6121307c8954000000000000000100000000000000010000000000000020d27b342fb80605aabf39740f2e884ab06685b499d3dda6bb01717cb364688eda0000000000000001000000000000000100000000000000207c92a223e3bb5a0d81441dd55f0aec708bf29e8ba676cf56cedbb83c8bb10ef700000000000000120000000000000002000000000000002400499ecb3b1bccb7f19bdb69c7835a130163751c2bd17fac24e0ea1cb664c96515b83a1c51ed4f1117bfaca306c3d6bfbdcce98d23e963547fe558deac147fc5202ddfbc2d7f37000a5d779d307d5b3fca6cdc097db7bdb670283e661723c44529dd0b2e0161039dae5453076030e9fa9b0b1bf763f8056f90044bf8f7af46b105cff12dc1413108e83a9450bcfc4d9a05e5803e38949fa8d1e6e425dd90f0d43aca516861f9b89968f074fca7b447a0c149b282cb8af0ac8efe616387086ec101bc6015579cee887cf571f9b453c27baf6509a2c3f8f654b2df95747246912108c4b4d9385bd09c1deca2c27ddaeaff5d0aeec690c311533f46f5b3ced65e9a38c64a49c3ed54ff9f10e1bf270f564c8194ea348b8c66d5cff84720ed1615383fd065688b70ccd4316a4b66ee975b100c6f950d6ef80ee0cbc947e08c9c81c73a7a548ed0520f9a4afb6ec1aab0574300c9720585b26657a92f86470cdfe1fe053544969b3be5c4b89629d1998f43902648cf56e544133d05d130d7e46660a012c95939cf0a6011ddf6b9d3901cd4c9a1403a6b2f7cdf7e0f8637331d067c4c08329077bce61b543691d99454e78843fa6254e4b70c29508add8b4dde6dd65b289f8f87a99a2d5b7926e1e22c8890d3b2ea49ed3768a53ead6890bf5d1942c910ca6233b3a072d6ea8c0a649ae187f3357168e38f9181c40f9b9efeb808e92f10bf4a65a7ce3cd1001dfde540063fb7d2eb5c1f5ca0cc63d5bf56a8f0959f06040a235aa4e6b657f7bd5d527f2a5e39f1878b0d1b4824d7ff4d622d2dbfc48f2111dfadcfd2b57005920639ddd7235ff731b9a9e8ec4a22668ff07256e229330924bc216193355058c9679e6087047a29786eb52cba7dc69854dec167eb1e560767f94b2ad714de7b932b9011982b8c2b1dac1fc6e7e887010bfcde7e48546a3a50b90d5de36daea17512af3131783fbc0481e7b092e27a2466737699bfe076107d0b01297100762d3081ebc44c34bb46b026ede1eba747fa5f5e26d404a9760978a074924d281c8af9c69ec7267d9d64e404532ff8b2f58450bdf9c3cb729607358af9f874b7c5c06fb5a3bf89d0761a7fe9078543b903600c0555252ee562052fab4fee55b291cd0ceab4dc65b1237520d8a944f1a5884200946a5e3f2f312e75288a200179b6fba6bbd19c4c08ef4858a9fdef31a377cd6a08af870b3d7c33043c2086dfb8790191a9f9f5564bd7812fce6949919ad8cb7925c5886d62201341a87f3df0630e7e850b02e2d02ef4f7ff35611e44724f2c12ea3a3245c9ac350177c1d84b7b65c14e2779aee90c54107c869c3be789ed6f03a7819af473db2d3804801ed7917ab47311b33ca06e43831d66d522e3c11d22a20db5cc6e4f07065a9c8c60671db2b757313a4dd6ce9b4fd8afce750014e6c6f2b5b59271ff113a7d4fbb42234bc4a47748f5b5243e6e43f5929ce52efaa32862080d3fcd458529e841de6c57713ba2462fe18ae41f790b6cabcced9c3bea998a0f8bd25ba46b3a27635b6f0363e79be5185fb3f289e241fc58cc7d08205816bc92ed8a781985216ca607b7831e585b549d4f1cded5e4504f76279513a016da54c78bcf2375c3000000000000087f00000000000000200a04b55e5bd650bae7eecd02622d29219f30ded9842f997c44c8c7a627b13f80000000000000000e0000000000000001000000000000000000000000000000203f55861fff5598b19b6b12b6a386c5f109f7edec76556a2d47db24ce23e6d64f0000000000000001000000000000000000000000000000200e2550562b47cf5eada90a87ae897cb96f1c4f35e0aad985c4e955f5837d455700000000000000010000000000000000000000000000002079f413de277bb3e77def992c471109633d9741cd07ec35241179ed19b06d3384000000000000000100000000000000000000000000000020f694380a6bf2bf9834887afa531888b6ca8c45d60cb45cabe9d850f1759791d6000000000000000100000000000000000000000000000020f49f9a5916333905fd9b9aaf7604e70ab2c49052a3b8dd98afdace56f477a18b0000000000000001000000000000000000000000000000203549772ed47648a83f92d7ba8551c07c4f97c89865c5e56e0959bc0b63d5864a000000000000000100000000000000000000000000000020ff7181cbeaeb1436e50c62e9c69efb242aa2aec08edc667b825710863c1218ce0000000000000001000000000000000100000000000000203d7e4e011d0a42a8a7a9cc02d5b73b42ca5cd75c77325ec478cba1d24b4fb202000000000000000100000000000000010000000000000020277c8a3e6a2dbd20897c32a53539ff7c450da88b6d0792b382bdf934bdcc6fb90000000000000001000000000000000100000000000000206995498f66f5ea36f33b0a077e48791d1fdda3011ac254bfca5a684080c2dcc500000000000000010000000000000001000000000000002091abf4763ada6067110a33c63255be01d4f86a9fabe7859eba36e064a12f3cf60000000000000001000000000000000000000000000000200c7e05446c23c08c08e204846e83520401791fe0820e1c3872dec956172ab09c000000000000000100000000000000010000000000000020c46afc88b504eebe29a8cb43f7ba56f0dba15d289e2bc2b1572f5aa1f979098600000000000000010000000000000001000000000000002082aa83086876e1611fb0d9f92f9461bc15cc796bf3f9ffea526a46112c2bfa7a0000000000000043000000000000000200000000000000861903791708985ac37f0f8bc1f3394969deccd6c70d5f72df652b9b10233bbe4326fc86e8f767a53c80f0743e0cc6b6964379c234fc3535fe271b5010dcc441be3d115d732af9c5d17b4dbac9c01e6f1137b998e73948957f6d931c2fb02ab74e02eea28cd5063a2e84b245363fe190eeea8d0014d04c135e1eb3cef14fd548b33156d33fd6e0dd176884a5f0c0982b558d859893f8184806f2c3e06a70d594820ea92cc0291f22e8977b5a0f3f67d4aa94c10068117c60d699830ab68f2a6b7f36b2203f326451750a973db3c2f8d8ab5cc82fefbbbb6d8a18fea0b1342be687094ddfc0cd9bae8af568c24c3d072754c57e690c4dd93b5373484a6fcbd4197a117aa13bfbf5974934f43482cedc3b5846ce8bbe8456803c4bdd76f204db809f2e855ec4040a68b6cb0bcb7d3123c4a7db780d3d853e28a14069742efb247f621765262bebcbf46e08c5068e0a4d28b93fc221bc8c1bd84fef0c67991849831a289ad9d414340b91f73af971f5b2d746e284773f7d78d08d9d3a8387e7b67ce734f9bedb9afbc6262bd920c63381cb9e1c840fb2b2f690b21ef71adc796f8f810b064124650439d9d426df39cc7e346205c28949569e182b6d4fd0448690708008e0ba4a06eadebedb3da3df0188fa160579ea8d587e300469b7d9ca5f2dcd81371f45b5f915214124c25c20fe7705ea1cccae6eb11678d9228f1156a0d232802c63a372229659ba4834335b07ace26e1b6194c2ba76f016109740f3dbe50385139c5c8ddd69a645b7cbcca4f8531d9206e504394f1db8c77bafaa2d241afc7c1df2313aacefc0a3690500c726606c2622141cd98794b5d5ae1f83604b791196220dcec553103f5c96faff38d99f93da00327c2281fff307de2767c0b486ee6b15baf62560aec3310d1903e3bfe21cbe65d75e4792be3b714e0fba9f795d57ec2a4509da9f513ccef2e6fc1c401de341bc6f3ab476d66d6c3e37308186a2a8152ca6cebae369cff5417d1372bf6a8fb7daee3e69d4228058fa07b9fc5ed2b79b135931451c96300abe82ec8d4095704847585a9235722884923f3124a12d48661f4209a671110fca4771613dbd14ce96dfd36d1d07ee87243d51e08ada1d960420bdf6598eeef035b88e9ec242eb316942732bdf01a621b94ef50a9625e269fd1c4a304035554ef36536e634b16808f21a93ef99147f51fa1a0b8c744293ee1223b5cfbfcaaab10c9ac919cb4e97f70e07b2a962f51556e3723b5eacbd6c11ef0d72f1410aaa8ac0fa127f0777082cba40567c055353482769abe8034ce3a658328d0ebef555753f05ed80f888f7d345e1f01cf6b64160b6229b031db31c59a9033eb6453554b5c4e25c7b255328dfa31f69d31e970bbfe784149cef80723fb73cc149bacaab4a3b1da384daacd7205d02dcc5dd7288e8f608324e317f8dc04a10398f5a0aa78cd86bce67ba9fcc5e2f9d111f98f33abf85946710ad823b3e932fc670a5f5587327943198456033a1d0853579631659e957f7dfda737dc4c16e1ddb27f70cb6566deb8485c107ab8c68f5f6dad4c9bf0eb66c7685e883bce8d62224d808f349a992147b7a3ef85473972c4fbe273fd59a271fd065387c43172b0e75cbbc24acfa62e6450d034521a78b3cd0cf4962f8731cea1a01bcd57e71a419ceee507bca2cf26b3541c445b588b6d0b5a8e667842a920a9bfb1b0cd682e91b8987e642b6282eba95b798642325246087e49b011ceb670d40fe19373cd9982d1f601de42b59d7eacd6e182e78757402edd41f80893e3c0bdece0c3a8cb63736b2203f326451750a973db3c2f8d8ab5cc82fefbbbb6d8a18fea0b1342be687094ddfc0cd9bae8af568c24c3d072754c57e690c4dd93b5373484a6fcbd4197a117aa13bfbf5974934f43482cedc3b5846ce8bbe8456803c4bdd76f204db809f2e855ec4040a68b6cb0bcb7d3123c4a7db780d3d853e28a14069742efb247f621765262bebcbf46e08c5068e0a4d28b93fc221bc8c1bd84fef0c67991849831a289ad9d414340b91f73af971f5b2d746e284773f7d78d08d9d3a8387e7b67ce734f9bedb9afbc6262bd920c63381cb9e1c840fb2b2f690b21ef71adc796f8f810b064124650439d9d426df39cc7e346205c28949569e182b6d4fd0448690708008e0ba4a06eadebedb3da3df0188fa160579ea8d587e300469b7d9ca5f2dcd81371f45b5f915214124c25c20fe7705ea1cccae6eb11678d9228f1156a0d232802c63a372229659ba4834335b07ace26e1b6194c2ba76f016109740f3dbe50385139c5c8ddd69a645b7cbcca4f8531d9206e504394f1db8c77bafaa2d241afc7c1df2313aacefc0a3690500c726606c2622141cd98794b5d5ae1f83604b791196220dcec553103f5c96faff38d99f93da00327c2281fff307de2767c0b486ee6b15baf62560aec3310d1903e3bfe21cbe65d75e4792be3b714e0fba9f795d57ec2a4509da9f513ccef2e6fc1c401de341bc6f3ab476d66d6c3e37308186a2a8152ca6cebae369cff5417d1372bf6a8fb7daee3e69d4228058fa07b9fc5ed2b79b135931451c96300abe82ec8d4095704847585a9235722884923f3124a12d48661f4209a671110fca4771613dbd14ce96dfd36d1d07ee87243d51e08ada1d960420bdf6598eeef035b88e9ec242eb316942732bdf01a621b94ef50a9625e269fd1c4a304035554ef36536e634b16808f21a93ef99147f51fa1a0b8c744293ee1223b5cfbfcaaab10c9ac919cb4e97f70e07b2a962f51556e3723b5eacbd6c11ef0d72f1410aaa8ac0fa127f0777082cba40567c055353482769abe8034ce3a658328d0ebef555753f05ed80f888f7d345e1f01cf6b64160b6229b031db31c59a9033eb6453554b5c4e25c7b255328dfa31f69d31e970bbfe784149cef80723fb73cc149bacaab4a3b1da384daacd7205d02dcc5dd7288e8f608324e317f8dc04a10398f5a0aa78cd86bce67ba9fcc5e2f9d111f98f33abf85946710ad823b3e932fc670a5f5587327943198456033a1d0853579631659e957f7dfda737dc4c16e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000087f00000000000000201b495fff7511a029d82d5886f6a5963f504443d24c452bcdcbe6c20fa4d20e44000000000000000e000000000000000100000000000000000000000000000020ee611ae79f491c92c73f0a50c97b7f831e740c450c1de6810a5128a89974730b00000000000000010000000000000000000000000000002047fca1b42a2c8e82cabf23a11d9c782ffc18f3c5c10064868e931f01fa9568aa00000000000000010000000000000000000000000000002019ebac599da7b831a985ee6b2f9a6082d92cbec96d971354b683b5f174eb21fe000000000000000100000000000000000000000000000020d2de7d820614446ff21d66c082cb30eb71b2c052d030f0e98bb284be32c11461000000000000000100000000000000000000000000000020e0fa418490b2a295ed3983b435ef3aecfa79ced19abeeb28046981c6b3e260920000000000000001000000000000000000000000000000200600d360b662f0c50e8ecbb1bee46a8d13edf1fb493aaac36d2f5677326cf01c0000000000000001000000000000000000000000000000207916e025ec79e730b862b80f9f1f33b0474eaeef2adeb6d75b72e22a9808ecfd000000000000000100000000000000010000000000000020e2e30186bf81ea3abbcf31c8252e85ee071c5857e8f22c2bc71370451f6e3e8800000000000000010000000000000001000000000000002062f5020ec3120ee42944b40a30627b568b5b843ec995a9c366cd4a83393ba59d000000000000000100000000000000010000000000000020159baa81b9baf8310b9008eb10ba737c00b44e278964adc3edadacdcc8d63f9d000000000000000100000000000000010000000000000020f1100b3d5535e9b405d4e60402735f0e17d8646c3b89e441501bf0bbda732f580000000000000001000000000000000000000000000000208cc9031486eb41c835375ed7ce2b862fb2e9c62926e35173aed09d11b6aa2f200000000000000001000000000000000100000000000000204dd5724ab48a34962c8bdc31f718a725b3b422de850c02332b098bc2fa733b62000000000000000100000000000000010000000000000020b09def1c4bb6d2a4f976105b89397a3711b3516bc7fccf96f3de4b7435884a6500000000000000023585f89a746ec509462069052ac215ff51d1352a9be99e544b0cf3c510a776392181c786fa99bc1e9732076506e6d95a74e2d37e496b924180cd5836cf61ba75000000000000087f00000000000000208165da858234c01c5937752f1012a13fa8ce956563e71b793899b1fa62d754fe000000000000000d00000000000000010000000000000000000000000000002077b35376313c41c169a17a5601155273ce2dea7c2fa5420a600df4754b9d128e000000000000000100000000000000000000000000000020285d2523fb44ddee2671a8d425579416bf1b583b4ec48beea32bc73d47d89bd4000000000000000100000000000000000000000000000020e2f302abccf17cd8d34a898d271a99063eab587947ee6a1e142de7670033e8cd0000000000000001000000000000000000000000000000200e1b4f0ebe8033c8a6e38ae699183381de9d2b171eb682bfb98bc2d6637a233d0000000000000001000000000000000000000000000000208da92334a4d5d731a9057d4f0e86951d1fa1d0258ed1a4f4c1cff5e5494b662b00000000000000010000000000000000000000000000002098db65d423619ef3045c7955b5e4d7526978e82485d60c2edc08d907867790160000000000000001000000000000000000000000000000204627fab710dfb0087c0e2c5b98f7a818d8a30e6803341029aeae645fb707552b00000000000000010000000000000001000000000000002087f5a7585ab8437145bd795de499fe0df9cfb1ace4f96ffe7b4cff051c5b8b5f000000000000000100000000000000010000000000000020c333f48bed52eba7cb4751865cb6a7fd9150cdbed7371b0d27844dd94d2f3dc40000000000000001000000000000000100000000000000208aa5c899c925e1ef017fe525935261c3a6e69f798532e2a48615a5bdc4d5a5a4000000000000000100000000000000010000000000000020f8bd46f76be8fddee7a276a5080633d028d5b0ca67ee2c5fcd8e5ee54c92f977000000000000000100000000000000000000000000000020567c03c7ca4d8443d1b3676fc8aec9aa1eb39bfdfa1473d2c734e756c2e81461000000000000000100000000000000010000000000000020c4d954098d969c8e5e7519d5179c6e1e2d2983f8347c20f03c9d140c137750c40000000000000002042b0607df30a0ef7de03a12d34b91f452976762f45134d68233ba75ab9209152c2353a5e09866d5d34498156cf5a672e822ee5c10fbb754cbd9a150aa11ede1000000000000087f0000000000000020d97cf990477b0fccf51f96a8156a3eed057056c525f926a94df62ea42ccd6b8d000000000000000c00000000000000010000000000000000000000000000002095655241cb3f128be089047dc7fd0fdff20d8ab81d55c1971cf97f070349539c000000000000000100000000000000000000000000000020b7b59a028e08743b4fc3e9faf0037dd7b4fe7b0dd085ce23574835c0af328e9a0000000000000001000000000000000000000000000000208f18f9a3ca32735902fafeede9ac4421f009d34dd38bd3093a2b4cf3fd96a0ef0000000000000001000000000000000000000000000000202fbb5c5f86e644304e9007514924403914ba57d0bcea4b11bb6f96f5e7e45748000000000000000100000000000000000000000000000020efb97ee65db215c62f5ad219a29afdbb019e1d03a90f37e2bdf386f83c45a2fc000000000000000100000000000000000000000000000020c0788fd29295be3a501fe68f0c1863627c049abfeb0c26102c5fb05e222cd92d000000000000000100000000000000000000000000000020d70e551717db8b0dbc03cfab3d2181a3bf2f7e5ae955cdf31fafd3bb3ba41928000000000000000100000000000000010000000000000020166ecf69de7fe34dd86b3fcc5d99379563331e833d4d1543f8f041bfa64c31a30000000000000001000000000000000100000000000000207adb344c313baea74e07fd17c6277dd4437f0ec6b994b87d500898ec96f2b6db0000000000000001000000000000000100000000000000205a7a3d2ef51ca9578ebc7ecc04edfe4d77b21a9d870c61a8eb55458ed57faf22000000000000000100000000000000010000000000000020cca27f16479450c3a6a4e6f62bc81fda2ae3b3ec0e45b0e50d62dcb503f7fa8e000000000000000100000000000000000000000000000020b1ca611031d8674f77bb891fd529dc7ecda03f17b342bfd67ff1cad339a8373c000000000000000224bffd569d660c78796761f57b6b3d5b558afb8cadcc9ea37837fb7508d4ee0e1be06ea4e06945369b347ff5e5a39a8a8862f381ca30014fa9b2f65b5ff0681e000000000000007f00000000000000203c52c96ab338cd46ffbc8cf65c39a2fc5a575de74cc53c27ca9ffdf7d6c4c5da000000000000000b000000000000000100000000000000000000000000000020b62285023dac79fca56324c6fa56d5768ce06c7635b89c76a49001d6a3697ce200000000000000010000000000000000000000000000002044106fa23025e38455be363e8d46a951477868740c94814b23b7221bec20dc67000000000000000100000000000000000000000000000020f6df41f54ed7ad4858c4cd63484868ca02392345ab53c5d71a7b2e8f4c8755c8000000000000000100000000000000000000000000000020a7d9b0d77c113d348af23c5f33a7aedf7d94025538d303e446620079f61a1af7000000000000000100000000000000000000000000000020bd23185e094c997eba2cf84817146351028b00d742c9449e70e5a4339b06b243000000000000000100000000000000000000000000000020f92997e219e47f36952ab57c5d75249ba60769303d60be836810887d6dc0f612000000000000000100000000000000000000000000000020f8b2023a9a14eace2418c6a6992041220aad0aeda3d6b14b6f4bb3336189144d00000000000000010000000000000001000000000000002083e179bfe87b7daafc8fc29fd641c822fecee17e278cee703484d3efcd710700000000000000000100000000000000010000000000000020aa3a2e55e11f0728434410982f4a788837e2c66e66f2ce7e601644ceee255e94000000000000000100000000000000010000000000000020e5a6a78d36c29ef97d2e99be057715bbb96953f5f54e6ffc83ecdc37c6ec2ab800000000000000010000000000000001000000000000002086d3b469b41e237a73b943c12bb906e876fb137f828e1d6ccdbafd09088f3a100000000000000002255f5e6d6cf71edeac8e6d3384ee4820ff98172e259fd5ac1206f81a31e9cedf1d64157d0072af15d1fd655105c16ff45f3650cf85eebf103a11870c60622e9d000000000000007f0000000000000020083733927491b21d1708811da6d1bc9cdb9a9bdfe4fead641f534a5eccd09aa8000000000000000a0000000000000001000000000000000000000000000000205446cf75ba63902ffe8becbd51a519e8a1ec1f8f9e8cfa213c5ae8902ded1ed20000000000000001000000000000000000000000000000202aafc62115394bf0f90bd55cdcec1d9b82c4829fb0e72a00dfb9625428e706770000000000000001000000000000000000000000000000201b4df0446136344397042b0759b34f9d4ebb3ef2b43aa28708579ce0ea87e67f0000000000000001000000000000000000000000000000209a3dc64781327548ee44de7f933c6d0b9dea2bf9997ac5e529028291f213b1850000000000000001000000000000000000000000000000204570f71f6884647bf86b7c9fc64c7152b5123513f40d5b2a5cdb02f647e02371000000000000000100000000000000000000000000000020b1dcf3b598fa168c72a2b31507c4363eae3f9316755650cc9be5887404e5bb6e000000000000000100000000000000000000000000000020538cb683bffba47480a1a6c6e2be521e517625708283f0f149a5c74a831ae5b10000000000000001000000000000000100000000000000201343d99459bcc3517d4a371a1aba63e6a90236189b03c4f19a20b48b31322493000000000000000100000000000000010000000000000020c08e602375f677cf183828409ec554d421214d602a69f792044190acd9965a220000000000000001000000000000000100000000000000201a7a57a8ed6a6fde5bf95e7e7ad78b279e6124980eb97d6f1c5d6c03e6d8410800000000000000023a828103d5c1e9b74aeb3b8a7ff14d144fac8ae3590e57db322246d7e89641800e96b092a22b4108d4de4637539ce20e1464040083ee9d04e8c2611e58810b34000000000000007f0000000000000020b996ee7f74dd8d97dbf4ea4c5713f66d18b15e650072f9e7293b0acb4e09c69f0000000000000009000000000000000100000000000000000000000000000020296a5d77a4682ef09535acb770686b4146e9118ffb8b8bb1255e69da6045a9f500000000000000010000000000000000000000000000002036b3ce763d18088f47f209be88f82387c1cdd292a0f822ada9b25ee0789c5837000000000000000100000000000000000000000000000020227ad78f94744b6be88a43b83a8e208a29de8f22cfc17262d12f257faece66500000000000000001000000000000000000000000000000208fb6813f06c7a07bce6f4d55bb54b28272ef79f2bc8f988a85e5a38f54d5cdb1000000000000000100000000000000000000000000000020a5fbd93630644f80b7aab26c158c16718a57657eceed0b3e001d4676aebfc1df0000000000000001000000000000000000000000000000208b7162e1c86b0b5588d8f22d8d03fa5a48ad46756eed3a56ed92359ea098d502000000000000000100000000000000000000000000000020bdd0c25ed96ffc40cb5bb85c8fea1c45dd484bfdb800e64307c591a01983bac6000000000000000100000000000000010000000000000020cdf1f2d1698df8b9c762d8987ef6b2a7a5532b105fa23da388028f51be8a8bf6000000000000000100000000000000010000000000000020b43aad57fa53265ed7b75a54827ae30eac56903fe98d80a110776d155052565800000000000000022eb5f8519df47f236c3af54a307d78145237c2324555b6a865f4061203fdf422376e9e371043f3e53f74408bc4ca9922e5e0505b9afe3a372336c2cd4c5fbfa3000000000000007f000000000000002096d0eb4ed5f8a567e63d2519a534d7be32eae875587c5d338daf58c14002de09000000000000000800000000000000010000000000000000000000000000002042868ad6934a659c0f9513d4c8214a2b58e3c656605e6a9740cff36b5885483f000000000000000100000000000000000000000000000020e0866bc956878a980b9a1d35ac8b142de4c660db973fdfd2adfeed255b2d992d0000000000000001000000000000000000000000000000200acbe27e2aee473c58d3453f4df253a45d44ef8aedf22620bdf5d9d028fab6e50000000000000001000000000000000000000000000000200798a608cb82a79e96e3cba5092089352ae3a68a6a28131afe5a5311229e31900000000000000001000000000000000000000000000000204e1b46a23118125b119452779bf070abc114089d9a4f16361f2b194c8dfe688a000000000000000100000000000000000000000000000020aeb18bd457a21a8d6c441c6f2457cb7c5f9afdd2ff542f5b7073322f4e1c3089000000000000000100000000000000000000000000000020d208ff83238cd227e4c92b3224541e83e58a0b9d5623a28aa5e7eff5eb3db312000000000000000100000000000000010000000000000020c92ef35ca659aeb1c15701708e712a69c2aa02c227bd05ca3825b1cbca4a2e0100000000000000022e1baf65b4bbd028cbebac5a829edd1a529a3f480c7eacbd168f43caa90cebc21f4274b76dee8bd38a28bf0801535cee66c1f6749ca4fcb56da31df2643c9b27000000000000007f0000000000000020454300a98d94e204ba3fa90f19bcb9600eac7546a2f6a3650dba3c08c5455d160000000000000007000000000000000100000000000000000000000000000020fc3e7db171f9e24d800a601694176ed3a8b90b2c2b469bfb020b8d6a1637b404000000000000000100000000000000000000000000000020d1dd7f968255c6b3a34c9578b50fddbebfb6b01b7417c679b44778296fdb880f0000000000000001000000000000000000000000000000207894b3a735bcd0ea5412d2fd6c4ed759402a617344e3d52f149cbd8e4a32bf41000000000000000100000000000000000000000000000020c1ac60746cc31ec9139b42c1b0a1b51b8661123ed0c3c397f03b56fd229d2e6e000000000000000100000000000000000000000000000020f5c7296d260818eb82d051a26c958baf81b7f8427d5485b2e24dc7aec7bd4cdd00000000000000010000000000000000000000000000002053de1e9bd7d3f5a0083401feace0a06e635c3489469b9431fe3ace5b1e1a229a000000000000000100000000000000000000000000000020a8ce2b6cca57c8eae5838fc018cd7efb0abda63dfd9383f359d4b37efb83dc3100000000000000020dc05d91fe51a6aad0940c6eb4f7791311f011daf7cc49dcf7c88f431583824e09c746abeed155021d91eb1006738372f0800dcc3849f6d964b837607feccd8e000000000000003f0000000000000020fb491f74187ccc3fa4ad9d6e472bc2e6547484ef14fb1cfefe8306bfd694ba37000000000000000600000000000000010000000000000000000000000000002099f6c660d695fb55bb5a484941ac7a328538dee946e3eb93f517c9a76832c27b000000000000000100000000000000000000000000000020a5b7b0c5796f0e4a803a7e9ec2a696b85423a697a5871673dccd9b30b5dffebc000000000000000100000000000000000000000000000020c45dae6903e1044fe2c539644e248714eaf86d9ad8f326dc6e150ac25c15febb000000000000000100000000000000000000000000000020b93b75fcb1515c750bbe31326fe64f76e77aaf3967732727eacd7873783b0720000000000000000100000000000000000000000000000020b5990a077713bb0cd4fa88a75edd04573601a6e246ff4b6f32126079d1169a9600000000000000010000000000000000000000000000002043d7071fc6afc2cc1d55613cd3fbf7e8fc92196f0dfbba3ca28b49542aa5fc58000000000000000210cdd4c80811aee9550b44c45c3a9bd9fddea3bc89a39e2fa3eb199d70ba543829385340ac450f57ec684b664de4f15e05aaeaf33fc682f612583987b66994c7000000000000001f00000000000000208674c8a5f5554a1bb613c82f2d9577ce2676c70df07428a442eab5ba48ce4c5e0000000000000005000000000000000100000000000000000000000000000020fc1e2ae4d56e7e9d520e0eca1e923f54051268741b42de921db3213e25640416000000000000000100000000000000000000000000000020717539dc725e872c3eb6b190c311c7b971a026f8f9d40089a7a9912a3343184e000000000000000100000000000000000000000000000020fb598dd556e8debaff66525b59d65073aaa20fcf2f2641a2519f159bc0be9c28000000000000000100000000000000000000000000000020ee20c8532ddb77381b781b8191b0bb848ed7f93420600e580aa64703f18a30be00000000000000010000000000000000000000000000002022989272005afa03e3cda0a918672dab3bc3c2521e1dd1d679a7fd33482ca19e00000000000000023938159e6a8df2c105a80e8e7c0d165e3cd7bea42f3a7bb93853b118fc35d674231b38e0e0a0caa500715f011e4a4b874c96e35b0651c6b7ad24ea5169e4147c000000000000000f00000000000000202ca2873d58dee8a2cedccb2d85b80e3109dab9fcd70357d3d77d7537e5ab5a6e0000000000000004000000000000000100000000000000000000000000000020942747326c282a0596c003ab4f99b94c4646f5de7798a90b49e6bcb16a8764a80000000000000001000000000000000000000000000000200b49e290a8c8df49b2866be68b5891ca39ad34149f4c082a53163d994369055f000000000000000100000000000000000000000000000020dd4d1f5056333350af0e1a15c75fc50a84459a929b7eb58ecc2859368c55dd780000000000000001000000000000000000000000000000203d8f5ed8e64922fde5a1f9baaa8e8022aca294522cfb247faecdd75f41c5749000000000000000022ff9cfd997aaea4b938eb36034d2d0e90b1c28d5b5fa8f7920cac03a425ef3da0980c68dff359c24066dc3793f7cbcc5b9e1d47abb5fb6c5666ef6161ca3316e00000000000000070000000000000020dad4bded9062650497187e2aa03d57886d92cd5870a648a7e41319ffb78778c00000000000000003000000000000000100000000000000000000000000000020bd4ae1da7d67c88bc21c5ed22e634d7dd8970bcc41d70a1f89cc3207239a2aa00000000000000001000000000000000000000000000000209b7076850b7c9a0392dc7cec079d91129cf7be150e00232e3f668aee3d8673a100000000000000010000000000000000000000000000002087d80c9726bc2fec3bcda4f169e3fc2fbae8b72c9cb0a94a8ea9946b816ad8ae000000000000000229219c8da502fe74299754e8f15e3d13c90eea8f799dd857884dcd09ab6d3a93170dd62a35d9a5a9ce2bc7030201dde57805f5c786c0253dd702104346400ed1000000000000000300000000000000207adb29c0f4ddd9715fc19632800ef203c99c7ae25624a795b96aa7ab50c6d76800000000000000020000000000000001000000000000000000000000000000205de476d314050258a5d6f0f065dfa1f0dd10a6b861e5b946e7eb15f0faf4d29900000000000000010000000000000000000000000000002056ac33ccafbaa84bd8f8b6d1feaa74ddaf99521939c075fe6e50262bbdaedf33000000000000000204835b27757dd83734772568c60f7557e94ce913a087f55d635224792aa9b870285dae34b5904849023d026fab6de5cddcb9768a2417c7b0618f7d9582c8770400000000000000010000000000000020fa5224e1ad69ff9bad1902a84c9ae051012d75b3803a20b17ac0c8fca9e8d56500000000000000010000000000000001000000000000000000000000000000201f80b8f9a499ad63320bbde9ca816f2884ac913891c1f4273df2c553f6bfb1d500000000000000021c0dd8408ba6377b286166829fc5d7d2f375ec5a2d409a3beb60e66bb499404f2f78ecc88ab1db7e591b74d6b32e5038db26ad5b99036d90c1d2567ad475875d \ No newline at end of file diff --git a/contracts/zkllvm/mina_scalar/public_input.json b/contracts/zkllvm/mina_scalar/public_input.json deleted file mode 100644 index ee399f3..0000000 --- a/contracts/zkllvm/mina_scalar/public_input.json +++ /dev/null @@ -1,63 +0,0 @@ -[{"array":[ -0, -7004881494178137404986928718358577985735231348635131871795804478282553164916, -15306129011576432006004307405802754408638831252208347411729546090521432895139, -24146173981705213713354219671688413220561134752114522572554707641838759372061, -16355508692977437261818107819433198098819127646860843642096684511934511742791, -173165261851454550272905310057202656353051138784408042714275473976561352147, -20229945581545615954852795995525430600747768770339113477689192106161490225013, -5124774744125250012975365548814441436587910468174638627432945535221919194534, -23588113098585087292249991770859860769546806038013263702007391911986703092047, -27404361125464102629678230110584740486738270435126883124131182658230987839891, -18597891278179767087251790513633706714074224331128058923708536586738855856663, -22525179990819146690218185266598818589491512356080128579676417550512301429265, -7752597369250960866921389891150152850137854324810693579536020113899516329469, -27474643847034254722136402979533209770266575831118400512539888947283316223518, -13286482150156660832971410913230324397178471036794935710827636734070704866494, -28586495964945402880062055610115260573018913036833494870914552624139235038967, -61312381509725826371992770942237298435037938273150598699971361905255314283, -13765014526617769269710101258361733562313961347882519806141679952863020777721, -10328215047775864478288748819176359961724786371273034913744088017179592342945, -22360011504817788678493268404213658087460329364804372421264063838223501948809, -2609160789468633680722324950013147635972481953696262296560904600656323637513, -5233768246222356395927056066996966414059877614469302959581759689624051967428, -14105588775729889211121701759428219611326473845934472490924648737530502350284, -17686583931262620270023681493714735537349682746873693389819638979504035612413, -8156139890804891381435654282443709986296310617865036299647012068157282540493, -700962003885250301502166728606422578403091868990878206366189079943070201441, -21265659765319021473203690583656751300291214184159783047025373648840148015924, -26607267718671761967188379255332320298195794909706423811363358315503003960830, -16016619545197913583685802818163038863126841912974030108842320562770757580843, -6391600730149253823080815156141200514452605681222312546014181526633736582704, -7206570355037916358027443973352851918102411267687562064462011321003605104566, -20724888735345585071257648359656155348183771193996041179307873216884101031805, -20374531968293563132394754757235404494404670901131522931020596573969194498283, -8065005442468129506236932753931341906552277762413495999845874981821580135728, -27002461316048685330290737234903811873079491001405152028648885924803059541810, -21760105632523737428804286914170608984132393207712468127119575271761931090650, -25750607316554089875783870207524764809869541411140419996337688714848165609390, -20866512520027153546691541058821101833704929314749703536459013526268748258621, -6516559993257104239683804797151038565144546174790514280342529974126459797128, -17068322853017969170014518101518105282866726398790558865807387355893904553904, -25153724488991043109249219743288710197420049332792361432726705657767516482384, -1578155004400830747378731432386062893138754762495117380679833827482393596273, -2454555855812362251063272617764383463853761650104150049024717650004489750619, -9040204922520569316513400934723519540494440658153126000481917403449964384680, -9325446814571942299882026509029796977204711154438304128375367672158590842288, -11392713026692296666831848037997348317968991014198936458035099331530022507907, -23679341717778492532119568475941993235814361943564038272425848318874660868018, -24509692155912891111972732662963818576807568782251227676276567621935014715941, -7055781500477284539437951888211082552517957556130430551034223670054857989827, -2, -17912041879035169648903013485556333039687074572812383956126744977053724529138, -2, -2, -0, -0, -0, -0, -0, -0, -0, -12259306888414691878575619517212941910309834391108466722480105206604975064088 -]}] \ No newline at end of file diff --git a/deploy/modular-verifier.js b/deploy/modular-verifier.js new file mode 100644 index 0000000..81ae548 --- /dev/null +++ b/deploy/modular-verifier.js @@ -0,0 +1,83 @@ +const hre = require('hardhat') +const { getNamedAccounts } = hre +const fs = require('fs'); +const path = require('path'); +const losslessJSON = require('lossless-json'); + +function get_subfolders(dir) { + const files = fs.readdirSync(dir, { withFileTypes: true }); + const result = []; + + for (const file of files) { + if (file.isDirectory()) { + result.push(file.name); + } + } + return result; +} + +module.exports = async function() { + const {deployments, getNamedAccounts} = hre; + const {deploy} = deployments; + const {deployer, tokenOwner} = await getNamedAccounts(); + + + let circuits = get_subfolders("./contracts/zkllvm"); + + for(k in circuits){ + let addrs = {}; + commitment_contract = await deploy("modular_commitment_scheme_" + circuits[k], { + from: deployer, + libraries : [], //deployedLib, + log : true, + }); +/* + permutation_argument_contract = await deploy("modular_permutation_argument_" + circuits[k], { + from: deployer, + libraries : [], //deployedLib, + log : true, + }); +*/ + let deployedLookupLib = {} + if( fs.existsSync("./contracts/zkllvm/"+circuits[k]+"/lookup_libs_list.json")) { + let lookup_libs = losslessJSON.parse(fs.readFileSync("./contracts/zkllvm/"+circuits[k]+"/lookup_libs_list.json", 'utf8')); + for (let lib of lookup_libs){ + await deploy(lib, { + from: deployer, + log: true, + }); + deployedLookupLib[lib] = (await hre.deployments.get(lib)).address + } + } + lookup_argument_contract = await deploy("modular_lookup_argument_" + circuits[k], { + from: deployer, + libraries : deployedLookupLib, + log : true, + }); + + let deployedLib = {} + if( fs.existsSync("./contracts/zkllvm/"+circuits[k]+"/gate_libs_list.json")) { + let libs = losslessJSON.parse(fs.readFileSync("./contracts/zkllvm/"+circuits[k]+"/gate_libs_list.json", 'utf8')); + for (let lib of libs){ + await deploy(lib, { + from: deployer, + log: true, + }); + deployedLib[lib] = (await hre.deployments.get(lib)).address + } + } + gate_argument_contract = await deploy("modular_gate_argument_" + circuits[k], { + from: deployer, + libraries : deployedLib, + log : true, + }); + + verifier_contract = await deploy("modular_verifier_" + circuits[k], { + from: deployer, + libraries : [], //deployedLib, + log : true, + }); + } +} + +module.exports.tags = ['ModularVerifierFixture']; diff --git a/deploy/test-universal-deployer.js b/deploy/test-universal-deployer.js deleted file mode 100644 index f15fb2f..0000000 --- a/deploy/test-universal-deployer.js +++ /dev/null @@ -1,44 +0,0 @@ -const hre = require('hardhat') -const { getNamedAccounts } = hre -const fs = require('fs'); -const path = require('path'); -const losslessJSON = require('lossless-json'); - -function get_subfolders(dir) { - const files = fs.readdirSync(dir, { withFileTypes: true }); - const result = []; - - for (const file of files) { - if (file.isDirectory()) { - result.push(file.name); - } - } - return result; -} - -module.exports = async function() { - const {deployments, getNamedAccounts} = hre; - const {deploy} = deployments; - const {deployer, tokenOwner} = await getNamedAccounts(); - - let zkllvm = get_subfolders("./contracts/zkllvm"); - - for(k in zkllvm){ - let libs = losslessJSON.parse(fs.readFileSync("./contracts/zkllvm/"+zkllvm[k]+"/linked_libs_list.json", 'utf8')); - let deployedLib = {} - for (let lib of libs){ - await deploy(lib, { - from: deployer, - log: true, - }); - deployedLib[lib] = (await hre.deployments.get(lib)).address - } - d = await deploy(zkllvm[k]+'_gate_argument_split_gen', { - from: deployer, - libraries : deployedLib, - log : true, - }); - } -} - -module.exports.tags = ['ZKLLVMFixture']; diff --git a/hardhat.config.ts b/hardhat.config.ts index 0f303a4..af6619a 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -5,7 +5,7 @@ require("hardhat-deploy"); require('hardhat-deploy-ethers'); require('hardhat-contract-sizer'); -import './tasks/verify-zkllvm-output' +import './tasks/modular-test' const SEPOLIA_PRIVATE_KEY="SEPOLIA_PRIVATE_KEY" const SEPOLIA_ALCHEMY_KEY="SEPOLIA_ALCHEMY_KEY" diff --git a/tasks/verify-zkllvm-output.ts b/tasks/modular-test.ts similarity index 58% rename from tasks/verify-zkllvm-output.ts rename to tasks/modular-test.ts index a16b348..c3949f4 100644 --- a/tasks/verify-zkllvm-output.ts +++ b/tasks/modular-test.ts @@ -3,6 +3,23 @@ import fs from "fs"; import path from "path"; import losslessJSON from "lossless-json"; +function get_subfolders(dir) { + const files = fs.readdirSync(dir, { withFileTypes: true }); + const result = []; + + for (const file of files) { + if (file.isDirectory()) { + result.push(file.name); + } + } + return result; +} + +function loadProof(proof_path){ + return fs.readFileSync(path.resolve(__dirname, proof_path), 'utf8'); +} + + function getFileContents(filePath) { return fs.readFileSync(filePath, 'utf8'); } @@ -120,12 +137,10 @@ function loadVector(public_input){ } function loadPublicInput(public_input_path){ + public_input_path = path.resolve(__dirname, public_input_path) if(fs.existsSync(public_input_path)){ let public_input = losslessJSON.parse(fs.readFileSync(public_input_path, 'utf8')); let result = []; -// for(let i in json_file_content){ -// result.push(BigInt(json_file_content[i])); -// } for(let i in public_input){ let field = public_input[i]; for(let k in field){ @@ -156,70 +171,76 @@ function loadPublicInput(public_input_path){ return []; } -function getVerifierParams(configPath, proofPath, publicInputPath) { - let public_input = loadPublicInput(path.resolve(__dirname, publicInputPath)); - let params = loadParamsFromFile(path.resolve(__dirname, configPath)); - params['proof'] = fs.readFileSync(path.resolve(__dirname, proofPath), 'utf8'); - params['public_input'] = public_input; - return params -} - - -function get_subfolders(dir) { - const files = fs.readdirSync(dir, { withFileTypes: true }); - const result = []; - - for (const file of files) { - if (file.isDirectory()) { - result.push(file.name); - } - } - return result; -} - task("verify-circuit-proof-all") .setAction(async (hre) => { - console.log("Verify all zkllvm proofs"); - let zkllvm_path = "../contracts/zkllvm/"; - let tests = get_subfolders(path.resolve(__dirname, zkllvm_path)); - await deployments.fixture(['testPlaceholderAPIConsumerFixture', 'ZKLLVMFixture', 'placeholderVerifierFixture']); - - for(const k in tests){ - let test = tests[k]; - let configPath = zkllvm_path + test + "/circuit_params.json"; - let proofPath = zkllvm_path + test + "/proof.bin"; - let publicInputPath = zkllvm_path + test + "/public_input.json"; - console.log("Verify :",test); - - let params = getVerifierParams(configPath,proofPath, publicInputPath); - - let testPlaceholderAPI = await ethers.getContract('TestPlaceholderVerifier'); - let placeholderVerifier = await ethers.getContract('PlaceholderVerifier'); - let gatesContract = await ethers.getContract(test + '_gate_argument_split_gen'); - await testPlaceholderAPI.initialize(placeholderVerifier.address); - await testPlaceholderAPI.verify(params['proof'],params['init_params'], params['columns_rotations'], params['public_input'], gatesContract.address ,{gasLimit: 30_500_000}); + console.log("Verify proof in modular style"); + let modular_path = "../contracts/zkllvm/"; + let circuits = get_subfolders(path.resolve(__dirname, modular_path)); +// await deployments.fixture(['ModularVerifierFixture']); + + for(const k in circuits){ + let circuit = circuits[k]; + let folder_path = modular_path + circuit; + await deployments.fixture(['ModularVerifierFixture']); +// const permutation_argument_contract = await ethers.getContract("modular_permutation_argument_"+circuit); + const lookup_argument_contract = await ethers.getContract("modular_lookup_argument_"+circuit); + const gate_argument_contract = await ethers.getContract("modular_gate_argument_"+circuit); + const commitment_contract = await ethers.getContract("modular_commitment_scheme_"+circuit); + + const verifier_contract = await ethers.getContract("modular_verifier_"+circuit); + await verifier_contract.initialize( +// permutation_argument_contract.address, + lookup_argument_contract.address, + gate_argument_contract.address, + commitment_contract.address + ); + + let proof_path = folder_path + "/proof.bin"; + console.log("Verify :",proof_path); + let proof = loadProof(proof_path); + let public_input = loadPublicInput(folder_path + "/input.json"); + await verifier_contract.verify(proof, public_input, {gasLimit: 30_500_000}); + console.log("===================================="); + +// proof_path = folder_path + "/proof2.bin"; +// console.log("Verify :",proof_path); +// proof = loadProof(proof_path); +// await verifier_contract.verify(proof, {gasLimit: 30_500_000}); + } }); -task("verify-circuit-proof", "Verify zkllvm proof") +task("verify-circuit-proof") .addParam("test") .setAction(async (test, hre) => { - console.log("Verify :",test.test); - let zkllvm_path = "../contracts/zkllvm/"+test.test+"/"; - let configPath = zkllvm_path + "circuit_params.json"; - let proofPath = zkllvm_path + "proof.bin"; - let publicInputPath = zkllvm_path + "public_input.json"; - let params = getVerifierParams(configPath,proofPath, publicInputPath); - await deployments.fixture(['testPlaceholderAPIConsumerFixture', 'ZKLLVMFixture', 'placeholderVerifierFixture']); - - let testPlaceholderAPI = await ethers.getContract('TestPlaceholderVerifier'); - let placeholderVerifier = await ethers.getContract('PlaceholderVerifier'); - let gatesContract = await ethers.getContract(test.test + '_gate_argument_split_gen'); - - await testPlaceholderAPI.initialize(placeholderVerifier.address); - await testPlaceholderAPI.verify( - params['proof'],params['init_params'], params['columns_rotations'], - params['public_input'], gatesContract.address, - {gasLimit: 30_500_000} + console.log("Run modular verifier for:",test.test); + let modular_path = "../contracts/zkllvm/"; + + let circuit = test.test; + let folder_path = modular_path + circuit; + await deployments.fixture(['ModularVerifierFixture']); +// const permutation_argument_contract = await ethers.getContract("modular_permutation_argument_"+circuit); + const lookup_argument_contract = await ethers.getContract("modular_lookup_argument_"+circuit); + const gate_argument_contract = await ethers.getContract("modular_gate_argument_"+circuit); + const commitment_contract = await ethers.getContract("modular_commitment_scheme_"+circuit); + + const verifier_contract = await ethers.getContract("modular_verifier_"+circuit); + await verifier_contract.initialize( +// permutation_argument_contract.address, + lookup_argument_contract.address, + gate_argument_contract.address, + commitment_contract.address ); + + let proof_path = folder_path + "/proof.bin"; + console.log("Verify :",proof_path); + let proof = loadProof(proof_path); + let public_input = loadPublicInput(folder_path + "/input.json"); + await verifier_contract.verify(proof, public_input, {gasLimit: 30_500_000}); + console.log("===================================="); + +// proof_path = folder_path + "/proof2.bin"; +// console.log("Verify :",proof_path); +// proof = loadProof(proof_path); +// await verifier_contract.verify(proof, {gasLimit: 30_500_000}); }); \ No newline at end of file