From e2fed3d475788933afd7f6ad9e536ea0ce8cae99 Mon Sep 17 00:00:00 2001 From: Constance Date: Fri, 26 May 2023 13:27:51 +0200 Subject: [PATCH] Check pk_d_old = derived_pk_d_old only when split_flag = 0 --- src/circuit.rs | 63 +++- src/circuit_description | 588 +++++++++++++++++++++----------- src/circuit_proof_test_case.bin | Bin 5250 -> 5250 bytes 3 files changed, 435 insertions(+), 216 deletions(-) diff --git a/src/circuit.rs b/src/circuit.rs index 7d5cb389f..4db6a9fa7 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -225,6 +225,7 @@ impl plonk::Circuit for Circuit { // Constrain split_flag = 1 or nf_old = nf_old_pub // Constrain is_native_asset to be boolean // Constraint if is_native_asset = 1 then asset = native_asset else asset != native_asset + // Constraint split_flag = 1 or derived_pk_d_old = pk_d_old let q_orchard = meta.selector(); meta.create_gate("Orchard circuit checks", |meta| { let q_orchard = meta.query_selector(q_orchard); @@ -261,6 +262,11 @@ impl plonk::Circuit for Circuit { let diff_asset_x = asset_x - Expression::Constant(*native_asset.x()); let diff_asset_y = asset_y - Expression::Constant(*native_asset.y()); + let pk_d_old_x = meta.query_advice(advices[6], Rotation::next()); + let pk_d_old_y = meta.query_advice(advices[7], Rotation::next()); + let derived_pk_d_old_x = meta.query_advice(advices[8], Rotation::next()); + let derived_pk_d_old_y = meta.query_advice(advices[9], Rotation::next()); + Constraints::with_selector( q_orchard, [ @@ -285,7 +291,7 @@ impl plonk::Circuit for Circuit { ), ( "split_flag = 1 or nf_old = nf_old_pub", - (one.clone() - split_flag) * (nf_old - nf_old_pub), + (one.clone() - split_flag.clone()) * (nf_old - nf_old_pub), ), ( "bool_check is_native_asset", @@ -308,7 +314,22 @@ impl plonk::Circuit for Circuit { "(is_native_asset = 0) => (asset != native_asset)", (one.clone() - is_native_asset) * (diff_asset_x * diff_asset_x_inv - one.clone()) - * (diff_asset_y * diff_asset_y_inv - one), + * (diff_asset_y * diff_asset_y_inv - one.clone()), + ), + // Constrain derived pk_d_old to equal witnessed pk_d_old + // + // This equality constraint is technically superfluous, because the assigned + // value of `derived_pk_d_old` is an equivalent witness. But it's nice to see + // an explicit connection between circuit-synthesized values, and explicit + // prover witnesses. We could get the best of both worlds with a write-on-copy + // abstraction (https://github.com/zcash/halo2/issues/334). + ( + "split_flag = 1 or pk_d_old_x = derived_pk_d_old_x", + (one.clone() - split_flag.clone()) * (pk_d_old_x - derived_pk_d_old_x), + ), + ( + "split_flag = 1 or pk_d_old_y = derived_pk_d_old_y", + (one - split_flag) * (pk_d_old_y - derived_pk_d_old_y), ), ], ) @@ -669,7 +690,7 @@ impl plonk::Circuit for Circuit { } // Diversified address integrity (https://p.z.cash/ZKS:action-addr-integrity?partial). - let pk_d_old = { + let (derived_pk_d_old, pk_d_old) = { let ivk = { let ak = ak_P.extract_p().inner().clone(); let rivk = ScalarFixed::new( @@ -696,22 +717,13 @@ impl plonk::Circuit for Circuit { let (derived_pk_d_old, _ivk) = g_d_old.mul(layouter.namespace(|| "[ivk] g_d_old"), ivk)?; - // Constrain derived pk_d_old to equal witnessed pk_d_old - // - // This equality constraint is technically superfluous, because the assigned - // value of `derived_pk_d_old` is an equivalent witness. But it's nice to see - // an explicit connection between circuit-synthesized values, and explicit - // prover witnesses. We could get the best of both worlds with a write-on-copy - // abstraction (https://github.com/zcash/halo2/issues/334). let pk_d_old = NonIdentityPoint::new( ecc_chip.clone(), layouter.namespace(|| "witness pk_d_old"), self.pk_d_old.map(|pk_d_old| pk_d_old.inner().to_affine()), )?; - derived_pk_d_old - .constrain_equal(layouter.namespace(|| "pk_d_old equality"), &pk_d_old)?; - pk_d_old + (derived_pk_d_old, pk_d_old) }; // Old note commitment integrity (https://p.z.cash/ZKS:action-cm-old-integrity?partial). @@ -933,6 +945,31 @@ impl plonk::Circuit for Circuit { }, )?; + pk_d_old.inner().x().copy_advice( + || "pk_d_old_x", + &mut region, + config.advices[6], + 1, + )?; + pk_d_old.inner().y().copy_advice( + || "pk_d_old_y", + &mut region, + config.advices[7], + 1, + )?; + derived_pk_d_old.inner().x().copy_advice( + || "derived_pk_d_old_x", + &mut region, + config.advices[8], + 1, + )?; + derived_pk_d_old.inner().y().copy_advice( + || "derived_pk_d_old_y", + &mut region, + config.advices[9], + 1, + )?; + config.q_orchard.enable(&mut region, 0) }, )?; diff --git a/src/circuit_description b/src/circuit_description index 32ecbe8ea..ffb19ab6f 100644 --- a/src/circuit_description +++ b/src/circuit_description @@ -913,6 +913,188 @@ PinnedVerificationKey { ), ), ), + Product( + Product( + Product( + Product( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000002, + ), + Negated( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + ), + ), + ), + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000003, + ), + Negated( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + ), + ), + ), + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000004, + ), + Negated( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + ), + ), + ), + Product( + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000001, + ), + Negated( + Advice { + query_index: 8, + column_index: 8, + rotation: Rotation( + 0, + ), + }, + ), + ), + Sum( + Advice { + query_index: 16, + column_index: 6, + rotation: Rotation( + 1, + ), + }, + Negated( + Advice { + query_index: 18, + column_index: 8, + rotation: Rotation( + 1, + ), + }, + ), + ), + ), + ), + Product( + Product( + Product( + Product( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000002, + ), + Negated( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + ), + ), + ), + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000003, + ), + Negated( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + ), + ), + ), + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000004, + ), + Negated( + Fixed { + query_index: 18, + column_index: 18, + rotation: Rotation( + 0, + ), + }, + ), + ), + ), + Product( + Sum( + Constant( + 0x0000000000000000000000000000000000000000000000000000000000000001, + ), + Negated( + Advice { + query_index: 8, + column_index: 8, + rotation: Rotation( + 0, + ), + }, + ), + ), + Sum( + Advice { + query_index: 17, + column_index: 7, + rotation: Rotation( + 1, + ), + }, + Negated( + Advice { + query_index: 19, + column_index: 9, + rotation: Rotation( + 1, + ), + }, + ), + ), + ), + ), Product( Product( Product( @@ -1057,7 +1239,7 @@ PinnedVerificationKey { Product( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -1066,7 +1248,7 @@ PinnedVerificationKey { 0x0000000000000000000000000000000000000000000000000000000000000400, ), Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -3675,7 +3857,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -3701,7 +3883,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -3919,7 +4101,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -4480,7 +4662,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -4506,7 +4688,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -4724,7 +4906,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -5223,7 +5405,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -5239,7 +5421,7 @@ PinnedVerificationKey { ), Sum( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -5250,14 +5432,14 @@ PinnedVerificationKey { Sum( Product( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, ), }, Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -5266,7 +5448,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -5558,7 +5740,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -5584,7 +5766,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -5786,7 +5968,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -5907,7 +6089,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -6059,7 +6241,7 @@ PinnedVerificationKey { }, Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -6146,7 +6328,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -6162,7 +6344,7 @@ PinnedVerificationKey { ), Sum( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -6173,14 +6355,14 @@ PinnedVerificationKey { Sum( Product( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, ), }, Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -6189,7 +6371,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -6315,7 +6497,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -6341,7 +6523,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -6559,7 +6741,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -6696,7 +6878,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -6864,7 +7046,7 @@ PinnedVerificationKey { }, Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -6948,7 +7130,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -7048,7 +7230,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -7060,7 +7242,7 @@ PinnedVerificationKey { 0x0000000000000000000000000000000000000000000000000000000000000002, ), Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -7076,7 +7258,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -7088,7 +7270,7 @@ PinnedVerificationKey { 0x0000000000000000000000000000000000000000000000000000000000000002, ), Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -7193,7 +7375,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -7205,7 +7387,7 @@ PinnedVerificationKey { 0x0000000000000000000000000000000000000000000000000000000000000002, ), Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -7224,7 +7406,7 @@ PinnedVerificationKey { }, Negated( Advice { - query_index: 21, + query_index: 22, column_index: 1, rotation: Rotation( -1, @@ -7241,7 +7423,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -7253,7 +7435,7 @@ PinnedVerificationKey { 0x0000000000000000000000000000000000000000000000000000000000000002, ), Advice { - query_index: 17, + query_index: 20, column_index: 9, rotation: Rotation( -1, @@ -7273,7 +7455,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 21, + query_index: 22, column_index: 1, rotation: Rotation( -1, @@ -7468,7 +7650,7 @@ PinnedVerificationKey { Sum( Sum( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -7668,7 +7850,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -7778,7 +7960,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -7789,7 +7971,7 @@ PinnedVerificationKey { ), ), Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -7888,7 +8070,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -7914,7 +8096,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -8029,7 +8211,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -8064,7 +8246,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -8198,7 +8380,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -8233,7 +8415,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -10595,7 +10777,7 @@ PinnedVerificationKey { }, Sum( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -10701,7 +10883,7 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -10710,7 +10892,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -10727,7 +10909,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -10736,7 +10918,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -10832,7 +11014,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -11252,7 +11434,7 @@ PinnedVerificationKey { Sum( Sum( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -11620,7 +11802,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -11965,7 +12147,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -12310,7 +12492,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -12850,7 +13032,7 @@ PinnedVerificationKey { Sum( Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -12860,7 +13042,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -12871,7 +13053,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -13006,7 +13188,7 @@ PinnedVerificationKey { Sum( Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -13016,7 +13198,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -13027,7 +13209,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -13162,7 +13344,7 @@ PinnedVerificationKey { Sum( Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -13172,7 +13354,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -13183,7 +13365,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -13270,7 +13452,7 @@ PinnedVerificationKey { Sum( Sum( Advice { - query_index: 20, + query_index: 21, column_index: 6, rotation: Rotation( -1, @@ -13286,7 +13468,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -13386,7 +13568,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -13477,7 +13659,7 @@ PinnedVerificationKey { }, Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -15067,14 +15249,14 @@ PinnedVerificationKey { Product( Sum( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -15094,14 +15276,14 @@ PinnedVerificationKey { Sum( Product( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, ), }, Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -15120,7 +15302,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -15161,7 +15343,7 @@ PinnedVerificationKey { 0x0000000000000000000000000000000000000000000000000000000000000002, ), Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -15678,7 +15860,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -15797,7 +15979,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -15809,7 +15991,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -15923,7 +16105,7 @@ PinnedVerificationKey { Sum( Sum( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -16041,7 +16223,7 @@ PinnedVerificationKey { ), Sum( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -16050,7 +16232,7 @@ PinnedVerificationKey { Negated( Sum( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -16058,7 +16240,7 @@ PinnedVerificationKey { }, Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -17454,7 +17636,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -17584,7 +17766,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -17690,7 +17872,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -17900,7 +18082,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -17912,7 +18094,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -18042,7 +18224,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -18053,7 +18235,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -18409,7 +18591,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -18420,7 +18602,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -18771,7 +18953,7 @@ PinnedVerificationKey { }, Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -18782,7 +18964,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -19115,7 +19297,7 @@ PinnedVerificationKey { ), Sum( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -19144,7 +19326,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -19610,7 +19792,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -19740,7 +19922,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -19839,7 +20021,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -19944,7 +20126,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -20049,14 +20231,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -20191,7 +20373,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -20349,7 +20531,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -20464,7 +20646,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -20585,14 +20767,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -20874,7 +21056,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -21032,7 +21214,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -21147,7 +21329,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -21268,14 +21450,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -21411,7 +21593,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -21422,7 +21604,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -21580,7 +21762,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -21695,14 +21877,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -21816,7 +21998,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -21937,14 +22119,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -22215,7 +22397,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -22500,7 +22682,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -22743,7 +22925,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -22864,7 +23046,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -23106,7 +23288,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -23118,7 +23300,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -23264,7 +23446,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -23275,7 +23457,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -23679,7 +23861,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -23690,7 +23872,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -24089,7 +24271,7 @@ PinnedVerificationKey { }, Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -24100,7 +24282,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -24481,7 +24663,7 @@ PinnedVerificationKey { ), Sum( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -24510,7 +24692,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -25040,7 +25222,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -25186,7 +25368,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -25301,7 +25483,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -25422,7 +25604,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -25543,14 +25725,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -25685,7 +25867,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -25843,7 +26025,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -25958,7 +26140,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -26079,14 +26261,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -26320,7 +26502,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -26430,7 +26612,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -26497,7 +26679,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -26570,14 +26752,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -26665,7 +26847,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -26676,7 +26858,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -26786,7 +26968,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -26853,14 +27035,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -26926,7 +27108,7 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -26999,14 +27181,14 @@ PinnedVerificationKey { ), Product( Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -27181,7 +27363,7 @@ PinnedVerificationKey { ), Scaled( Advice { - query_index: 22, + query_index: 16, column_index: 6, rotation: Rotation( 1, @@ -27370,7 +27552,7 @@ PinnedVerificationKey { ), Negated( Advice { - query_index: 19, + query_index: 18, column_index: 8, rotation: Rotation( 1, @@ -27517,7 +27699,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -27590,7 +27772,7 @@ PinnedVerificationKey { ), }, Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -27855,7 +28037,7 @@ PinnedVerificationKey { ), ( Column { - index: 9, + index: 6, column_type: Advice, }, Rotation( @@ -27864,16 +28046,16 @@ PinnedVerificationKey { ), ( Column { - index: 9, + index: 7, column_type: Advice, }, Rotation( - -1, + 1, ), ), ( Column { - index: 7, + index: 8, column_type: Advice, }, Rotation( @@ -27882,7 +28064,7 @@ PinnedVerificationKey { ), ( Column { - index: 8, + index: 9, column_type: Advice, }, Rotation( @@ -27891,7 +28073,7 @@ PinnedVerificationKey { ), ( Column { - index: 6, + index: 9, column_type: Advice, }, Rotation( @@ -27900,7 +28082,7 @@ PinnedVerificationKey { ), ( Column { - index: 1, + index: 6, column_type: Advice, }, Rotation( @@ -27909,11 +28091,11 @@ PinnedVerificationKey { ), ( Column { - index: 6, + index: 1, column_type: Advice, }, Rotation( - 1, + -1, ), ), ( @@ -28313,7 +28495,7 @@ PinnedVerificationKey { Negated( Scaled( Advice { - query_index: 16, + query_index: 19, column_index: 9, rotation: Rotation( 1, @@ -28673,7 +28855,7 @@ PinnedVerificationKey { ), ), Advice { - query_index: 18, + query_index: 17, column_index: 7, rotation: Rotation( 1, @@ -28887,15 +29069,15 @@ PinnedVerificationKey { (0x3a83a8e762ebade712aa5cf3c41c730a79369475085bf1155579f7f7682408e2, 0x25b00d3ee1da9a6bbd36b35ba461da45abd931c767b863ec4a604f8ce094e4eb), (0x1caeb4d7ebb44a717f83ee5afd35446a5e2124f6a4075342ba4eff589523fb57, 0x3a8c431a13632a5b5f035eb4b804d37f2591e84d05d765ba3f70a3d61b907ebb), (0x107d95a6361fc98df9042f32451faa4fd48c1381653be7847d97cf997a55a4ad, 0x31ebf6a2e352108bb180c3278e72d88bb5bab723d3b38aa47c144fc37fb8a962), - (0x340633bc671d4839c9245701bd7877dffa14caa8516fc2b2d97ab743abff31b2, 0x2d44e13f4cbd8767746e33ca3780ca730de2e81c68fd2eac2856405c810ea835), - (0x0686df606b54c901940689a81e292bbf35653bed36d07d565e6c1bb2f04f7f16, 0x109273b534b0bcdf7d3b651b87631202e692e9799f300b93bdde0c1084644f98), - (0x3b5c55541e5ecbed649a67e81c69ecf846b0d8bb5b3fb0dca7cc855508a60291, 0x2c2d977d9db18dac2bfeb6863e04603fbe577260b77d83de7a40440d0d7e96e0), - (0x377b4690b84709cca9b5f7557a4946907582090395704a279bc3d0474649649c, 0x19d8a463645acaf5e80a0eae028da3175fe3fd07a8afa7b357266951fabf15a2), - (0x01b35d8bd7fff98c6eca9e68b04159d9e04c8c97ee823cbfb25c72759a0f1bff, 0x2f690ea00d11748a56994db1d5086cc14feb4e182950aa3bd78a5e7c39f1c438), - (0x14322512145256db0a887e0d44cb0ca576d199cd60dd6c0fc592974f5bfc982c, 0x14f0d717d83c30687335f599f0e0b313e1f908d8cb539273271d61b6c0c7a977), - (0x2cfd5a6eebaf22de42df01c35ea51d5149528799a4dae214ff5ea4964384549a, 0x0241a066241ababd11a9d336f30a68d2eb40b15a1a74ce7ebb8284818341195f), - (0x1a104a92aae262af0c12ae8e460b8a050d0609236881b44523a51ade8d58fb59, 0x1b4826150f81242668cdf5ac67894f1aaa4f958b4e26af911fcca643c4cd5265), - (0x1973139bb6cfd1f498c01fda7934f1b9954a52bb7e3778814745f73a03f1ec21, 0x0984409ed6f0dfbf0b25a658c4838327096519bd700e0b7ccd69528d971da6d4), + (0x23d190a42430492732de147e7560ae1387a0e8c6b0dc405b893c99c34d124152, 0x0f7f1cb9cd7c701f22270a68d9cb484b4fffdc6144c8ce3f4eca5b646f8a939f), + (0x2b0f9d7b69e1f353868a4d542b7a23f24f39335b16c3a46fca1edb12a69bb350, 0x1e4ac9f6f6d4ba4fa4cd21e669b8293e3be8c143c795d2eb31503a9389ad4314), + (0x28f1ed28efc008bcec444c440ddbe60a8e58fe5b9a6047f0bf4d8abf599cc4ed, 0x180eef569a332ec094a76dd55de8f8ef4f087465bb2abc8dd5f7a265e048e84f), + (0x36608273abc0c47131ee4cb410b4e936fe693e9e034c686e188438d5eab134cd, 0x304e3ffef142c51a5a081a977f9c2581fa18a356e080d20cf10a044e46a3c802), + (0x355228aaa5e1134d08305d64d86cca7abac7c4114252a2a71df6a40d6a3633a9, 0x2d492e1c28cf94f9a074b14cb4cfd0cabd46121faa034d887c5f07cb743464e2), + (0x31fe923865ff58a9e59393bf64ebff3f25831371afbd2de5ddf147519ad6160a, 0x30449e9123aee5a61d3ed4c9e5822e2f60184a6c4234cfd61575e9f9572f370e), + (0x0e24cddb59a4615d0595e5439fca547a3f1ed39c4a2b0879d7e8603306d9e4b5, 0x35ab4acd6912b9bc66c19ebc9845886a4828bac17246137e36f924df2f9be175), + (0x3bd9f4407fcbb3e4ec812de2c53e70fb9203381f5a1c0f4c5e5fa52b932f5ac1, 0x06d8356f6b642427ddfad6e3642e40c0b29034baf9adb19c8a3ab251b16f39ef), + (0x21e3606f857180611036daa84bee713ff0b360b6282adc5bbaa40a5f6f7e6bc7, 0x3bff3cd61a5ae314f5eead93e3084c60a31e8b794186061a24ffa5a5dcd7e0f5), (0x3c0f3f0d7b2306490dac7d578d4846c63adcc76988ce322d8691c3b8b5b0f623, 0x12d81ca672a1c18f6e0d9b7eb8fbabdbe450fae6667cf349c1a0e63ca9a0824e), (0x27d13b33003ffddcd36efb731fe94db93d181bd994e0c057e945402bc8501789, 0x0e1dde94ea3b35e0d0a66350163ba2ff9dd5070500912b7d076747816965ffd2), (0x3049e9c8a3e6c7fe628660121f04915e03546b7a2dcb8a3e59fa99546e4f7f86, 0x2dcebc740917584f788b776f4cf1e3cd96b4a29e9df7224fd8e5f428d4112546), @@ -28903,32 +29085,32 @@ PinnedVerificationKey { (0x1751912a19fa0009ece61b686342d6b4385415e942159e8db3f174ad24d612b9, 0x0f31114ef566211d46914d0bc2d1a27a0e34eeda04dab53a0af7a37024f057a1), (0x091c6c4854fa5d9ed8a966f2a1c4946b41f6872de6c19fa8b521a0a8eb2bd899, 0x29100b4e15344d750fae4a81c82faca1e8e0573336b1f54b394946e95e7baad0), (0x1a5bb6ffd1af2165203df63414021a531f0f2bfcec85443a180993cc222b40af, 0x0d6b8b0d2363607d15746434b670008845ed0524406c1d8a221cb6f58ee2d4ed), - (0x3b31f6e48472e06a9f21145e3a37744fa0ceb6188485ce44b1a131ae47661e17, 0x382d47f03a6703a3018d8582a6123e0e61c549d695f1e2a40bb578bc2ca0e6f2), + (0x0e3ead6853e036099146875357a97c73327ac7aac89df7af91e8e126cf1adb3d, 0x16e19a920aa5d52ec2bb18e595b12cc3f65ae6703af8c088c3741ec59acdde8a), (0x34c8b83a2cc924f1b0237978c8f911e6a54375c509ba46456a011fbb74c8698c, 0x260cc681c222535c0030f702172ee8855b681c16d706b1b9a786165e06705de6), - (0x1b7a61e8a9b32fe558433feec9aaf51204e5486aa468d7215087ed35fd6ecbe5, 0x1f36dc6852f92c141ba800f721d079ffc553c7449b85d16e7487e0c3009c7835), + (0x3dcb136a22551e524212c0325331a9dae5ad6ff356175e6b82a54039475be1ef, 0x3bbbd0d20ea0ebb0f36d740910947d1934bcb93ba16325ea42f124ec0cde7a81), (0x3bb657ca32617e6242b6c6a0b166a1db205024d0441d091b8d45fb478cd4782c, 0x3189ce1b97103345fc0eafd287eed80ab186151171f22af2c9befc71a0957529), (0x25578b0a6d546cf38dc84329fad41e59690a2bd94a0db5fddb42e0db8c267827, 0x03448e4552625dda62a96318bcafcc305deafd6a028f8379d8c8d9ffa0f86e64), (0x30d1828d7463255ad75b39ee4c718de05a762c45c5d717d059496fe05d1575b4, 0x0a8eb70a9b252ee9ee57b29e4dab191cbb29665821830b2ab60fdd5d3414de45), - (0x21c6cc32a998a56e0184238756f9bc06c034326644fa797d58d37a4ce04862ad, 0x0a3215ded9e38470be699055ba4776fda0751bc3d0b893e49c71f2817e12c354), - (0x2b8641a13009b6e2c57fb902961c97d5a37fe9e7012c48a27e644ab86c6e798c, 0x31dc90911a15d74e74ad51ac80cbfca12b1eb06038bb3d5aecc0498c5bd5ff68), - (0x10b4ec889583134fa09dc3e6f0fac585f2dbf6dddcc1eea2c95bab4b8de05be5, 0x0eb4092d1a27658602828702d73145b842f9dbe4b113b61b10049ebe406d625c), - (0x0b9493ff319556d1792c2b1ccef1c52d6097620601b22c8a6cc9f3da9608a3df, 0x098fabd4f3443138f8c72fa5991a7012266cd3d574a65083a611688aec7c631d), - (0x2574aa02cd03503fc37ade3434a4d426f97f94e5f98ae5ea8f3d1324589670a5, 0x22b31bec6726ce49ea837dc05d3576d2e71536ada0d7db4efcd06c34b2129e2c), + (0x1bdd262015bc4b15fd90dcb6dea748cb9032fed094df3edfc0ca96c419c6ea9f, 0x28bad5ad4461b66303cb84925b54258e27953e8ef5e67c1057c823091a8562b9), + (0x09e15af05d50016fd1c475fbd3ae0be95289f239f13962f755f8b39732c73feb, 0x03760949d5057f33c30391474cbc3d447858da57e8b72487a98827b339993e60), + (0x0460fc7f74c9808eea035e8df3ac031c2d05ecafd8f0189f2d6ddac3274752fb, 0x2bc99ad7317625f1a1d6bca1781557b87e8b9976cdcaf994c827a0087d1ce182), + (0x31b7012d949d0668d34cb20200d4e159262aa0dd92114d3aa5e8aa84af51a802, 0x2eb9c55ed473e18e62dc273a8606f955690a984551fbc38e80d65199ab8d0c3d), + (0x33dced988c6a1d40aff3da1710a0e36a6b787fd6dae51ebe3dda7835c2dbea15, 0x3b54a967115d43feccf77c385dcfc6e89f30343457bc8921e017c930a381b5b0), ], permutation: VerifyingKey { commitments: [ - (0x09d1106babba44f67eace95337e3b9916cf02d0b143d5993cf212ba4fa6e2d81, 0x2046a60feac842a629a24189de9d914da26b2254440c142cf851f6d4d5c586a4), - (0x26086868fee3f97d3171042e8ad377782aa845dd3e5c6c86f5d1251b41b8ff03, 0x2f60015e46a7e2bc0e30413be4782c648ec5e9dedc92ce9052fd2857a779a4cd), - (0x00d54c6162e5654355cbaa6951f86836cea891242793df30e4ae74d522747d01, 0x0f9d6c7108000d07ff766c16757c7a02cc8bcaa1ce3001c476bda543db4b52fb), - (0x131a626c24a64b23cb9a554921462f8b3848294a5a12110528b11362fe80f59c, 0x3e8076404262e3d7b5a6d2a3dbdf0fb151e2f3fe4a9239365dfd63853bfd8b8d), - (0x00aae2c83a8cb88fd04c9c631ea69362f38d41688624f519c6aab8fb15110931, 0x0294f0e5b376a7bc9fd190f34c00201c0ffa2a019148d27e1a578effba915450), - (0x2022cd25023adefba897a064d43365c59df92f547eea992189040ecf23eb1b89, 0x2d5ada0189acf8d400ed967e8537e7de7979d2bd6ad5430aa009e200edcad889), - (0x30e4290b63621db78bfadf242ac8a940179ddd601127f4fe05df818dda0de8b5, 0x13ab4dd58054df7dc7c4e59fcf5745373889113fccc60d8a79957dcbc4a1a79e), - (0x17ee4b08749d802b2cb5a8d72df1d27c4a521293347698bac389f473f573888f, 0x19efafbfa1bc8c4e62cb0d8893905ac7a30da08a9ffc18ac26f741c6419f2fe1), - (0x1a5804444e8f54cdff0f38ee9fc051672b5fcb0cf39cc608e20db884c18c2ae0, 0x11b297659614cacbc3fe5b6b8506d7b31d04ec061329c791714478f480215263), - (0x22bbc74dac7b42add29982d2d276b548b38b2fdc8628d4fd331f5d09cae93881, 0x0808f95123e9339e6643594561b28d0a4b6d7d52bdf0b60e3ab698336cfefe06), - (0x07201f37d78f79f85a69d9333e60682fd709fcb7b9fbc843d0baef7885a79246, 0x3b01c7b445dd60b44309c172d55cd2bfed068fa420f8c2cbf316eac3bda6985b), - (0x3998aad0ccd62e9339c4ca91363bec2524ec945bb780efd9984fec68b4f51efb, 0x32cdaa4c65f29fa0675df2196f3190b849dd1dc4a48d615602e57b282cb34673), + (0x01b2f977b5e96e2d00052aa77013b4a7522b714ed1265e5b761a90add04a677d, 0x06ae5604d2abf710e3720ab4ca37bc7a75cec4772624973990fe7acb95d2b90e), + (0x3487595fd169aea1e2055c38daf7b83a923600084a12f6beb068e9ef0886884b, 0x2094e9bc4aead08e32eb63939e7b365f7c4dbe7bb9e4fe439fe7855da2a8ef59), + (0x34b7b5583a32b3a2a188214b041b0402948759fbdf47b4b50421905728b78148, 0x10fafdf7f63a938d87eb031cbe61c6dd5915612ecb71865e94a7d7fdcb96f9c8), + (0x38b9b1352ef7da340b69e7d152d86c26abaa7eb8da2b2049c75eb908bc42dae1, 0x2b7880c4c7790b2bd4f603a95561e7e1f4fba95eba4096f6d44b89e4b0a16519), + (0x08b55ac77535aa391210533786aa9a62215fe2cb6950b60dde6563f8c4f47d58, 0x1ca42aafc1ae6e8554a933225daae97222e08a59c866024a936f66e45455c47b), + (0x3b23fca8ae9ee4f186c654428419b16169777a1b5cf7e959f73de3fd21cf1403, 0x3ff330b5247e4a88c38452e3bbaf20c79cff67a4a5b91c5ac3c6614d8cc17119), + (0x39c00327041f3b0a21cc10acacd55a94f968770121fb55e8bee01e146ea024a1, 0x38c3af47f4278d74e808aeecaf9407b17757384e9d50b59500604c7bb86687cd), + (0x0fe245acf5779d18b38c28fd4f6d921bb5487579d1fd257b7ea48f8d6de2db2f, 0x1f8a5b90451fa159c9c517a0b7250787d86c63555659298bb7ca10c537e94e12), + (0x13f4c48990bdcadf99fc60d63b04eb82f26dc2c59b515f265a66c2732abd0205, 0x20dbafa9a43baccfc5ee6947bc408b1e8974af2f5c141f3f704a747e194f04f0), + (0x16d8e8e787a2dfde1ec419ce969aa5a6c23b9d703a7440a6f085cb1fbbb21a57, 0x217624d76f302eb4f3a4f9bd3968fa79f66e4b06b5bc72048b979fb58b1f29d7), + (0x0f74011b79a40415b90f8f22db1a1433b7336307801cfe97b84f60bf7cb15d44, 0x10f2a0765e05ab426d0b183ad84616438187efbfb6122540d768895324d42667), + (0x2139a7b9a8c74648139b556ae77015620edcc81cf0a89cc960a57e16c4346a0b, 0x0295889e3496dac3174b2ba3c5399b78d9ecf042730cede62d37f6f0bfc021b6), (0x21d210b41675a1eae44cbd0f3fd27d69e30716c71873f6089cee61acacd403ab, 0x2275e97c7e84f68bfaa528a9d8be4e059f7abefd80d03fbfca774e8414a9b7c1), (0x0f9e7de28e0f650d99d99d95c0fcd39c9dac9db5aa1973319f66922d6eb9f7d5, 0x1ba644ecc18ad711ddd33af7f695f6834e9f35c93d47a6a5273dabbe800fc7e6), (0x0aab3ab73afac76277cd94a891de15e42ceb09f3a9865dab5c814bebfbb4453f, 0x27119fec3736d99abeeef1ad7b857db7e754e0c158780ed3dd0cdd4dc2453e10), diff --git a/src/circuit_proof_test_case.bin b/src/circuit_proof_test_case.bin index 7fe92dc3d1d910ff5b4a2044c05f15fa7afb872c..9d541d63f1f5e947978137c33c8705bebd8de2b4 100644 GIT binary patch literal 5250 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