From 2b2aaab749e90e16f3f533f9053c82f6628928b1 Mon Sep 17 00:00:00 2001 From: M Alghazwi Date: Tue, 12 Nov 2024 12:03:56 +0100 Subject: [PATCH] add no-padding hash and refactor --- .../src/circuits/merkle_circuit.rs | 2 +- codex-plonky2-circuits/src/circuits/params.rs | 51 +- .../src/circuits/sample_cells.rs | 4 +- codex-plonky2-circuits/src/circuits/sponge.rs | 73 +- codex-plonky2-circuits/src/circuits/utils.rs | 13 - proof-input/input.json | 2001 ------------- proof-input/src/gen_input.rs | 92 +- proof-input/src/json.rs | 156 +- proof-input/src/params.rs | 128 +- proof-input/src/sponge.rs | 72 +- proof-input/src/tests/merkle_circuit.rs | 17 +- proof-input/src/utils.rs | 37 +- workflow/input.json | 2531 ++++------------- 13 files changed, 958 insertions(+), 4219 deletions(-) delete mode 100644 proof-input/input.json diff --git a/codex-plonky2-circuits/src/circuits/merkle_circuit.rs b/codex-plonky2-circuits/src/circuits/merkle_circuit.rs index f0571ac..99aa3fc 100644 --- a/codex-plonky2-circuits/src/circuits/merkle_circuit.rs +++ b/codex-plonky2-circuits/src/circuits/merkle_circuit.rs @@ -13,7 +13,7 @@ use std::marker::PhantomData; use plonky2_poseidon2::poseidon2_hash::poseidon2::Poseidon2; use crate::circuits::keyed_compress::key_compress_circuit; use crate::circuits::params::HF; -use crate::circuits::utils::{add_assign_hash_out_target, assign_bool_targets, assign_hash_out_targets, mul_hash_out_target, usize_to_bits_le_padded}; +use crate::circuits::utils::{add_assign_hash_out_target, assign_bool_targets, assign_hash_out_targets, mul_hash_out_target}; use crate::merkle_tree::merkle_safe::{KEY_NONE,KEY_BOTTOM_LAYER}; /// Merkle tree targets representing the input to the circuit diff --git a/codex-plonky2-circuits/src/circuits/params.rs b/codex-plonky2-circuits/src/circuits/params.rs index 8abb6d1..f418951 100644 --- a/codex-plonky2-circuits/src/circuits/params.rs +++ b/codex-plonky2-circuits/src/circuits/params.rs @@ -1,5 +1,7 @@ // global params for the circuits +use anyhow::{Result, Context}; +use std::env; use plonky2::hash::poseidon::PoseidonHash; use plonky2_poseidon2::poseidon2_hash::poseidon2::Poseidon2Hash; @@ -8,8 +10,8 @@ use plonky2_poseidon2::poseidon2_hash::poseidon2::Poseidon2Hash; // will look into this later. pub type HF = Poseidon2Hash; -// params used for the circuits -// should be defined prior to building the circuit +/// params used for the circuits +/// should be defined prior to building the circuit #[derive(Clone, Debug)] pub struct CircuitParams{ pub max_depth: usize, @@ -19,3 +21,48 @@ pub struct CircuitParams{ pub n_samples: usize, } +impl CircuitParams { + /// Creates a new `CircuitParams` struct from environment. + /// + /// - `MAX_DEPTH`:The maximum slot depth + /// - `MAX_LOG2_N_SLOTS`:The maximum log2 number of slots + /// - `BLOCK_TREE_DEPTH`:The block tree depth + /// - `N_FIELD_ELEMS_PER_CELL`: The number of field elements per cell + /// - `N_SAMPLES`: number of samples + /// + /// Returns an error if any environment variable is missing or fails to parse. + pub fn from_env() -> Result { + let max_depth = env::var("MAX_DEPTH") + .context("MAX_DEPTH is not set")? + .parse::() + .context("MAX_DEPTH must be a valid usize")?; + + let max_log2_n_slots = env::var("MAX_LOG2_N_SLOTS") + .context("MAX_LOG2_N_SLOTS is not set")? + .parse::() + .context("MAX_LOG2_N_SLOTS must be a valid usize")?; + + let block_tree_depth = env::var("BLOCK_TREE_DEPTH") + .context("BLOCK_TREE_DEPTH is not set")? + .parse::() + .context("BLOCK_TREE_DEPTH must be a valid usize")?; + + let n_field_elems_per_cell = env::var("N_FIELD_ELEMS_PER_CELL") + .context("N_FIELD_ELEMS_PER_CELL is not set")? + .parse::() + .context("N_FIELD_ELEMS_PER_CELL must be a valid usize")?; + + let n_samples = env::var("N_SAMPLES") + .context("N_SAMPLES is not set")? + .parse::() + .context("N_SAMPLES must be a valid usize")?; + + Ok(CircuitParams { + max_depth, + max_log2_n_slots, + block_tree_depth, + n_field_elems_per_cell, + n_samples, + }) + } +} diff --git a/codex-plonky2-circuits/src/circuits/sample_cells.rs b/codex-plonky2-circuits/src/circuits/sample_cells.rs index d369639..645c3a1 100644 --- a/codex-plonky2-circuits/src/circuits/sample_cells.rs +++ b/codex-plonky2-circuits/src/circuits/sample_cells.rs @@ -17,7 +17,7 @@ use plonky2::hash::hashing::PlonkyPermutation; use crate::circuits::params::{CircuitParams, HF}; use crate::circuits::merkle_circuit::{MerkleProofTarget, MerkleTreeCircuit, MerkleTreeTargets}; -use crate::circuits::sponge::hash_n_with_padding; +use crate::circuits::sponge::{hash_n_no_padding, hash_n_with_padding}; use crate::circuits::utils::assign_hash_out_targets; /// circuit for sampling a slot in a dataset merkle tree @@ -212,7 +212,7 @@ impl< let mut hash_inputs:Vec= Vec::new(); hash_inputs.extend_from_slice(&data_i); // let data_i_hash = builder.hash_n_to_hash_no_pad::(hash_inputs); - let data_i_hash = hash_n_with_padding::(builder, hash_inputs); + let data_i_hash = hash_n_no_padding::(builder, hash_inputs); // make the counter into hash digest let ctr_target = builder.constant(F::from_canonical_u64((i+1) as u64)); let mut ctr = builder.add_virtual_hash(); diff --git a/codex-plonky2-circuits/src/circuits/sponge.rs b/codex-plonky2-circuits/src/circuits/sponge.rs index bb6c37f..dee3d58 100644 --- a/codex-plonky2-circuits/src/circuits/sponge.rs +++ b/codex-plonky2-circuits/src/circuits/sponge.rs @@ -50,7 +50,8 @@ pub fn hash_n_to_m_with_padding< if let Some(&input) = input_iter.next() { chunk.push(input); } else { - chunk.push(zero); // Should not happen, but pad zeros if necessary + // should not happen here + panic!("Insufficient input elements for chunk; expected more elements."); } } // Add the chunk to the state @@ -101,3 +102,73 @@ pub fn hash_n_to_m_with_padding< state = builder.permute::(state); } } + +/// hash n targets (field elements) into hash digest / HashOutTarget (4 Goldilocks field elements) +/// this function uses doesn't pad and expects input to be divisible by rate +/// rate is fixed at 8 for now. +pub fn hash_n_no_padding< + F: RichField + Extendable + Poseidon2, + const D: usize, + H: AlgebraicHasher +>( + builder: &mut CircuitBuilder, + inputs: Vec, +) -> HashOutTarget { + HashOutTarget::from_vec( hash_n_to_m_no_padding::(builder, inputs, NUM_HASH_OUT_ELTS)) +} + +pub fn hash_n_to_m_no_padding< + F: RichField + Extendable + Poseidon2, + const D: usize, + H: AlgebraicHasher +>( + builder: &mut CircuitBuilder, + inputs: Vec, + num_outputs: usize, +) -> Vec { + let rate = H::AlgebraicPermutation::RATE; + let width = H::AlgebraicPermutation::WIDTH; // rate + capacity + let zero = builder.zero(); + let one = builder.one(); + let mut state = H::AlgebraicPermutation::new(core::iter::repeat(zero).take(width)); + + // Set the domain separator at index 8 + let dom_sep_value = rate as u64 + 256 * 12 + 65536 * 8; + let dom_sep = builder.constant(F::from_canonical_u64(dom_sep_value)); + state.set_elt(dom_sep, 8); + + let n = inputs.len(); + assert_eq!(n % rate, 0, "Input length ({}) must be divisible by rate ({})", n, rate); + let num_chunks = n / rate; // 10* padding + let mut input_iter = inputs.iter(); + + // Process all chunks + for _ in 0..num_chunks { + let mut chunk = Vec::with_capacity(rate); + for _ in 0..rate { + if let Some(&input) = input_iter.next() { + chunk.push(input); + } else { + // should not happen here + panic!("Insufficient input elements for chunk; expected more elements."); + } + } + // Add the chunk to the state + for j in 0..rate { + state.set_elt(builder.add(state.as_ref()[j], chunk[j]), j); + } + // Apply permutation + state = builder.permute::(state); + } + // Squeeze until we have the desired number of outputs + let mut outputs = Vec::with_capacity(num_outputs); + loop { + for &s in state.squeeze() { + outputs.push(s); + if outputs.len() == num_outputs { + return outputs; + } + } + state = builder.permute::(state); + } +} diff --git a/codex-plonky2-circuits/src/circuits/utils.rs b/codex-plonky2-circuits/src/circuits/utils.rs index edbf131..e9cc8bd 100644 --- a/codex-plonky2-circuits/src/circuits/utils.rs +++ b/codex-plonky2-circuits/src/circuits/utils.rs @@ -12,19 +12,6 @@ use plonky2::plonk::circuit_builder::CircuitBuilder; // --------- helper functions --------- -/// Converts an index to a vector of bits (LSB first) with padding. -pub fn usize_to_bits_le_padded(index: usize, bit_length: usize) -> Vec { - let mut bits = Vec::with_capacity(bit_length); - for i in 0..bit_length { - bits.push(((index >> i) & 1) == 1); - } - // If index requires fewer bits, pad with `false` - while bits.len() < bit_length { - bits.push(false); - } - bits -} - /// assign a vec of bool values to a vec of BoolTargets pub fn assign_bool_targets< F: RichField + Extendable + Poseidon2, diff --git a/proof-input/input.json b/proof-input/input.json deleted file mode 100644 index 13fffc8..0000000 --- a/proof-input/input.json +++ /dev/null @@ -1,2001 +0,0 @@ -{ - "dataSetRoot": [ - "14161143179793787859", - "1691903010230079397", - "9568832890659339465", - "18308917234665720830" - ], - "entropy": [ - "1234567", - "0", - "0", - "0" - ], - "nCellsPerSlot": 512, - "nSlotsPerDataSet": 16, - "slotIndex": 3, - "slotRoot": [ - "782820483015656222", - "13741770675266915417", - "12011364774103093282", - "12538244492792303243" - ], - "slotProof": [ - "827439652992611846", - "16905769495525140780", - "16695068033037246276", - "17151630741232149889", - "3469569746364851618", - "18391056527690884511", - "8010039421125473150", - "3408023460182710126", - "12855129173382438132", - "10585118078362511618", - "18326498811560493459", - "4121357915895258498", - "16307052691205647327", - "14166812642918009396", - "6486276784733863693", - "17116992530026873102", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0" - ], - "cellData": [ - [ - "14789569642863473946", - "941115604410929181", - "31361293904870282", - "6503345653761458375", - "2903911528396826334", - "6044029841552756624", - "4557263042690550260", - "15867458954463837359", - "16571684271577036590", - "2980129729894478166", - "1039509218475726634", - "6491084340019274471", - "4172986249861803833", - "7503485694931772361", - "9626247388698198343", - "11355391016353042401", - "1441794231412831582", - "8040261688830621425", - "5431683370179516399", - "4880542066647046153", - "17258502750535312834", - "7305848399429926907", - "5054154159681057454", - "13744624717379751599", - "3106347465687278831", - "6638201553760229009", - "4535028246671615664", - "1452808370161587313", - "11230691627908229792", - "16687676472746460931", - "12721333893145575950", - "9584057002055940153", - "2916610256617811799", - "18104275162582413137", - "11364216408364670625", - "9356119933871436960", - "3221056536408199262", - "6880697719726633487", - "3777639228764731693", - "9061778693473594040", - "10280913451233476405", - "340016446049032732", - "12050894156277066403", - "9712767834236572964", - "6016825627234861967", - "10602477993944061705", - "9163174175801806086", - "8348477520656364760", - "15325858971469152010", - "1546992280051753395", - "7941349010379107079", - "13549091001768256079", - "17823919320785747047", - "3002298052827556830", - "534996631198050352", - "1586129140545833879", - "12486474847006607962", - "11875412160116415569", - "16968942497185621218", - "15711373610432138069", - "14236340679867569134", - "6961451330402910185", - "4947316787916914749", - "5104502678578640340", - "16973095791376389465", - "3309240419801156906", - "15505661335482410979", - "16860316447568774830", - "15840388172461660279", - "14984558276371667645", - "7394581393332782338", - "13446441861930367905", - "16572622789783479524", - "6064118266488496246", - "4242891908228013569", - "1247032236838487357", - "9795835309680739359", - "13779029677510339321", - "5582912158930703548", - "3149595256850435299", - "9941426800753685450", - "701556573677241187", - "18182898406704341737", - "8086088534380822361", - "16821790117662795896", - "7620850327363415866", - "2108408024829008114", - "5879549778661816259", - "13149287548041563718", - "17916733315684804570", - "12962323609533372321", - "11989318315919130618", - "13355027423360660478", - "1346778913402083967", - "391620772102151148", - "9285052314972667503", - "16276877534649055637", - "2481264380987652849", - "8754348888880580890", - "5391006879850311554", - "8649873529323161114", - "17550215493508796804", - "14427765938248400015", - "4737000137812503428", - "6754001179767544587", - "2136632252464429421", - "11898741247223399941", - "3932124882822370693", - "1237341168664840072", - "7598889280757555587", - "2748641511407736863", - "5132329980996861472", - "11457056337436545666", - "18405446091683502015", - "2596953114832782023", - "13439879122125760644", - "261813631547837038", - "3108525048877308429", - "16339947243960482382", - "2844869971807569361", - "3296078896575512352", - "934040528108618707", - "9687710880711680385", - "17536767732436892205", - "4338494506730339167", - "11761402313698153171", - "14454302808237256302", - "3294636990129347566", - "17830015569709198564", - "13132540792577790382", - "16864656680082872108", - "18311737825187343823", - "7895989396728028857", - "10488820967176609594", - "3730274124949874920", - "15112731697915428426", - "15653094278105569201", - "5079403962491400489", - "11626969013915342384", - "10098840259238639072", - "11254591034365470128", - "10349826683720123818", - "5108110918192933572", - "122989381911733940", - "4167323556997067941", - "15529573514570367484", - "8451739094448064791", - "14394419689351249134", - "14968430083361778647", - "7458127949449373903", - "5595913228968910608", - "1422146318077958864", - "339312744216281507", - "3110283773437321741", - "10844300897788724743", - "11877197000176772307", - "18038918631296135339", - "18395140132457887127", - "13312599491506888655", - "5895042579529082492", - "18184745097910756411", - "14661240628876563423", - "1131730308968456212", - "18402072392185960522", - "7641927239882870308", - "8386314804598436448", - "5119268662739132913", - "16580054063259861026", - "8581852479443866350", - "10151924357982600705", - "5289949950407063935", - "4084376947367555250", - "6795287861499147932", - "7859059390598764964", - "13402050035734259615", - "15640443029700215898", - "1366794653424830397", - "15750818004754719092", - "4191396076480787077", - "15786596991029571904", - "2588388614671082937", - "4313920998583652142", - "3078068051164307664", - "5935052706972703097", - "13739626416742167331", - "18222637837665551625", - "11004263875811364676", - "11075546384238097669", - "5612243577978886680", - "5999728220779485239", - "1690546386987703041", - "7756005749450822973", - "15517846417800750479", - "8276114584292561755", - "14987898327129210291", - "14000246565174314489", - "8689195930613178087", - "13712380848607174120", - "3170682782553487711", - "13878340341804285845", - "17403221328169584344", - "11449085426407881844", - "16393089309745155904", - "767687969449064664", - "10008494532767674825", - "7815947925385860200", - "14608652403216193075", - "11194051609007356113", - "6838516374624665442", - "7621554811672997281", - "18302714227421985262", - "8580424563090679613", - "13612668434621569507", - "10047464950580048126", - "9327183905322114118", - "16311059816857248294", - "8670263783730877124", - "5265725196186846914", - "10356623497247867081", - "17485715078212669032", - "3072927792501254960", - "10586070270128180449", - "1514201920861359980", - "13385023238101031743", - "11216875785937686746", - "12736270450928471486", - "12892465605902481433", - "15116572355797974840", - "8026904408987514558", - "10563730190071955714", - "11564683265565409942", - "2461632329468228982", - "11398255253588086198", - "15180070182808514236", - "10329335040972040510", - "4778515338246410000", - "10516265870176251389", - "8470280023130891383", - "3188930989334520742", - "3676254161486628498", - "17562666802684380851", - "2049826904216295675", - "11811782265395959053", - "16568322941178619817", - "3750388431679765519", - "8944409705617446777", - "17276833191845879531", - "5171866240208867011", - "14042995508792471939", - "2568944570716154188", - "1045386699306703112", - "16068322662706973540", - "17276634469426809792", - "16593240955474462677", - "7992614686681568274", - "4876036946462113449" - ], - [ - "16911767687697650545", - "16800840483536669233", - "9547047034445506774", - "11138456661552389470", - "10366425561055940906", - "16955318326082216165", - "3306388088939572381", - "5893105478388826911", - "13069347000763975843", - "5930317768090898947", - "17220782485676136155", - "11018735983433624703", - "7243569122920591200", - "143917609305538840", - "12478659420558087952", - "2364046171621702642", - "16376832494416475400", - "8410514438656220567", - "7741464322782317040", - "14090820392602959749", - "14454191556029633107", - "14132443891545266744", - "9778691635585682111", - "10329270589374575079", - "12594833913326855682", - "6722097361017681537", - "16230073419245233797", - "11897534188698654911", - "10039351038192012197", - "5296292516271943915", - "18081502949608206844", - "3311905015582044855", - "11974278269018679936", - "9186985254078136268", - "8258022974669654255", - "17175882538227290708", - "14261907041619976417", - "10382470271685591351", - "10442928912159956315", - "8867116291469848323", - "2367726753446276403", - "13473260822484874222", - "2966945432432675677", - "3099805655184603216", - "13623242862315624698", - "2986218418274771257", - "14993170753649367860", - "14294956525425572837", - "16556855370198099855", - "11662868431633583462", - "686017359451433348", - "13896650681683054317", - "15623027429332160432", - "16450860232388263011", - "6339321644088110408", - "12755049031650475112", - "7587100232152503962", - "17002710675036772132", - "290331452789538092", - "15489944383675797097", - "4742067791885988402", - "5106332772500688535", - "8550229513383741069", - "13095487810757585838", - "16820249371610878437", - "5011103252188621555", - "16047235482156197737", - "11892268763388404008", - "12591461590758212077", - "14709313883736125521", - "3830973355654267354", - "14385245197540959169", - "1895491091281306597", - "7911598983860796234", - "13726311464382372967", - "11318723130184472037", - "16076337112303388523", - "2144141175800178673", - "11125992048359878707", - "5994061660918818425", - "17844441694652370230", - "10853731534776367828", - "13666236091379625885", - "499221697685167903", - "6984174873510804884", - "7580149651305137885", - "16869595096482399787", - "17056899472971292381", - "6861309764975588524", - "3939688386732465041", - "15962138119609552950", - "9232427911589078426", - "6494513292462087446", - "5219601862022330396", - "4467956381050857588", - "1760622371281617022", - "3862817989779170171", - "9390796421790106827", - "8933022308553159181", - "3605138921585610340", - "5278594387874150364", - "12638566128526831490", - "7327038982070416553", - "7279061945076499667", - "13038709413115887430", - "2422318628274836894", - "13964219972944285036", - "10915688628857404721", - "3704089442437980345", - "10707231972423412036", - "15874052644634953170", - "17415353842646164900", - "8174671720709027437", - "16930927443395938164", - "14552863469754964485", - "10233266445023934436", - "1077136479670653500", - "10284402422300285198", - "10266618877081639935", - "7033335059270330883", - "6475206947494380562", - "5829047850122336852", - "18029426144814474845", - "6419638350657643270", - "2409933633942766089", - "14513547536629856535", - "10617840958843610037", - "10802176942785786453", - "5867835258901662047", - "25594705924577311", - "2352158568510543409", - "6747986568242832005", - "8404859955908573982", - "13358019802527749625", - "16780165043750300303", - "5004324466389876269", - "3278804563759602814", - "5133434962493859314", - "6585307209348002889", - "11343463973738830617", - "11271587990250660957", - "7211604016175847101", - "5719485895992142898", - "4982603613251774869", - "11616946468864556453", - "7968094808953975522", - "14786968526967547448", - "10209314770411602253", - "8951730671997925084", - "17012845988391040763", - "1327808432622214635", - "2700270607194010707", - "1849096009793543513", - "14786175175833959518", - "8155237757511836382", - "7647513086964976578", - "17665150077312592995", - "8893162376730596547", - "16658557977418736957", - "7883837896597059703", - "18023863824680777469", - "13478974355730137424", - "5766135805390490541", - "9500541199733045110", - "9534469569558384215", - "3807183301362798037", - "6532456165357803538", - "14351106892756980557", - "13022239725529941130", - "17905151140800536230", - "2832623084744565236", - "15430061920491581424", - "15266906777675552449", - "9288264168303796503", - "4339525544538684272", - "9592571932004695252", - "10876890077969001569", - "5553079580086521804", - "8822035665897184331", - "3199495363790917320", - "17371250809651225574", - "2333809222584395024", - "6660134993383244342", - "12181234020633817233", - "8709808735530170059", - "14311283771626044482", - "3392049986829384286", - "4596908573889225243", - "6612406589385228156", - "11708931732882174576", - "9961169229275854215", - "10765233733620056619", - "767212126000523913", - "6405881724925807156", - "1894045306985164945", - "7846660824711253697", - "3561536111838519930", - "8543826743315032343", - "3579042591845986452", - "1287145797576780255", - "12689862387034138971", - "14830744567765199595", - "9515110912031278707", - "15267811573808294461", - "14389905074154812270", - "9508364825672561186", - "2848445617440657793", - "4150128332499800789", - "12481344016944889993", - "7786574362262627532", - "13078279735705139946", - "16670846470921269483", - "12009778506776148746", - "10421401075275525898", - "16037930202084309384", - "7854128525880955000", - "15195125531889811473", - "6155107493138159722", - "1815207394631387061", - "3651898969218073434", - "2527772806178406220", - "9514524434069620081", - "8087079481075785679", - "1806459126250938031", - "5050167554713690345", - "15077715603274102085", - "2208184209639987096", - "13851422497589763646", - "1194492743884513129", - "3412336631122003228", - "12550587840869476212", - "3686478846494750795", - "16942278887921547530", - "4974433715314846007", - "15403087407427801323", - "12581139325444584910", - "9691710653210731286", - "18240453118579748809", - "2285753809759372063", - "16054528992284581986", - "10860159893079532825", - "10901754911335806485", - "8124256542743046101", - "7883051165503393509", - "5801131326105384440", - "2692853023341052986", - "9506591785106266016", - "13520893576496525068", - "7578467447601046861", - "4763340116804307458", - "8188622596277552508", - "8627246523966208195", - "10357093068742276144", - "935869545698107018", - "1161468965978002329", - "6684432639677233660" - ], - [ - "1649538581604157472", - "2190945867336261317", - "2189903204845409329", - "6750673102633404529", - "2128245357334123519", - "3182574931662396926", - "16323009484150779482", - "4977726895688031127", - "4553243784217615595", - "2580021991914876847", - "9401663877528765977", - "8863599565663263543", - "17058885298627974646", - "3395909082522159145", - "3532863501711731081", - "13169881929982842420", - "3582865613747503373", - "14314256754256104858", - "3060747565482436287", - "11251273002789233238", - "9106674754288203937", - "10222117544765484383", - "3717873038788449905", - "9545675983462535390", - "698214228950619125", - "17094750427280477562", - "3314876409206979085", - "1279889661292084452", - "13895784739041402825", - "7560078641467611551", - "9071529187603531644", - "15471210482266984165", - "17915455513923182281", - "15861987213743813061", - "17447339783584237845", - "8788406687814163412", - "3931395076465729398", - "12491397485100880931", - "3267066092188547682", - "16820481131913076645", - "1611066430076644592", - "13621503209161918274", - "14329492234510653433", - "1537296730545964531", - "13626114495187430069", - "17260435902162017512", - "14493380189569941538", - "6869511069930894883", - "17969570858498667261", - "17290256289026716283", - "1986148926179384694", - "18317392091111979781", - "12407118366788901202", - "16871437516301202007", - "7032078510854173257", - "15509855590316563579", - "5322660238234653645", - "17961477661488146914", - "4548956954081112226", - "8112824280610963727", - "8880069565453849491", - "7117702799679444108", - "6691182374519806724", - "13537071895019809373", - "7672725486307622467", - "3566883622799126792", - "5236213206549940632", - "9146294278484816299", - "17620424985652587575", - "9722447411200643032", - "7633962389854927250", - "12068899748399174887", - "2364672480180029920", - "7445773486796325782", - "10505796355378030415", - "11459242542316564974", - "17382241307988830991", - "13890207594544061972", - "14023922103486290296", - "11573057365630722995", - "11302680936127544864", - "12994052542045970263", - "96482053269407143", - "2796449457878088217", - "11319106641151108951", - "969290842302183129", - "13157248727199671828", - "10559395688882908375", - "8763441748459808626", - "882102287513226622", - "9897850672268210089", - "5215870828501618929", - "15849170011485626039", - "387647350698160607", - "11559536842758327137", - "9051821426286990946", - "17094138224361310278", - "7227723650003103614", - "445783653885900367", - "14709172130942241053", - "6817390568440776104", - "17508526009075021716", - "10809995994610464558", - "15368485741025924022", - "6136372460777843480", - "13823229779970729830", - "15321265854906795840", - "1964136028415336359", - "16856869495406676842", - "16422289584784708368", - "16629032907783147704", - "10237686923317893869", - "975786021176516212", - "16442429296181077627", - "15747173091433253877", - "10542155895879662546", - "17063010338485105007", - "17732960773623648433", - "1226404432346154723", - "8962614411840225996", - "1285622203102939223", - "6618637399529750703", - "5335508984440832794", - "13588270964773469214", - "13142803504965529094", - "16084702041738289204", - "18059988993441994783", - "9147353642769347432", - "11279819137536537068", - "16604408758708426645", - "16852226307828135410", - "16397246189246853270", - "14948595402209828144", - "5822761619921442321", - "17300195564678932039", - "17273621440518318927", - "16699976077071667862", - "2228544476593621874", - "17483166353969135", - "5342143343519138731", - "6635851765791339092", - "1137994056749568821", - "4351170705541457131", - "663253671305672131", - "10421372693352121445", - "15000672627929448839", - "7962666306441649079", - "597431098064770243", - "16368247805661752341", - "2122292446524020839", - "14657974544341129734", - "1979379927675580039", - "14078957161053039765", - "12755729045138876121", - "18346118527096549836", - "5843313642452500585", - "12184824699681123281", - "10957263001716484558", - "12970188008167650279", - "6329603025636387155", - "10657831953022579644", - "12556762515446920644", - "4349214870780505627", - "12422122812208134800", - "15430624482016806379", - "769686399872381083", - "15405212268597303265", - "7447796036347599728", - "16660193598365322960", - "7159047888359026542", - "14688738362126788203", - "8897497377306211690", - "13978772950070702790", - "9815225837099332074", - "817181872994983859", - "99325565025409359", - "11853797968083024087", - "9759160433200378089", - "5862549027676025190", - "7227636216620289924", - "9879809457395943477", - "12680841851271726914", - "8580320598528201698", - "17272515411766728450", - "8425236622824562609", - "15976407264633340878", - "15210384292057582748", - "18157382502489189366", - "10209341980683564975", - "2844328782572674443", - "7293528009405225922", - "13803013738757026919", - "15813742836484436248", - "17601162759345660239", - "7456986042698608133", - "12444204373911963955", - "2871954454948476270", - "8301356561668908607", - "10498030904944859117", - "940320366647045906", - "17745468641095906177", - "7810218972659648588", - "15211285062227163255", - "17757946969940345494", - "4282866266912613782", - "1897924034669029251", - "13238229741579488842", - "4956974251681554192", - "4946007047032253053", - "6407439404785083938", - "2941198060298024849", - "9850466149770135512", - "4163434130677537997", - "12094711786455569316", - "15834072138620418370", - "3057456773539959244", - "14407694936471297157", - "2066615264354481638", - "18305445662886205843", - "14190714304706171040", - "13652389135364141100", - "17845806164944733497", - "9920892511103488707", - "2082176654455637494", - "9629447770810608004", - "1024596743476912636", - "5128074128828001985", - "12503726218838534638", - "6080238667441069620", - "15012520213119688540", - "14487013176640393377", - "2952551591835979426", - "2982382916386248435", - "3926040685037760413", - "17533286170323515203", - "9557583758161477405", - "14356568126004562275", - "18001861506397860078", - "7034323943418016483", - "7269377475913384096", - "1022812779955554440", - "15111799055001123261", - "18444322753050729845", - "16678885789229309776", - "13241072287448437488", - "7667906035793502484", - "5177674149124805439", - "8536571724057519495", - "3210451375014585197", - "17274230581761523505", - "8709157080168692708", - "2862289027298664900", - "10407243095659000367", - "18071909287850569483", - "17881384630927795438", - "16604282691797180954" - ], - [ - "11158617876796182367", - "9087682946628781857", - "13523261239249378141", - "15827915555373576655", - "9262750204996517080", - "8024044100248875957", - "8809935746044743226", - "2420169539594806852", - "9511178069329971713", - "2165731211478527016", - "13500793646750044199", - "15855749386720726567", - "2387027328566681173", - "14658664632587997547", - "1359414984296540818", - "3928986743251244634", - "3883512008432968168", - "4427351014030365246", - "11132574503037078991", - "6974688388392721638", - "14736075515759675541", - "10110550106319047992", - "599772665297787563", - "14861972646103992662", - "467265336960199555", - "11761134041823553950", - "4214683051322132529", - "10240283974339258299", - "17726328076109119628", - "8636286019135297310", - "7419164961907013479", - "121986162065955553", - "7458038471368618803", - "7349653881718466007", - "10149251233264790479", - "14273707597016021240", - "10387100798812799750", - "2258056140093562379", - "7128419070075123128", - "5275714604681357029", - "4002249318986442649", - "601524530688047472", - "6827535929157926561", - "13607779383643524050", - "17678266888533883521", - "8212592250000750235", - "3058284765086898690", - "5684139866262203683", - "2920218021539509092", - "4059362548040261158", - "14207613335723119103", - "16422595166957626726", - "3899969005214944741", - "17063274448616385977", - "7973094300187060157", - "6179803604039378277", - "8284549276534963558", - "556964194144609350", - "61276780466559434", - "16056966261933274277", - "16113208558364777883", - "8794337138007680668", - "9036628237927474545", - "3503116861535909481", - "4809795667011654245", - "971073753950642324", - "17640187961393515770", - "15785572301746631725", - "11168265249102815117", - "12142549862729950049", - "2198771697011054930", - "15400952011194223782", - "4329439674411870228", - "14736316801436137217", - "14319313152657758877", - "2226536629546084942", - "16867398040603265316", - "11049305754935960587", - "9252550961936388359", - "16989069244835832315", - "4651052612443834619", - "5957006625414687321", - "5514811467041117322", - "10369060938241062477", - "10798216438040497570", - "6188476940753794656", - "6308026381054344337", - "14890660788993753270", - "3000837770380636032", - "7776584852719816034", - "2050139700818523200", - "8558728603558907443", - "16091291465736854341", - "3655786891166224233", - "10181943858875925206", - "5159775549992303947", - "18127250069814608436", - "12624992833336310436", - "1859686865690485770", - "14235198349777988044", - "15556508232559901544", - "9053084198552608130", - "5100341905537285260", - "11812062877650651555", - "17942494357535735384", - "16742616129737978538", - "7639402316365989569", - "1663251005842413731", - "440040191556567544", - "8916007688543922761", - "5725297247975748170", - "12131358373118883253", - "6017124992480147241", - "6006811035330089767", - "18247051230679732846", - "16360482109454416855", - "15997971622376017087", - "13502647901972449299", - "2638680377430957146", - "17846087042375737654", - "5790441472821082981", - "2944113745463303810", - "15451477656649567783", - "4975719260330435983", - "14435265086753009729", - "14822840027766529570", - "3352621978802460455", - "13713112683648152584", - "15040725242882550119", - "12325968380422000320", - "1143715793852725044", - "6730056790438372337", - "17242811202186222459", - "11714736259999128780", - "1195523818666618258", - "5253085649501826504", - "15703869905884920828", - "11485597385654404805", - "5126020972629771787", - "8433734528292780562", - "9636245964727968267", - "4235264981896675387", - "4052882399531800535", - "17121980556668344054", - "1262472351080161056", - "1323620601444380736", - "8505552099467921631", - "7809696186190361997", - "12696846519290837316", - "233290706391760088", - "10391362485114624507", - "16520841819423502673", - "2428246865162942399", - "12165784221332321148", - "12895459484502953764", - "17786813136507541302", - "10030581827580433381", - "3959502842376045983", - "6382016963504978940", - "2004295103889199729", - "17906023168952779623", - "15900199295420848797", - "2776967413078463757", - "10549824835152408103", - "3924589954468094124", - "423598112663544215", - "18277175851448942058", - "2419700558439594257", - "9349021954534491934", - "17759375284175584661", - "11729536065451201079", - "18298193526320832358", - "4036541797465258438", - "18084475260052575747", - "8375724013392833746", - "2130618831424402957", - "11019311516101745537", - "915532887357442868", - "12183140713967544959", - "13730738752301206476", - "9041362531165233200", - "16795468732522623065", - "4251590257683173743", - "532184617918046639", - "7462376984910047628", - "1929209410322331399", - "629667364803732054", - "5860834161385407164", - "5547428541013612050", - "10493365575397738723", - "2374053973752899802", - "759467362835155942", - "3750195624946189154", - "9534934780658427721", - "15021152804999490349", - "14409026520085319279", - "7179567316515061915", - "10349629902626298135", - "17655151173476036054", - "7219424738692286957", - "5326915645755163854", - "6377912794027137697", - "8421820338576795059", - "17956341041684015149", - "1336923202661195186", - "6843327642299555640", - "12855971279942979212", - "8830376739111054064", - "13026149848112236467", - "16857607671986379533", - "9716141543984771018", - "6797156688806470481", - "2890989882014970733", - "388493802107042141", - "11484562894957595549", - "1303103300311822479", - "15032186467071366160", - "5136087891367498350", - "4497858013993524435", - "17142627955785993408", - "4614954839505786416", - "5107698604669779543", - "13242717140432197185", - "6845144517730512374", - "2120559807342640709", - "14366312017892427215", - "6997965425194992468", - "17890692189297576275", - "8542384088253460635", - "2788692424787388215", - "7825531750150036097", - "1918869105176697150", - "857519066758040260", - "18225130420306664231", - "6420467296355777864", - "67441222601969360", - "4161707302821021336", - "16743910487250028589", - "4129816137294120259", - "13277114426788545803", - "9910240257593387667", - "16952653977594402889", - "11402071663227351449", - "7906936658070600935", - "8751063268998216464", - "4232792840975381480", - "7273531348938786172", - "18285298526047783153", - "11621217468978394938", - "1637436997546258053", - "3506318426500531289", - "11602339800058773700", - "1585590509922288902", - "10272692936827804744", - "8888141354560131216", - "5159038666292494181" - ], - [ - "11350751849184099293", - "10900827693834277418", - "439388963145404532", - "13521959437501142396", - "2873454458144416776", - "2494699702334174888", - "14064391273745409633", - "5037623524431148941", - "5002070161803780939", - "13335742794774545515", - "8037659038785731777", - "8379991202548077531", - "8165077422143768771", - "9624242913781656348", - "5292604165512164526", - "4214601810754195670", - "15747334119752588507", - "10405287707095444813", - "4610085272533900462", - "4216483904112780599", - "3508213323871897987", - "15147434363539286233", - "7039835477045446950", - "6267848860527096000", - "12557164041453856961", - "485962112399396285", - "8405362789831159986", - "10171644387539529307", - "7646104574524565771", - "16899149906290667476", - "6706155290595359412", - "7687373536950343201", - "9352220011741150011", - "2874578854239859550", - "8687971288728298994", - "3998545562828966996", - "4365773927497922381", - "5839746122643682368", - "14791971216024413514", - "2004000520484889923", - "4997062711087837957", - "6074081199278021128", - "11753559443119571832", - "6571228815112508081", - "7917640799329546848", - "14227578312053218601", - "4211495198812517039", - "5617898145740026624", - "11263205183010933212", - "15799193497759773455", - "10016078883360850809", - "2419702257034664507", - "2915769593668599487", - "11392885571076472050", - "15443526755867138594", - "10114246627381353264", - "296560332993462271", - "13230282730881472747", - "17607647917451957602", - "13075730543952714155", - "234930954466926721", - "901982446281675282", - "14674140241236333883", - "5965985150445310510", - "4840465791233653540", - "10610076965630129382", - "12325664410842133789", - "3650709638296379891", - "9551944745655227441", - "14172522792761505355", - "7710368800014381349", - "14429130048440647727", - "11433890275844225056", - "10640942724964059822", - "6212893758857647156", - "14825971912898831363", - "17969718014348924077", - "14932039227614479618", - "1901880478437178757", - "16421134556705637484", - "7688648304697823550", - "6821559070023584033", - "14574440059148997881", - "15607640905391692512", - "13326309811368596526", - "342368914502173939", - "1325502531743133097", - "748859114951866375", - "17881885308569679361", - "14216935330975306867", - "9019172089398032884", - "3680856755754235986", - "3090927820072124254", - "15453041959585266345", - "4305040364281440445", - "16672919489413400925", - "7021004524081262401", - "11390685283806016424", - "13927529805783136457", - "14458735486512915944", - "10498666199044553718", - "15434392330452138337", - "13864868386099465696", - "14408788332135663584", - "13447282565773736098", - "5592704651698047547", - "2143220891421940636", - "12198995788319312621", - "8320393851575648978", - "12503485213765948674", - "15093830567207277799", - "17238470273025646183", - "16531420907370321345", - "9815401631228039149", - "4625388174975930388", - "10797918955373984352", - "136365345161585446", - "13934727723249086259", - "14319955257815757658", - "4837341060869820336", - "6254123020970513421", - "11753329972626173797", - "1434573250528593569", - "4433879498270283080", - "5907374086021321658", - "2680372903381997232", - "2814515755918320438", - "1883188584859025843", - "2428309339847512709", - "5681434553424063102", - "5935393383047093857", - "3738099288480444838", - "9207909704195674974", - "12570860082483952937", - "7270740992383420387", - "1547843615800623775", - "12843270942205635604", - "16346009733362387854", - "14293356061449768599", - "5356630609095889291", - "1228274638313686466", - "17214494197885866139", - "8866295371743464278", - "4292490886162829853", - "17341886026887261368", - "9841191132116337540", - "12300915206835872712", - "13677136857347440233", - "9518403177520824591", - "6327687374737106162", - "12833763563882685844", - "16528236774301279028", - "10611756459961189063", - "14011403046566848050", - "3544528581687346984", - "7355323796459692030", - "8265642943646127929", - "3254656351567168406", - "17332872086513057297", - "11726502324167902580", - "9149912035726590264", - "14073100535529389299", - "6517161646123146730", - "17465180686610631730", - "15760429455888218616", - "14547873047623934052", - "16247912291244958228", - "15380908812609812210", - "6594653671859160047", - "8460553403041859769", - "15077572526713530315", - "5023845453299603993", - "2647408565284935124", - "6415437753467537607", - "399209428191750084", - "10171049331346493508", - "504721519160201536", - "3532143023044823526", - "8634413731200456205", - "13779608451864102379", - "12622254617340912512", - "1689159373164138503", - "3830751578095738340", - "72071321812746117", - "1755466640342037807", - "11890759603370141856", - "3636649220350489694", - "1469462648749119352", - "7112001874470004601", - "13637969873865699674", - "4679664644261884858", - "16519576635601171920", - "15883308820009136344", - "15038250008091880516", - "10073276681622990647", - "2315736129378689783", - "2841534945672279093", - "10750606055792309360", - "4611823491133959844", - "3405211080247856665", - "9168778499152190871", - "9619168874779941382", - "15587611413706726817", - "6672922228868288797", - "15536339229384171288", - "3654534191624725740", - "6168394719362233219", - "12572360009678589900", - "5873267088425429430", - "3725547269208715970", - "187204220091081003", - "10238269284671594290", - "10159478274235755469", - "16853910712340381667", - "11237885161090553490", - "6910771539020384071", - "1851296766351326323", - "13086131837071954161", - "4078627780772844771", - "11414060107098664002", - "17782323568553369702", - "1543066992264202531", - "8730076713478971100", - "11083957660666097776", - "13487534054955136575", - "290263590575998921", - "13827499467937707244", - "13238620973046151989", - "2181694802331979679", - "592544803046311395", - "2103199700047518468", - "15226319346165534793", - "1312425355627229035", - "16978209732517470712", - "13909374337434953970", - "3172962602719674736", - "15617413715278415388", - "9358160459053193702", - "10907751143976571715", - "10848719554714486186", - "15168730460575504395", - "14806621060718153111", - "6163355349606761410", - "14801793702671584463", - "12163956359134216506", - "6062985620399584088", - "13878042128265997040", - "1628211088049142766", - "8255034086292631526", - "13269786317364767422", - "6144774042636061758", - "5676748134309525866", - "2464962859169111838", - "1835337668948833949", - "14369638829913588150", - "947361488230010443" - ] - ], - "merklePaths": [ - [ - "863216650107612727", - "8202529050335378059", - "3324434481355450201", - "3188187506824438980", - "11791245433858620020", - "3388384482206495117", - "6698791309394206922", - "12791711529634297509", - "6830225037355046499", - "5618052678267001019", - "14279351598490411542", - "12551116843767515810", - "6742948339853552501", - "14382771067761197733", - "5285823155889716490", - "12827034597396599982", - "14084189182319896378", - "11362199115326396242", - "15338679373422257095", - "2299692235188891716", - "11169025807860780802", - "1720682275880634423", - "7415966235300712701", - "3000625756079774853", - "12466887614661990923", - "3815572732364241757", - "6426000878080062409", - "10417451990987089542", - "8200310954436329515", - "18037123639860462119", - "2491066640052841237", - "12066731717969973403", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ], - [ - "13743470443781562229", - "3214665171899026693", - "6773640072077534317", - "14475046362204822635", - "14698684332668519977", - "12697183198628027522", - "9913839389305180315", - "17738287769298728780", - "5821873576649301688", - "2799063848808622064", - "11394448541296220915", - "1649373941486512716", - "7745498169363485864", - "1101430375002578510", - "3565132335380553758", - "5599923857088499309", - "10192517641811120506", - "14239628798272794395", - "7186204692940912918", - "4924295535911750317", - "15245449386468723948", - "11021057985345661417", - "10186076975512359108", - "13780509879349205899", - "5063403498525365521", - "12504174145448695186", - "15286411983806561283", - "2976053552530953877", - "10137946222981830099", - "1980333644985838471", - "17211801805050030978", - "16734929714833362423", - "14515058577901309860", - "12506611635058563774", - "3574257472005746426", - "9613533920947354848", - "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", - "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" - ], - [ - "4603564720696099511", - "989557075300076617", - "3892840484699996315", - "11339294980634340862", - "17614706484875770862", - "17540412432543426101", - "15598575003712057373", - "17073295190913465783", - "4878394558137877041", - "1650026209031762905", - "15976553990323278513", - "1875163916204600570", - "9742401159558262939", - "17183062473949279049", - "7909385412677778672", - "11842233347501647604", - "8755278064464564108", - "13828049997347637378", - "1400169486823588040", - "14895238478654166647", - "9373649302645823349", - "2958359895926813828", - "10054722976504387349", - "10695735513675984746", - "7668239193207099627", - "3979386198028698594", - "1710187412206670227", - "3982586635040871826", - "8200310954436329515", - "18037123639860462119", - "2491066640052841237", - "12066731717969973403", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ], - [ - "12875754889036309088", - "11867984176355570005", - "10042682110538358305", - "17084322398457183430", - "3377900705582563276", - "1982221105421886131", - "6097690731838857756", - "15496883225289478987", - "9145911179866453925", - "12585604228569105450", - "343265191919280759", - "13565679419794182627", - "17366232321789233875", - "16852700503700870176", - "730850571718316369", - "12031631487847360214", - "4462291038833183869", - "4708641281579664053", - "5711342483792347005", - "4656442006187808436", - "11515521488912705697", - "16295795390926237281", - "2914928737642585449", - "12592088379191954513", - "15867961070451434678", - "8967413869708077250", - "10964960846033696709", - "4697187747965183510", - "6924720603356631558", - "838725502648446473", - "11607188897176127791", - "15533341203949035687", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ], - [ - "2475173876939406334", - "14608888219425596533", - "1527475906575672781", - "5821416626139893933", - "10258218397252277209", - "1339182607184125141", - "5782831183580631972", - "12836688993533514910", - "1060070560840952806", - "11856276770801361526", - "15546964505876484086", - "12076571008836715317", - "17660343830540941868", - "16846017107056021795", - "10602973949794420622", - "11299619973135348484", - "2198722487028149641", - "6672668578494557108", - "5073149367636221866", - "6648636582422285880", - "17873018913418528410", - "2937100465232758043", - "11861890930030376148", - "7847981189431793010", - "7668239193207099627", - "3979386198028698594", - "1710187412206670227", - "3982586635040871826", - "8200310954436329515", - "18037123639860462119", - "2491066640052841237", - "12066731717969973403", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ] - ] -} \ No newline at end of file diff --git a/proof-input/src/gen_input.rs b/proof-input/src/gen_input.rs index 9915f2d..9a6378f 100644 --- a/proof-input/src/gen_input.rs +++ b/proof-input/src/gen_input.rs @@ -4,21 +4,21 @@ use plonky2_field::extension::Extendable; use plonky2_field::types::Field; use plonky2_poseidon2::poseidon2_hash::poseidon2::Poseidon2; use codex_plonky2_circuits::circuits::params::{CircuitParams, HF}; -use crate::params::Params; -use crate::utils::{bits_le_padded_to_usize, calculate_cell_index_bits, usize_to_bits_le_padded}; +use crate::params::TestParams; +use crate::utils::{bits_le_padded_to_usize, calculate_cell_index_bits, usize_to_bits_le}; use codex_plonky2_circuits::merkle_tree::merkle_safe::{MerkleProof, MerkleTree}; use codex_plonky2_circuits::circuits::sample_cells::{Cell, MerklePath, SampleCircuit, SampleCircuitInput}; use plonky2::iop::witness::PartialWitness; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_data::CircuitConfig; -use crate::sponge::hash_n_with_padding; +use crate::sponge::{hash_bytes_no_padding, hash_n_with_padding}; -/// generates input witness (SampleCircuitInput) from fake data +/// generates circuit input (SampleCircuitInput) from fake data for testing /// which can be later stored into json see json.rs -pub fn gen_witness< +pub fn gen_testing_circuit_input< F: RichField + Extendable + Poseidon2, const D: usize, ->(params: &Params) -> SampleCircuitInput{ +>(params: &TestParams) -> SampleCircuitInput{ let dataset_t = DatasetTree::::new_for_testing(¶ms); let slot_index = params.testing_slot_index; // samples the specified slot @@ -49,20 +49,20 @@ pub fn gen_witness< } } -/// verifies the witness. +/// verifies the given circuit input. /// this is non circuit version for sanity check -pub fn verify_witness< +pub fn verify_circuit_input< F: RichField + Extendable + Poseidon2, const D: usize, ->(witness: SampleCircuitInput, params: &Params) -> bool{ - let slot_index = witness.slot_index.to_canonical_u64(); - let slot_root = witness.slot_root.clone(); +>(circ_input: SampleCircuitInput, params: &TestParams) -> bool{ + let slot_index = circ_input.slot_index.to_canonical_u64(); + let slot_root = circ_input.slot_root.clone(); // check dataset level proof - let slot_proof = witness.slot_proof.clone(); - let dataset_path_bits = usize_to_bits_le_padded(slot_index as usize, params.dataset_depth()); + let slot_proof = circ_input.slot_proof.clone(); + let dataset_path_bits = usize_to_bits_le(slot_index as usize, params.dataset_max_depth()); let last_index = params.n_slots - 1; - let dataset_last_bits = usize_to_bits_le_padded(last_index, params.dataset_depth()); - let dataset_mask_bits = usize_to_bits_le_padded(last_index, params.dataset_depth()+1); + let dataset_last_bits = usize_to_bits_le(last_index, params.dataset_max_depth()); + let dataset_mask_bits = usize_to_bits_le(last_index, params.dataset_max_depth()+1); let reconstructed_slot_root = MerkleProof::::reconstruct_root2( slot_root, dataset_path_bits, @@ -72,15 +72,15 @@ pub fn verify_witness< params.max_slots.trailing_zeros() as usize, ).unwrap(); // assert reconstructed equals dataset root - assert_eq!(reconstructed_slot_root, witness.dataset_root.clone()); + assert_eq!(reconstructed_slot_root, circ_input.dataset_root.clone()); // check each sampled cell // get the index for cell from H(slot_root|counter|entropy) - let mask_bits = usize_to_bits_le_padded(params.n_cells -1, params.max_depth); + let mask_bits = usize_to_bits_le(params.n_cells -1, params.max_depth); for i in 0..params.n_samples { let cell_index_bits = calculate_cell_index_bits( - &witness.entropy, + &circ_input.entropy, slot_root, i + 1, params.max_depth, @@ -88,9 +88,8 @@ pub fn verify_witness< ); let cell_index = bits_le_padded_to_usize(&cell_index_bits); - println!("cell index ={}", cell_index); - let s_res = verify_cell_proof(&witness, ¶ms, cell_index, i); + let s_res = verify_cell_proof(&circ_input, ¶ms, cell_index, i); if s_res.unwrap() == false { println!("call {} is false", i); return false; @@ -103,10 +102,10 @@ pub fn verify_witness< pub fn verify_cell_proof< F: RichField + Extendable + Poseidon2, const D: usize, ->(witness: &SampleCircuitInput, params: &Params, cell_index: usize, ctr: usize) -> anyhow::Result { - let mut block_path_bits = usize_to_bits_le_padded(cell_index, params.max_depth); +>(circ_input: &SampleCircuitInput, params: &TestParams, cell_index: usize, ctr: usize) -> anyhow::Result { + let mut block_path_bits = usize_to_bits_le(cell_index, params.max_depth); let last_index = params.n_cells - 1; - let mut block_last_bits = usize_to_bits_le_padded(last_index, params.max_depth); + let mut block_last_bits = usize_to_bits_le(last_index, params.max_depth); let split_point = params.bot_depth(); @@ -114,13 +113,12 @@ pub fn verify_cell_proof< let slot_path_bits = block_path_bits.split_off(split_point); // pub type HP = >::Permutation; - let leaf_hash = hash_n_with_padding::(&witness.cell_data[ctr].data); - // HF::hash_no_pad() + let leaf_hash = hash_bytes_no_padding::(&circ_input.cell_data[ctr].data); - let mut block_path = witness.merkle_paths[ctr].path.clone(); + let mut block_path = circ_input.merkle_paths[ctr].path.clone(); let slot_path = block_path.split_off(split_point); - let mut block_mask_bits = usize_to_bits_le_padded(last_index, params.max_depth+1); + let mut block_mask_bits = usize_to_bits_le(last_index, params.max_depth+1); let mut slot_mask_bits = block_mask_bits.split_off(split_point); block_mask_bits.push(false); @@ -143,7 +141,7 @@ pub fn verify_cell_proof< params.max_depth - params.bot_depth(), ); - Ok(reconstructed_root.unwrap() == witness.slot_root) + Ok(reconstructed_root.unwrap() == circ_input.slot_root) } @@ -151,7 +149,7 @@ pub fn verify_cell_proof< pub fn new_random_cell< F: RichField + Extendable + Poseidon2, const D: usize, ->(params: &Params) -> Cell { +>(params: &TestParams) -> Cell { let data = (0..params.n_field_elems_per_cell()) .map(|_| F::rand()) .collect::>(); @@ -168,7 +166,7 @@ pub struct SlotTree< pub tree: MerkleTree, // slot tree pub block_trees: Vec>, // vec of block trees pub cell_data: Vec>, // cell data as field elements - pub params: Params, // parameters + pub params: TestParams, // parameters } impl< @@ -176,7 +174,7 @@ impl< const D: usize, > SlotTree { /// Create a slot tree with fake data, for testing only - pub fn new_default(params: &Params) -> Self { + pub fn new_default(params: &TestParams) -> Self { // generate fake cell data let cell_data = (0..params.n_cells) .map(|_| new_random_cell(params)) @@ -185,10 +183,10 @@ impl< } /// Create a new slot tree with the supplied cell data and parameters - pub fn new(cells: Vec>, params: Params) -> Self { + pub fn new(cells: Vec>, params: TestParams) -> Self { let leaves: Vec> = cells .iter() - .map(|element| hash_n_with_padding::(&element.data)) + .map(|element| hash_bytes_no_padding::(&element.data)) .collect(); let zero = HashOut { elements: [F::ZERO; 4], @@ -255,7 +253,7 @@ pub struct DatasetTree< > { pub tree: MerkleTree, // dataset tree pub slot_trees: Vec>, // vec of slot trees - pub params: Params, // parameters + pub params: TestParams, // parameters } /// Dataset Merkle proof struct, containing the dataset proof and sampled proofs. @@ -276,7 +274,7 @@ impl< const D: usize, > DatasetTree { /// Dataset tree with fake data, for testing only - pub fn new_default(params: &Params) -> Self { + pub fn new_default(params: &TestParams) -> Self { let mut slot_trees = vec![]; let n_slots = 1 << params.dataset_depth_test(); for _ in 0..n_slots { @@ -286,7 +284,7 @@ impl< } /// Create data for only the specified slot index in params - pub fn new_for_testing(params: &Params) -> Self { + pub fn new_for_testing(params: &TestParams) -> Self { let mut slot_trees = vec![]; // let n_slots = 1 << params.dataset_depth(); let n_slots = params.n_slots; @@ -321,7 +319,7 @@ impl< } /// Same as default but with supplied slot trees - pub fn new(slot_trees: Vec>, params: Params) -> Self { + pub fn new(slot_trees: Vec>, params: TestParams) -> Self { // get the roots of slot trees let slot_roots = slot_trees .iter() @@ -344,7 +342,7 @@ impl< /// note: proofs are padded based on the params in self pub fn sample_slot(&self, index: usize, entropy: usize) -> DatasetProof { let mut dataset_proof = self.tree.get_proof(index).unwrap(); - Self::pad_proof(&mut dataset_proof, self.params.dataset_depth()); + Self::pad_proof(&mut dataset_proof, self.params.dataset_max_depth()); let slot = &self.slot_trees[index]; let slot_root = slot.tree.root().unwrap(); @@ -355,7 +353,7 @@ impl< entropy_as_digest.elements[0] = entropy_field; // get the index for cell from H(slot_root|counter|entropy) - let mask_bits = usize_to_bits_le_padded(self.params.n_cells-1, self.params.max_depth+1); + let mask_bits = usize_to_bits_le(self.params.n_cells-1, self.params.max_depth+1); for i in 0..self.params.n_samples { let cell_index_bits = calculate_cell_index_bits( &entropy_as_digest.elements.to_vec(), @@ -407,17 +405,17 @@ mod tests { // Test sample cells (non-circuit) #[test] fn test_gen_verify_proof(){ - let params = Params::default(); - let w = gen_witness::(¶ms); - assert!(verify_witness::(w,¶ms)); + let params = TestParams::default(); + let w = gen_testing_circuit_input::(¶ms); + assert!(verify_circuit_input::(w, ¶ms)); } // Test sample cells in-circuit for a selected slot #[test] fn test_proof_in_circuit() -> anyhow::Result<()> { - // get witness - let params = Params::default(); - let witness = gen_witness::(¶ms); + // get input + let params = TestParams::default(); + let circ_input = gen_testing_circuit_input::(¶ms); // Create the circuit let config = CircuitConfig::standard_recursion_config(); @@ -425,7 +423,7 @@ mod tests { let circuit_params = CircuitParams { max_depth: params.max_depth, - max_log2_n_slots: params.dataset_depth(), + max_log2_n_slots: params.dataset_max_depth(), block_tree_depth: params.bot_depth(), n_field_elems_per_cell: params.n_field_elems_per_cell(), n_samples: params.n_samples, @@ -439,7 +437,7 @@ mod tests { let mut pw = PartialWitness::new(); // assign a witness - circ.sample_slot_assign_witness(&mut pw, &mut targets, witness); + circ.sample_slot_assign_witness(&mut pw, &mut targets, circ_input); // Build the circuit let data = builder.build::(); diff --git a/proof-input/src/json.rs b/proof-input/src/json.rs index 39bb568..ebd2956 100644 --- a/proof-input/src/json.rs +++ b/proof-input/src/json.rs @@ -2,24 +2,25 @@ use anyhow::{anyhow, Error, Result}; use serde::{Deserialize, Serialize}; use std::fs::File; use std::io::{BufReader, Write}; -use crate::gen_input::{DatasetTree, gen_witness}; +use crate::gen_input::{DatasetTree, gen_testing_circuit_input}; use plonky2::hash::hash_types::{HashOut, RichField}; use plonky2::plonk::config::{GenericConfig, Hasher}; use plonky2_field::extension::Extendable; use plonky2_field::types::Field; use plonky2_poseidon2::poseidon2_hash::poseidon2::Poseidon2; use codex_plonky2_circuits::circuits::sample_cells::{Cell, MerklePath, SampleCircuitInput}; -use crate::params::Params; +use crate::params::TestParams; -pub fn export_witness_to_json< +/// export circuit input to json file +pub fn export_circ_input_to_json< F: RichField + Extendable + Poseidon2 + Serialize, const D: usize, -> (witness :SampleCircuitInput, filename: &str) -> Result<()>{ - // Convert the witness to a serializable format - let serializable_witness = SerializableWitness::from_witness(&witness); +> (circ_input:SampleCircuitInput, filename: &str) -> Result<()>{ + // Convert the circuit input to a serializable format + let serializable_circ_input = SerializableCircuitInput::from_circ_input(&circ_input); // Serialize to JSON - let json_data = serde_json::to_string_pretty(&serializable_witness)?; + let json_data = serde_json::to_string_pretty(&serializable_circ_input)?; // Write to file let mut file = File::create(filename)?; @@ -28,23 +29,23 @@ pub fn export_witness_to_json< } -/// Function to generate witness and export to JSON -pub fn generate_and_export_witness_to_json< +/// Function to generate circuit input and export to JSON +pub fn generate_and_export_circ_input_to_json< F: RichField + Extendable + Poseidon2 + Serialize, const D: usize, ->( params: &Params, filename: &str) -> anyhow::Result<()> { +>(params: &TestParams, filename: &str) -> Result<()> { - let witness = gen_witness::(params); + let circ_input = gen_testing_circuit_input::(params); - export_witness_to_json(witness, filename)?; + export_circ_input_to_json(circ_input, filename)?; Ok(()) } -// Serializable versions of the witness +// Serializable versions of the circuit input #[derive(Serialize, Deserialize)] -struct SerializableWitness< +struct SerializableCircuitInput< > { dataSetRoot: Vec, entropy: Vec, @@ -58,40 +59,40 @@ struct SerializableWitness< } impl< -> SerializableWitness{ - /// from the witness to serializable witness - pub fn from_witness< +> SerializableCircuitInput { + /// from the circuit input to serializable circuit input + pub fn from_circ_input< F: RichField + Extendable + Poseidon2 + Serialize, const D: usize, - >(witness: &SampleCircuitInput) -> Self { - SerializableWitness { - dataSetRoot: witness + >(circ_input: &SampleCircuitInput) -> Self { + SerializableCircuitInput { + dataSetRoot: circ_input .dataset_root .elements .iter() .map(|e| e.to_canonical_u64().to_string()) .collect(), - entropy: witness + entropy: circ_input .entropy .iter() .map(|e| e.to_canonical_u64().to_string()) .collect(), - nCellsPerSlot: witness.n_cells_per_slot.to_canonical_u64() as usize, - nSlotsPerDataSet: witness.n_slots_per_dataset.to_canonical_u64() as usize, - slotIndex: witness.slot_index.to_canonical_u64(), - slotRoot: witness + nCellsPerSlot: circ_input.n_cells_per_slot.to_canonical_u64() as usize, + nSlotsPerDataSet: circ_input.n_slots_per_dataset.to_canonical_u64() as usize, + slotIndex: circ_input.slot_index.to_canonical_u64(), + slotRoot: circ_input .slot_root .elements .iter() .map(|e| e.to_canonical_u64().to_string()) .collect(), - slotProof: witness + slotProof: circ_input .slot_proof .iter() .flat_map(|hash| hash.elements.iter()) .map(|e| e.to_canonical_u64().to_string()) .collect(), - cellData: witness + cellData: circ_input .cell_data .iter() .map(|data_vec| { @@ -101,7 +102,7 @@ impl< .collect() }) .collect(), - merklePaths: witness + merklePaths: circ_input .merkle_paths .iter() .map(|path| { @@ -115,9 +116,9 @@ impl< } } -impl<> SerializableWitness { - /// from serializable witness to witness - pub fn to_witness< +impl<> SerializableCircuitInput { + /// from serializable circuit input to circuit input + pub fn to_circ_input< F: RichField + Extendable + Poseidon2, const D: usize >(&self) -> Result> { @@ -258,87 +259,84 @@ impl<> SerializableWitness { } } -/// reads the json file, converts it to witness (SampleCircuitInput) and returns it -pub fn import_witness_from_json + Poseidon2, const D: usize>( +/// reads the json file, converts it to circuit input (SampleCircuitInput) and returns it +pub fn import_circ_input_from_json + Poseidon2, const D: usize>( filename: &str, ) -> Result> { let file = File::open(filename)?; let reader = BufReader::new(file); - let serializable_witness: SerializableWitness = serde_json::from_reader(reader)?; + let serializable_circ_input: SerializableCircuitInput = serde_json::from_reader(reader)?; - let witness = serializable_witness.to_witness()?; - Ok(witness) + let circ_input = serializable_circ_input.to_circ_input()?; + Ok(circ_input) } #[cfg(test)] mod tests { use super::*; - use crate::params::{BOT_DEPTH, C, D, F, MAX_DEPTH, N_CELLS}; + use crate::params::{C, D, F}; use std::fs; use std::time::Instant; - use codex_plonky2_circuits::circuits::params::{CircuitParams, HF}; + use codex_plonky2_circuits::circuits::params::CircuitParams; use codex_plonky2_circuits::circuits::sample_cells::SampleCircuit; - use codex_plonky2_circuits::merkle_tree::merkle_safe::MerkleProof; use plonky2::iop::witness::PartialWitness; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2::plonk::circuit_data::CircuitConfig; - use crate::gen_input::verify_witness; - use crate::sponge::hash_n_with_padding; - use crate::utils::{bits_le_padded_to_usize, calculate_cell_index_bits, usize_to_bits_le_padded}; + use crate::gen_input::verify_circuit_input; // Test to generate the JSON file #[test] - fn test_export_witness_to_json() -> anyhow::Result<()> { + fn test_export_circ_input_to_json() -> Result<()> { // Create Params - let params = Params::default(); - // Export the witness to JSON - generate_and_export_witness_to_json::(¶ms, "input.json")?; + let params = TestParams::default(); + // Export the circuit input to JSON + generate_and_export_circ_input_to_json::(¶ms, "input.json")?; - println!("Witness exported to input.json"); + println!("Circuit input exported to input.json"); Ok(()) } #[test] - fn test_import_witness_from_json() -> anyhow::Result<()> { - // Import the witness from the JSON file + fn test_import_circ_input_from_json() -> anyhow::Result<()> { + // Import the circuit input from the JSON file // NOTE: MAKE SURE THE FILE EXISTS - let witness: SampleCircuitInput = import_witness_from_json("input.json")?; - println!("Witness imported successfully"); + let circ_input: SampleCircuitInput = import_circ_input_from_json("input.json")?; + println!("circuit input imported successfully"); Ok(()) } - // export the witness and then import it and checks equality + // export the circuit input and then import it and checks equality #[test] - fn test_export_import_witness() -> anyhow::Result<()> { + fn test_export_import_circ_input() -> anyhow::Result<()> { // Create Params instance - let params = Params::default(); + let params = TestParams::default(); - // Export the witness to JSON - let original_witness = gen_witness(¶ms); - export_witness_to_json(original_witness.clone(), "input.json")?; - println!("Witness exported to input.json"); + // Export the circuit input to JSON + let original_circ_input = gen_testing_circuit_input(¶ms); + export_circ_input_to_json(original_circ_input.clone(), "input.json")?; + println!("circuit input exported to input.json"); - // Import the witness from JSON - let imported_witness: SampleCircuitInput = import_witness_from_json("input.json")?; - println!("Witness imported from input.json"); + // Import the circuit input from JSON + let imported_circ_input: SampleCircuitInput = import_circ_input_from_json("input.json")?; + println!("circuit input imported from input.json"); - // Compare the original and imported witnesses - assert_eq!(original_witness, imported_witness, "Witnesses are not equal"); + // Compare the original and imported circuit input + assert_eq!(original_circ_input, imported_circ_input, "circuit input are not equal"); // cleanup: Remove the generated JSON file fs::remove_file("input.json")?; - println!("Test passed: Original and imported witnesses are equal."); + println!("Test passed: Original and imported circuit input are equal."); Ok(()) } - // reads the json input and runs the circuit + // reads the json input from file and runs the circuit #[test] - fn test_json_witness_circuit() -> anyhow::Result<()> { - let params = Params::default(); + fn test_read_json_and_run_circuit() -> anyhow::Result<()> { + let params = TestParams::default(); // Create the circuit let config = CircuitConfig::standard_recursion_config(); @@ -346,7 +344,7 @@ mod tests { let circuit_params = CircuitParams { max_depth: params.max_depth, - max_log2_n_slots: params.dataset_depth(), + max_log2_n_slots: params.dataset_max_depth(), block_tree_depth: params.bot_depth(), n_field_elems_per_cell: params.n_field_elems_per_cell(), n_samples: params.n_samples, @@ -357,11 +355,11 @@ mod tests { // Create a PartialWitness and assign let mut pw = PartialWitness::new(); - // Import the witness from JSON - let imported_witness: SampleCircuitInput = import_witness_from_json("input.json")?; - println!("Witness imported from input.json"); + // Import the circuit input from JSON + let imported_circ_input: SampleCircuitInput = import_circ_input_from_json("input.json")?; + println!("circuit input imported from input.json"); - circ.sample_slot_assign_witness(&mut pw, &mut targets, imported_witness); + circ.sample_slot_assign_witness(&mut pw, &mut targets, imported_circ_input); // Build the circuit let data = builder.build::(); @@ -383,17 +381,17 @@ mod tests { } // reads the json input and verify (non-circuit) - // NOTE: expects the json input proof uses the default params + // NOTE: expects that the json input proof uses the default params #[test] - fn test_json_witness() -> anyhow::Result<()> { - let params = Params::default(); + fn test_read_json_and_verify() -> anyhow::Result<()> { + let params = TestParams::default(); - // Import the witness from JSON - let imported_witness: SampleCircuitInput = import_witness_from_json("input.json")?; - println!("Witness imported from input.json"); + // Import the circuit input from JSON + let imported_circ_input: SampleCircuitInput = import_circ_input_from_json("input.json")?; + println!("circuit input imported from input.json"); // Verify the proof - let ver = verify_witness(imported_witness, ¶ms); + let ver = verify_circuit_input(imported_circ_input, ¶ms); assert!( ver, "Merkle proof verification failed" diff --git a/proof-input/src/params.rs b/proof-input/src/params.rs index f2db60d..c2edee8 100644 --- a/proof-input/src/params.rs +++ b/proof-input/src/params.rs @@ -4,34 +4,40 @@ use plonky2::hash::poseidon::PoseidonHash; use plonky2::plonk::config::{GenericConfig, PoseidonGoldilocksConfig}; use std::env; use anyhow::{Result, Context}; +use codex_plonky2_circuits::circuits::params::CircuitParams; use plonky2_poseidon2::config::Poseidon2GoldilocksConfig; -// fake input params - -// types +// test types pub const D: usize = 2; pub type C = Poseidon2GoldilocksConfig; pub type F = >::F; // this is the goldilocks field // pub type H = PoseidonHash; // pub type HP = >::Permutation; -// hardcoded params for generating proof input -pub const MAX_DEPTH: usize = 32; // depth of big tree (slot tree depth, includes block tree depth) -pub const MAX_SLOTS: usize = 256; // maximum number of slots -pub const CELL_SIZE: usize = 2048; // cell size in bytes -pub const BLOCK_SIZE: usize = 65536; // block size in bytes -pub const N_SAMPLES: usize = 5; // number of samples to prove +// hardcoded default params for generating proof input +const DEFAULT_MAX_DEPTH: usize = 32; // depth of big tree (slot tree depth, includes block tree depth) +const DEFAULT_MAX_SLOTS: usize = 256; // maximum number of slots +const DEFAULT_CELL_SIZE: usize = 2048; // cell size in bytes +const DEFAULT_BLOCK_SIZE: usize = 65536; // block size in bytes +const DEFAULT_N_SAMPLES: usize = 5; // number of samples to prove -pub const ENTROPY: usize = 1234567; // external randomness -pub const SEED: usize = 12345; // seed for creating fake data TODO: not used now +const DEFAULT_ENTROPY: usize = 1234567; // external randomness +const DEFAULT_SEED: usize = 12345; // seed for creating fake data TODO: not used now -pub const N_SLOTS: usize = 16; // number of slots in the dataset -pub const TESTING_SLOT_INDEX: usize = 3; // the index of the slot to be sampled -pub const N_CELLS: usize = 512; // number of cells in each slot +const DEFAULT_N_SLOTS: usize = 16; // number of slots in the dataset +const DEFAULT_SLOT_INDEX: usize = 3; // the index of the slot to be sampled +const DEFAULT_N_CELLS: usize = 512; // number of cells in each slot /// Params struct #[derive(Clone)] pub struct Params { + pub circuit_params: CircuitParams, + pub test: TestParams, +} + +/// test params +#[derive(Clone)] +pub struct TestParams{ pub max_depth: usize, pub max_slots: usize, pub cell_size: usize, @@ -45,25 +51,25 @@ pub struct Params { } /// Implement the Default trait for Params using the hardcoded constants -impl Default for Params { +impl Default for TestParams { fn default() -> Self { - Params { - max_depth: MAX_DEPTH, - max_slots: MAX_SLOTS, - cell_size: CELL_SIZE, - block_size: BLOCK_SIZE, - n_samples: N_SAMPLES, - entropy: ENTROPY, - seed: SEED, - n_slots: N_SLOTS, - testing_slot_index: TESTING_SLOT_INDEX, - n_cells: N_CELLS, + TestParams { + max_depth: DEFAULT_MAX_DEPTH, + max_slots: DEFAULT_MAX_SLOTS, + cell_size: DEFAULT_CELL_SIZE, + block_size: DEFAULT_BLOCK_SIZE, + n_samples: DEFAULT_N_SAMPLES, + entropy: DEFAULT_ENTROPY, + seed: DEFAULT_SEED, + n_slots: DEFAULT_N_SLOTS, + testing_slot_index: DEFAULT_SLOT_INDEX, + n_cells: DEFAULT_N_CELLS, } } } /// Implement a new function to create Params with custom values -impl Params { +impl TestParams { pub fn new( max_depth: usize, max_slots: usize, @@ -76,7 +82,7 @@ impl Params { testing_slot_index: usize, n_cells: usize, ) -> Self { - Params { + TestParams { max_depth, max_slots, cell_size, @@ -96,12 +102,12 @@ impl Params { // N_FIELD_ELEMS_PER_CELL pub fn n_field_elems_per_cell(&self) -> usize { - self.cell_size * 8 / self.goldilocks_f_size() + (self.cell_size + 62) / 62 * 8 } // BOT_DEPTH pub fn bot_depth(&self) -> usize { - (self.block_size / self.cell_size).trailing_zeros() as usize + log2(self.block_size / self.cell_size) } // N_CELLS_IN_BLOCKS @@ -125,40 +131,33 @@ impl Params { } // DATASET_DEPTH - pub fn dataset_depth(&self) -> usize { - self.max_slots.trailing_zeros() as usize + pub fn dataset_max_depth(&self) -> usize { + // self.max_slots.trailing_zeros() as usize + ceiling_log2(self.max_slots) } // DATASET_DEPTH for test pub fn dataset_depth_test(&self) -> usize { - self.n_slots.trailing_zeros() as usize - } - - // n_cells_per_slot (2^max_depth) - pub fn n_cells_per_slot(&self) -> usize { - 1 << self.max_depth - } - - // n_slots_per_dataset (2^dataset_depth) - pub fn n_slots_per_dataset(&self) -> usize { - 1 << self.dataset_depth() + ceiling_log2(self.n_slots) + // self.n_slots.trailing_zeros() as usize } } +pub fn log2(x: usize) -> usize { + assert!(x.is_power_of_two(), "Input must be a power of 2."); + x.trailing_zeros() as usize +} -// computed constants -pub const GOLDILOCKS_F_SIZE: usize = 64; -pub const N_FIELD_ELEMS_PER_CELL: usize = CELL_SIZE * 8 / GOLDILOCKS_F_SIZE; -pub const BOT_DEPTH: usize = (BLOCK_SIZE/CELL_SIZE).ilog2() as usize; // block tree depth +pub fn ceiling_log2(x: usize) -> usize { + if x <= 1 { + return 0; + } + usize::BITS as usize - x.saturating_sub(1).leading_zeros() as usize +} -pub const N_CELLS_IN_BLOCKS: usize = 1<< BOT_DEPTH; //2^BOT_DEPTH -pub const N_BLOCKS: usize = 1<<(MAX_DEPTH - BOT_DEPTH); // 2^(MAX_DEPTH - BOT_DEPTH) - -pub const DATASET_DEPTH: usize = MAX_SLOTS.ilog2() as usize; - -/// load params from env -impl Params { +/// load test params from env +impl TestParams { pub fn from_env() -> Result { let max_depth = env::var("MAXDEPTH") .context("MAXDEPTH not set")? @@ -210,7 +209,7 @@ impl Params { .parse::() .context("Invalid NCELLS")?; - Ok(Params { + Ok(TestParams { max_depth, max_slots, cell_size, @@ -223,4 +222,23 @@ impl Params { n_cells, }) } +} + +/// load params from env +impl Params { + pub fn from_env() -> Result { + let test_params = TestParams::from_env()?; + let circuit_params = CircuitParams{ + max_depth: test_params.max_depth, + max_log2_n_slots: test_params.dataset_max_depth(), + block_tree_depth: test_params.bot_depth(), + n_field_elems_per_cell: test_params.n_field_elems_per_cell(), + n_samples:test_params.n_samples, + }; + + Ok(Params{ + circuit_params, + test: test_params, + }) + } } \ No newline at end of file diff --git a/proof-input/src/sponge.rs b/proof-input/src/sponge.rs index f37a95b..fde89d1 100644 --- a/proof-input/src/sponge.rs +++ b/proof-input/src/sponge.rs @@ -46,7 +46,8 @@ pub fn hash_n_to_m_with_padding< if let Some(&input) = input_iter.next() { chunk.push(input); } else { - chunk.push(zero); // Pad with zeros if necessary (should not happen here) + // should not happen here + panic!("Insufficient input elements for chunk; expected more elements."); } } // Add the chunk to the state @@ -97,6 +98,75 @@ pub fn hash_n_to_m_with_padding< } } +/// sponge function for bytes with no padding +/// expects the input to be divisible by rate +/// note: rate is fixed at 8 for now +/// used here for testing / sanity check +pub fn hash_bytes_no_padding< + F: RichField + Extendable + Poseidon2, + const D: usize, + H: Hasher +>( + inputs: &[F], +) -> HashOut{ + HashOut::::from_vec(hash_bytes_to_m_no_padding::(inputs, NUM_HASH_OUT_ELTS)) +} + +pub fn hash_bytes_to_m_no_padding< + F: RichField + Extendable + Poseidon2, + const D: usize, + P: PlonkyPermutation +>( + inputs: &[F], + num_outputs: usize, +) -> Vec { + let rate = P::RATE; + let width = P::WIDTH; // rate + capacity + let zero = F::ZERO; + let one = F::ONE; + let mut perm = P::new(core::iter::repeat(zero).take(width)); + + // Set the domain separator at index 8 + let domsep_value = F::from_canonical_u64(rate as u64 + 256 * 12 + 65536 * 8); + perm.set_elt(domsep_value, 8); + + let n = inputs.len(); + assert_eq!(n % rate, 0, "Input length ({}) must be divisible by rate ({})", n, rate); + let num_chunks = n / rate; // Calculate number of chunks + let mut input_iter = inputs.iter(); + + // Process all chunks + for _ in 0..num_chunks { + let mut chunk = Vec::with_capacity(rate); + for _ in 0..rate { + if let Some(&input) = input_iter.next() { + chunk.push(input); + } else { + // should not happen here + panic!("Insufficient input elements for chunk; expected more elements."); + } + } + // Add the chunk to the state + for j in 0..rate { + perm.set_elt(perm.as_ref()[j] + chunk[j],j); + } + // Apply permutation + perm.permute(); + } + + // Squeeze outputs until we have the desired number + let mut outputs = Vec::with_capacity(num_outputs); + loop { + for &item in perm.squeeze() { + outputs.push(item); + if outputs.len() == num_outputs { + return outputs; + } + } + perm.permute(); + } +} + #[cfg(test)] mod tests { use plonky2::field::types::Field; diff --git a/proof-input/src/tests/merkle_circuit.rs b/proof-input/src/tests/merkle_circuit.rs index 73d1e64..eee19fe 100644 --- a/proof-input/src/tests/merkle_circuit.rs +++ b/proof-input/src/tests/merkle_circuit.rs @@ -13,7 +13,7 @@ use plonky2_poseidon2::poseidon2_hash::poseidon2::Poseidon2; use serde::Serialize; use codex_plonky2_circuits::circuits::merkle_circuit::{MerkleProofTarget, MerkleTreeCircuit, MerkleTreeTargets}; use codex_plonky2_circuits::circuits::utils::{assign_bool_targets, assign_hash_out_targets}; -use crate::utils::usize_to_bits_le_padded; +use crate::utils::usize_to_bits_le; use codex_plonky2_circuits::merkle_tree::merkle_safe::MerkleTree; @@ -117,11 +117,10 @@ mod tests { use plonky2::iop::witness::PartialWitness; use plonky2::plonk::circuit_builder::CircuitBuilder; use plonky2_field::goldilocks_field::GoldilocksField; - // use crate::circuits::utils::usize_to_bits_le_padded; // use crate::merkle_tree::merkle_safe::MerkleTree; // NOTE: for now these tests don't check the reconstructed root is equal to expected_root -// will be fixed later, but for that test check the prove_single_cell tests + // will be fixed later, but for that test check the other tests in this crate #[test] fn test_build_circuit() -> anyhow::Result<()> { // circuit params @@ -176,10 +175,10 @@ mod tests { builder.connect(expected_root.elements[i], reconstructed_root_target.elements[i]); } - let path_bits = usize_to_bits_le_padded(leaf_index, max_depth); + let path_bits = usize_to_bits_le(leaf_index, max_depth); let last_index = (nleaves - 1) as usize; - let last_bits = usize_to_bits_le_padded(last_index, max_depth); - let mask_bits = usize_to_bits_le_padded(last_index, max_depth+1); + let last_bits = usize_to_bits_le(last_index, max_depth); + let mask_bits = usize_to_bits_le(last_index, max_depth+1); // circuit input let circuit_input = MerkleTreeCircuitInput::{ @@ -265,10 +264,10 @@ mod tests { let mut pw = PartialWitness::new(); - let path_bits = usize_to_bits_le_padded(leaf_index, max_depth); + let path_bits = usize_to_bits_le(leaf_index, max_depth); let last_index = (nleaves - 1) as usize; - let last_bits = usize_to_bits_le_padded(last_index, max_depth); - let mask_bits = usize_to_bits_le_padded(last_index, max_depth+1); + let last_bits = usize_to_bits_le(last_index, max_depth); + let mask_bits = usize_to_bits_le(last_index, max_depth+1); // circuit input let circuit_input = MerkleTreeCircuitInput::{ diff --git a/proof-input/src/utils.rs b/proof-input/src/utils.rs index af11e53..dd58d74 100644 --- a/proof-input/src/utils.rs +++ b/proof-input/src/utils.rs @@ -9,20 +9,41 @@ use codex_plonky2_circuits::circuits::params::HF; use anyhow::Result; use plonky2::hash::hashing::PlonkyPermutation; use crate::sponge::hash_n_with_padding; + // --------- helper functions --------- -/// Converts an index to a vector of bits (LSB first) with padding. -pub(crate) fn usize_to_bits_le_padded(index: usize, bit_length: usize) -> Vec { +/// Converts an index to a vector of bits (LSB first) no padding. +pub(crate) fn usize_to_bits_le(index: usize, bit_length: usize) -> Vec { + // Assert that the index can fit within the given bit length. + assert!( + index < (1 << bit_length), + "Index ({}) does not fit in {} bits", + index, + bit_length + ); + let mut bits = Vec::with_capacity(bit_length); for i in 0..bit_length { bits.push(((index >> i) & 1) == 1); } - // If index requires fewer bits, pad with `false` - while bits.len() < bit_length { - bits.push(false); - } + + // No padding bits } + +/// returns the first bit_length bits of index +pub(crate) fn low_bits(index: usize, bit_length: usize) -> Vec { + + let mut bits = Vec::with_capacity(bit_length); + + for i in 0..bit_length { + // get the i-th bit and push its bool value + bits.push(((index >> i) & 1) == 1); + } + + bits +} + /// calculate the sampled cell index from entropy, slot root, and counter /// this is the non-circuit version for testing pub(crate) fn calculate_cell_index_bits< @@ -39,7 +60,7 @@ pub(crate) fn calculate_cell_index_bits< let hash_output = hash_n_with_padding::(&hash_inputs); let cell_index_bytes = hash_output.elements[0].to_canonical_u64(); - let cell_index_bits = usize_to_bits_le_padded(cell_index_bytes as usize, depth); + let cell_index_bits = low_bits(cell_index_bytes as usize, depth); let mut masked_cell_index_bits = vec![]; @@ -90,4 +111,4 @@ pub fn verify< proof, public_inputs, }) -} +} \ No newline at end of file diff --git a/workflow/input.json b/workflow/input.json index 13fffc8..3ddb7cb 100644 --- a/workflow/input.json +++ b/workflow/input.json @@ -1,2001 +1,532 @@ { - "dataSetRoot": [ - "14161143179793787859", - "1691903010230079397", - "9568832890659339465", - "18308917234665720830" - ], - "entropy": [ - "1234567", - "0", - "0", - "0" - ], - "nCellsPerSlot": 512, - "nSlotsPerDataSet": 16, - "slotIndex": 3, - "slotRoot": [ - "782820483015656222", - "13741770675266915417", - "12011364774103093282", - "12538244492792303243" - ], - "slotProof": [ - "827439652992611846", - "16905769495525140780", - "16695068033037246276", - "17151630741232149889", - "3469569746364851618", - "18391056527690884511", - "8010039421125473150", - "3408023460182710126", - "12855129173382438132", - "10585118078362511618", - "18326498811560493459", - "4121357915895258498", - "16307052691205647327", - "14166812642918009396", - "6486276784733863693", - "17116992530026873102", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0" - ], - "cellData": [ - [ - "14789569642863473946", - "941115604410929181", - "31361293904870282", - "6503345653761458375", - "2903911528396826334", - "6044029841552756624", - "4557263042690550260", - "15867458954463837359", - "16571684271577036590", - "2980129729894478166", - "1039509218475726634", - "6491084340019274471", - "4172986249861803833", - "7503485694931772361", - "9626247388698198343", - "11355391016353042401", - "1441794231412831582", - "8040261688830621425", - "5431683370179516399", - "4880542066647046153", - "17258502750535312834", - "7305848399429926907", - "5054154159681057454", - "13744624717379751599", - "3106347465687278831", - "6638201553760229009", - "4535028246671615664", - "1452808370161587313", - "11230691627908229792", - "16687676472746460931", - "12721333893145575950", - "9584057002055940153", - "2916610256617811799", - "18104275162582413137", - "11364216408364670625", - "9356119933871436960", - "3221056536408199262", - "6880697719726633487", - "3777639228764731693", - "9061778693473594040", - "10280913451233476405", - "340016446049032732", - "12050894156277066403", - "9712767834236572964", - "6016825627234861967", - "10602477993944061705", - "9163174175801806086", - "8348477520656364760", - "15325858971469152010", - "1546992280051753395", - "7941349010379107079", - "13549091001768256079", - "17823919320785747047", - "3002298052827556830", - "534996631198050352", - "1586129140545833879", - "12486474847006607962", - "11875412160116415569", - "16968942497185621218", - "15711373610432138069", - "14236340679867569134", - "6961451330402910185", - "4947316787916914749", - "5104502678578640340", - "16973095791376389465", - "3309240419801156906", - "15505661335482410979", - "16860316447568774830", - "15840388172461660279", - "14984558276371667645", - "7394581393332782338", - "13446441861930367905", - "16572622789783479524", - "6064118266488496246", - "4242891908228013569", - "1247032236838487357", - "9795835309680739359", - "13779029677510339321", - "5582912158930703548", - "3149595256850435299", - "9941426800753685450", - "701556573677241187", - "18182898406704341737", - "8086088534380822361", - "16821790117662795896", - "7620850327363415866", - "2108408024829008114", - "5879549778661816259", - "13149287548041563718", - "17916733315684804570", - "12962323609533372321", - "11989318315919130618", - "13355027423360660478", - "1346778913402083967", - "391620772102151148", - "9285052314972667503", - "16276877534649055637", - "2481264380987652849", - "8754348888880580890", - "5391006879850311554", - "8649873529323161114", - "17550215493508796804", - "14427765938248400015", - "4737000137812503428", - "6754001179767544587", - "2136632252464429421", - "11898741247223399941", - "3932124882822370693", - "1237341168664840072", - "7598889280757555587", - "2748641511407736863", - "5132329980996861472", - "11457056337436545666", - "18405446091683502015", - "2596953114832782023", - "13439879122125760644", - "261813631547837038", - "3108525048877308429", - "16339947243960482382", - "2844869971807569361", - "3296078896575512352", - "934040528108618707", - "9687710880711680385", - "17536767732436892205", - "4338494506730339167", - "11761402313698153171", - "14454302808237256302", - "3294636990129347566", - "17830015569709198564", - "13132540792577790382", - "16864656680082872108", - "18311737825187343823", - "7895989396728028857", - "10488820967176609594", - "3730274124949874920", - "15112731697915428426", - "15653094278105569201", - "5079403962491400489", - "11626969013915342384", - "10098840259238639072", - "11254591034365470128", - "10349826683720123818", - "5108110918192933572", - "122989381911733940", - "4167323556997067941", - "15529573514570367484", - "8451739094448064791", - "14394419689351249134", - "14968430083361778647", - "7458127949449373903", - "5595913228968910608", - "1422146318077958864", - "339312744216281507", - "3110283773437321741", - "10844300897788724743", - "11877197000176772307", - "18038918631296135339", - "18395140132457887127", - "13312599491506888655", - "5895042579529082492", - "18184745097910756411", - "14661240628876563423", - "1131730308968456212", - "18402072392185960522", - "7641927239882870308", - "8386314804598436448", - "5119268662739132913", - "16580054063259861026", - "8581852479443866350", - "10151924357982600705", - "5289949950407063935", - "4084376947367555250", - "6795287861499147932", - "7859059390598764964", - "13402050035734259615", - "15640443029700215898", - "1366794653424830397", - "15750818004754719092", - "4191396076480787077", - "15786596991029571904", - "2588388614671082937", - "4313920998583652142", - "3078068051164307664", - "5935052706972703097", - "13739626416742167331", - "18222637837665551625", - "11004263875811364676", - "11075546384238097669", - "5612243577978886680", - "5999728220779485239", - "1690546386987703041", - "7756005749450822973", - "15517846417800750479", - "8276114584292561755", - "14987898327129210291", - "14000246565174314489", - "8689195930613178087", - "13712380848607174120", - "3170682782553487711", - "13878340341804285845", - "17403221328169584344", - "11449085426407881844", - "16393089309745155904", - "767687969449064664", - "10008494532767674825", - "7815947925385860200", - "14608652403216193075", - "11194051609007356113", - "6838516374624665442", - "7621554811672997281", - "18302714227421985262", - "8580424563090679613", - "13612668434621569507", - "10047464950580048126", - "9327183905322114118", - "16311059816857248294", - "8670263783730877124", - "5265725196186846914", - "10356623497247867081", - "17485715078212669032", - "3072927792501254960", - "10586070270128180449", - "1514201920861359980", - "13385023238101031743", - "11216875785937686746", - "12736270450928471486", - "12892465605902481433", - "15116572355797974840", - "8026904408987514558", - "10563730190071955714", - "11564683265565409942", - "2461632329468228982", - "11398255253588086198", - "15180070182808514236", - "10329335040972040510", - "4778515338246410000", - "10516265870176251389", - "8470280023130891383", - "3188930989334520742", - "3676254161486628498", - "17562666802684380851", - "2049826904216295675", - "11811782265395959053", - "16568322941178619817", - "3750388431679765519", - "8944409705617446777", - "17276833191845879531", - "5171866240208867011", - "14042995508792471939", - "2568944570716154188", - "1045386699306703112", - "16068322662706973540", - "17276634469426809792", - "16593240955474462677", - "7992614686681568274", - "4876036946462113449" - ], - [ - "16911767687697650545", - "16800840483536669233", - "9547047034445506774", - "11138456661552389470", - "10366425561055940906", - "16955318326082216165", - "3306388088939572381", - "5893105478388826911", - "13069347000763975843", - "5930317768090898947", - "17220782485676136155", - "11018735983433624703", - "7243569122920591200", - "143917609305538840", - "12478659420558087952", - "2364046171621702642", - "16376832494416475400", - "8410514438656220567", - "7741464322782317040", - "14090820392602959749", - "14454191556029633107", - "14132443891545266744", - "9778691635585682111", - "10329270589374575079", - "12594833913326855682", - "6722097361017681537", - "16230073419245233797", - "11897534188698654911", - "10039351038192012197", - "5296292516271943915", - "18081502949608206844", - "3311905015582044855", - "11974278269018679936", - "9186985254078136268", - "8258022974669654255", - "17175882538227290708", - "14261907041619976417", - "10382470271685591351", - "10442928912159956315", - "8867116291469848323", - "2367726753446276403", - "13473260822484874222", - "2966945432432675677", - "3099805655184603216", - "13623242862315624698", - "2986218418274771257", - "14993170753649367860", - "14294956525425572837", - "16556855370198099855", - "11662868431633583462", - "686017359451433348", - "13896650681683054317", - "15623027429332160432", - "16450860232388263011", - "6339321644088110408", - "12755049031650475112", - "7587100232152503962", - "17002710675036772132", - "290331452789538092", - "15489944383675797097", - "4742067791885988402", - "5106332772500688535", - "8550229513383741069", - "13095487810757585838", - "16820249371610878437", - "5011103252188621555", - "16047235482156197737", - "11892268763388404008", - "12591461590758212077", - "14709313883736125521", - "3830973355654267354", - "14385245197540959169", - "1895491091281306597", - "7911598983860796234", - "13726311464382372967", - "11318723130184472037", - "16076337112303388523", - "2144141175800178673", - "11125992048359878707", - "5994061660918818425", - "17844441694652370230", - "10853731534776367828", - "13666236091379625885", - "499221697685167903", - "6984174873510804884", - "7580149651305137885", - "16869595096482399787", - "17056899472971292381", - "6861309764975588524", - "3939688386732465041", - "15962138119609552950", - "9232427911589078426", - "6494513292462087446", - "5219601862022330396", - "4467956381050857588", - "1760622371281617022", - "3862817989779170171", - "9390796421790106827", - "8933022308553159181", - "3605138921585610340", - "5278594387874150364", - "12638566128526831490", - "7327038982070416553", - "7279061945076499667", - "13038709413115887430", - "2422318628274836894", - "13964219972944285036", - "10915688628857404721", - "3704089442437980345", - "10707231972423412036", - "15874052644634953170", - "17415353842646164900", - "8174671720709027437", - "16930927443395938164", - "14552863469754964485", - "10233266445023934436", - "1077136479670653500", - "10284402422300285198", - "10266618877081639935", - "7033335059270330883", - "6475206947494380562", - "5829047850122336852", - "18029426144814474845", - "6419638350657643270", - "2409933633942766089", - "14513547536629856535", - "10617840958843610037", - "10802176942785786453", - "5867835258901662047", - "25594705924577311", - "2352158568510543409", - "6747986568242832005", - "8404859955908573982", - "13358019802527749625", - "16780165043750300303", - "5004324466389876269", - "3278804563759602814", - "5133434962493859314", - "6585307209348002889", - "11343463973738830617", - "11271587990250660957", - "7211604016175847101", - "5719485895992142898", - "4982603613251774869", - "11616946468864556453", - "7968094808953975522", - "14786968526967547448", - "10209314770411602253", - "8951730671997925084", - "17012845988391040763", - "1327808432622214635", - "2700270607194010707", - "1849096009793543513", - "14786175175833959518", - "8155237757511836382", - "7647513086964976578", - "17665150077312592995", - "8893162376730596547", - "16658557977418736957", - "7883837896597059703", - "18023863824680777469", - "13478974355730137424", - "5766135805390490541", - "9500541199733045110", - "9534469569558384215", - "3807183301362798037", - "6532456165357803538", - "14351106892756980557", - "13022239725529941130", - "17905151140800536230", - "2832623084744565236", - "15430061920491581424", - "15266906777675552449", - "9288264168303796503", - "4339525544538684272", - "9592571932004695252", - "10876890077969001569", - "5553079580086521804", - "8822035665897184331", - "3199495363790917320", - "17371250809651225574", - "2333809222584395024", - "6660134993383244342", - "12181234020633817233", - "8709808735530170059", - "14311283771626044482", - "3392049986829384286", - "4596908573889225243", - "6612406589385228156", - "11708931732882174576", - "9961169229275854215", - "10765233733620056619", - "767212126000523913", - "6405881724925807156", - "1894045306985164945", - "7846660824711253697", - "3561536111838519930", - "8543826743315032343", - "3579042591845986452", - "1287145797576780255", - "12689862387034138971", - "14830744567765199595", - "9515110912031278707", - "15267811573808294461", - "14389905074154812270", - "9508364825672561186", - "2848445617440657793", - "4150128332499800789", - "12481344016944889993", - "7786574362262627532", - "13078279735705139946", - "16670846470921269483", - "12009778506776148746", - "10421401075275525898", - "16037930202084309384", - "7854128525880955000", - "15195125531889811473", - "6155107493138159722", - "1815207394631387061", - "3651898969218073434", - "2527772806178406220", - "9514524434069620081", - "8087079481075785679", - "1806459126250938031", - "5050167554713690345", - "15077715603274102085", - "2208184209639987096", - "13851422497589763646", - "1194492743884513129", - "3412336631122003228", - "12550587840869476212", - "3686478846494750795", - "16942278887921547530", - "4974433715314846007", - "15403087407427801323", - "12581139325444584910", - "9691710653210731286", - "18240453118579748809", - "2285753809759372063", - "16054528992284581986", - "10860159893079532825", - "10901754911335806485", - "8124256542743046101", - "7883051165503393509", - "5801131326105384440", - "2692853023341052986", - "9506591785106266016", - "13520893576496525068", - "7578467447601046861", - "4763340116804307458", - "8188622596277552508", - "8627246523966208195", - "10357093068742276144", - "935869545698107018", - "1161468965978002329", - "6684432639677233660" - ], - [ - "1649538581604157472", - "2190945867336261317", - "2189903204845409329", - "6750673102633404529", - "2128245357334123519", - "3182574931662396926", - "16323009484150779482", - "4977726895688031127", - "4553243784217615595", - "2580021991914876847", - "9401663877528765977", - "8863599565663263543", - "17058885298627974646", - "3395909082522159145", - "3532863501711731081", - "13169881929982842420", - "3582865613747503373", - "14314256754256104858", - "3060747565482436287", - "11251273002789233238", - "9106674754288203937", - "10222117544765484383", - "3717873038788449905", - "9545675983462535390", - "698214228950619125", - "17094750427280477562", - "3314876409206979085", - "1279889661292084452", - "13895784739041402825", - "7560078641467611551", - "9071529187603531644", - "15471210482266984165", - "17915455513923182281", - "15861987213743813061", - "17447339783584237845", - "8788406687814163412", - "3931395076465729398", - "12491397485100880931", - "3267066092188547682", - "16820481131913076645", - "1611066430076644592", - "13621503209161918274", - "14329492234510653433", - "1537296730545964531", - "13626114495187430069", - "17260435902162017512", - "14493380189569941538", - "6869511069930894883", - "17969570858498667261", - "17290256289026716283", - "1986148926179384694", - "18317392091111979781", - "12407118366788901202", - "16871437516301202007", - "7032078510854173257", - "15509855590316563579", - "5322660238234653645", - "17961477661488146914", - "4548956954081112226", - "8112824280610963727", - "8880069565453849491", - "7117702799679444108", - "6691182374519806724", - "13537071895019809373", - "7672725486307622467", - "3566883622799126792", - "5236213206549940632", - "9146294278484816299", - "17620424985652587575", - "9722447411200643032", - "7633962389854927250", - "12068899748399174887", - "2364672480180029920", - "7445773486796325782", - "10505796355378030415", - "11459242542316564974", - "17382241307988830991", - "13890207594544061972", - "14023922103486290296", - "11573057365630722995", - "11302680936127544864", - "12994052542045970263", - "96482053269407143", - "2796449457878088217", - "11319106641151108951", - "969290842302183129", - "13157248727199671828", - "10559395688882908375", - "8763441748459808626", - "882102287513226622", - "9897850672268210089", - "5215870828501618929", - "15849170011485626039", - "387647350698160607", - "11559536842758327137", - "9051821426286990946", - "17094138224361310278", - "7227723650003103614", - "445783653885900367", - "14709172130942241053", - "6817390568440776104", - "17508526009075021716", - "10809995994610464558", - "15368485741025924022", - "6136372460777843480", - "13823229779970729830", - "15321265854906795840", - "1964136028415336359", - "16856869495406676842", - "16422289584784708368", - "16629032907783147704", - "10237686923317893869", - "975786021176516212", - "16442429296181077627", - "15747173091433253877", - "10542155895879662546", - "17063010338485105007", - "17732960773623648433", - "1226404432346154723", - "8962614411840225996", - "1285622203102939223", - "6618637399529750703", - "5335508984440832794", - "13588270964773469214", - "13142803504965529094", - "16084702041738289204", - "18059988993441994783", - "9147353642769347432", - "11279819137536537068", - "16604408758708426645", - "16852226307828135410", - "16397246189246853270", - "14948595402209828144", - "5822761619921442321", - "17300195564678932039", - "17273621440518318927", - "16699976077071667862", - "2228544476593621874", - "17483166353969135", - "5342143343519138731", - "6635851765791339092", - "1137994056749568821", - "4351170705541457131", - "663253671305672131", - "10421372693352121445", - "15000672627929448839", - "7962666306441649079", - "597431098064770243", - "16368247805661752341", - "2122292446524020839", - "14657974544341129734", - "1979379927675580039", - "14078957161053039765", - "12755729045138876121", - "18346118527096549836", - "5843313642452500585", - "12184824699681123281", - "10957263001716484558", - "12970188008167650279", - "6329603025636387155", - "10657831953022579644", - "12556762515446920644", - "4349214870780505627", - "12422122812208134800", - "15430624482016806379", - "769686399872381083", - "15405212268597303265", - "7447796036347599728", - "16660193598365322960", - "7159047888359026542", - "14688738362126788203", - "8897497377306211690", - "13978772950070702790", - "9815225837099332074", - "817181872994983859", - "99325565025409359", - "11853797968083024087", - "9759160433200378089", - "5862549027676025190", - "7227636216620289924", - "9879809457395943477", - "12680841851271726914", - "8580320598528201698", - "17272515411766728450", - "8425236622824562609", - "15976407264633340878", - "15210384292057582748", - "18157382502489189366", - "10209341980683564975", - "2844328782572674443", - "7293528009405225922", - "13803013738757026919", - "15813742836484436248", - "17601162759345660239", - "7456986042698608133", - "12444204373911963955", - "2871954454948476270", - "8301356561668908607", - "10498030904944859117", - "940320366647045906", - "17745468641095906177", - "7810218972659648588", - "15211285062227163255", - "17757946969940345494", - "4282866266912613782", - "1897924034669029251", - "13238229741579488842", - "4956974251681554192", - "4946007047032253053", - "6407439404785083938", - "2941198060298024849", - "9850466149770135512", - "4163434130677537997", - "12094711786455569316", - "15834072138620418370", - "3057456773539959244", - "14407694936471297157", - "2066615264354481638", - "18305445662886205843", - "14190714304706171040", - "13652389135364141100", - "17845806164944733497", - "9920892511103488707", - "2082176654455637494", - "9629447770810608004", - "1024596743476912636", - "5128074128828001985", - "12503726218838534638", - "6080238667441069620", - "15012520213119688540", - "14487013176640393377", - "2952551591835979426", - "2982382916386248435", - "3926040685037760413", - "17533286170323515203", - "9557583758161477405", - "14356568126004562275", - "18001861506397860078", - "7034323943418016483", - "7269377475913384096", - "1022812779955554440", - "15111799055001123261", - "18444322753050729845", - "16678885789229309776", - "13241072287448437488", - "7667906035793502484", - "5177674149124805439", - "8536571724057519495", - "3210451375014585197", - "17274230581761523505", - "8709157080168692708", - "2862289027298664900", - "10407243095659000367", - "18071909287850569483", - "17881384630927795438", - "16604282691797180954" - ], - [ - "11158617876796182367", - "9087682946628781857", - "13523261239249378141", - "15827915555373576655", - "9262750204996517080", - "8024044100248875957", - "8809935746044743226", - "2420169539594806852", - "9511178069329971713", - "2165731211478527016", - "13500793646750044199", - "15855749386720726567", - "2387027328566681173", - "14658664632587997547", - "1359414984296540818", - "3928986743251244634", - "3883512008432968168", - "4427351014030365246", - "11132574503037078991", - "6974688388392721638", - "14736075515759675541", - "10110550106319047992", - "599772665297787563", - "14861972646103992662", - "467265336960199555", - "11761134041823553950", - "4214683051322132529", - "10240283974339258299", - "17726328076109119628", - "8636286019135297310", - "7419164961907013479", - "121986162065955553", - "7458038471368618803", - "7349653881718466007", - "10149251233264790479", - "14273707597016021240", - "10387100798812799750", - "2258056140093562379", - "7128419070075123128", - "5275714604681357029", - "4002249318986442649", - "601524530688047472", - "6827535929157926561", - "13607779383643524050", - "17678266888533883521", - "8212592250000750235", - "3058284765086898690", - "5684139866262203683", - "2920218021539509092", - "4059362548040261158", - "14207613335723119103", - "16422595166957626726", - "3899969005214944741", - "17063274448616385977", - "7973094300187060157", - "6179803604039378277", - "8284549276534963558", - "556964194144609350", - "61276780466559434", - "16056966261933274277", - "16113208558364777883", - "8794337138007680668", - "9036628237927474545", - "3503116861535909481", - "4809795667011654245", - "971073753950642324", - "17640187961393515770", - "15785572301746631725", - "11168265249102815117", - "12142549862729950049", - "2198771697011054930", - "15400952011194223782", - "4329439674411870228", - "14736316801436137217", - "14319313152657758877", - "2226536629546084942", - "16867398040603265316", - "11049305754935960587", - "9252550961936388359", - "16989069244835832315", - "4651052612443834619", - "5957006625414687321", - "5514811467041117322", - "10369060938241062477", - "10798216438040497570", - "6188476940753794656", - "6308026381054344337", - "14890660788993753270", - "3000837770380636032", - "7776584852719816034", - "2050139700818523200", - "8558728603558907443", - "16091291465736854341", - "3655786891166224233", - "10181943858875925206", - "5159775549992303947", - "18127250069814608436", - "12624992833336310436", - "1859686865690485770", - "14235198349777988044", - "15556508232559901544", - "9053084198552608130", - "5100341905537285260", - "11812062877650651555", - "17942494357535735384", - "16742616129737978538", - "7639402316365989569", - "1663251005842413731", - "440040191556567544", - "8916007688543922761", - "5725297247975748170", - "12131358373118883253", - "6017124992480147241", - "6006811035330089767", - "18247051230679732846", - "16360482109454416855", - "15997971622376017087", - "13502647901972449299", - "2638680377430957146", - "17846087042375737654", - "5790441472821082981", - "2944113745463303810", - "15451477656649567783", - "4975719260330435983", - "14435265086753009729", - "14822840027766529570", - "3352621978802460455", - "13713112683648152584", - "15040725242882550119", - "12325968380422000320", - "1143715793852725044", - "6730056790438372337", - "17242811202186222459", - "11714736259999128780", - "1195523818666618258", - "5253085649501826504", - "15703869905884920828", - "11485597385654404805", - "5126020972629771787", - "8433734528292780562", - "9636245964727968267", - "4235264981896675387", - "4052882399531800535", - "17121980556668344054", - "1262472351080161056", - "1323620601444380736", - "8505552099467921631", - "7809696186190361997", - "12696846519290837316", - "233290706391760088", - "10391362485114624507", - "16520841819423502673", - "2428246865162942399", - "12165784221332321148", - "12895459484502953764", - "17786813136507541302", - "10030581827580433381", - "3959502842376045983", - "6382016963504978940", - "2004295103889199729", - "17906023168952779623", - "15900199295420848797", - "2776967413078463757", - "10549824835152408103", - "3924589954468094124", - "423598112663544215", - "18277175851448942058", - "2419700558439594257", - "9349021954534491934", - "17759375284175584661", - "11729536065451201079", - "18298193526320832358", - "4036541797465258438", - "18084475260052575747", - "8375724013392833746", - "2130618831424402957", - "11019311516101745537", - "915532887357442868", - "12183140713967544959", - "13730738752301206476", - "9041362531165233200", - "16795468732522623065", - "4251590257683173743", - "532184617918046639", - "7462376984910047628", - "1929209410322331399", - "629667364803732054", - "5860834161385407164", - "5547428541013612050", - "10493365575397738723", - "2374053973752899802", - "759467362835155942", - "3750195624946189154", - "9534934780658427721", - "15021152804999490349", - "14409026520085319279", - "7179567316515061915", - "10349629902626298135", - "17655151173476036054", - "7219424738692286957", - "5326915645755163854", - "6377912794027137697", - "8421820338576795059", - "17956341041684015149", - "1336923202661195186", - "6843327642299555640", - "12855971279942979212", - "8830376739111054064", - "13026149848112236467", - "16857607671986379533", - "9716141543984771018", - "6797156688806470481", - "2890989882014970733", - "388493802107042141", - "11484562894957595549", - "1303103300311822479", - "15032186467071366160", - "5136087891367498350", - "4497858013993524435", - "17142627955785993408", - "4614954839505786416", - "5107698604669779543", - "13242717140432197185", - "6845144517730512374", - "2120559807342640709", - "14366312017892427215", - "6997965425194992468", - "17890692189297576275", - "8542384088253460635", - "2788692424787388215", - "7825531750150036097", - "1918869105176697150", - "857519066758040260", - "18225130420306664231", - "6420467296355777864", - "67441222601969360", - "4161707302821021336", - "16743910487250028589", - "4129816137294120259", - "13277114426788545803", - "9910240257593387667", - "16952653977594402889", - "11402071663227351449", - "7906936658070600935", - "8751063268998216464", - "4232792840975381480", - "7273531348938786172", - "18285298526047783153", - "11621217468978394938", - "1637436997546258053", - "3506318426500531289", - "11602339800058773700", - "1585590509922288902", - "10272692936827804744", - "8888141354560131216", - "5159038666292494181" - ], - [ - "11350751849184099293", - "10900827693834277418", - "439388963145404532", - "13521959437501142396", - "2873454458144416776", - "2494699702334174888", - "14064391273745409633", - "5037623524431148941", - "5002070161803780939", - "13335742794774545515", - "8037659038785731777", - "8379991202548077531", - "8165077422143768771", - "9624242913781656348", - "5292604165512164526", - "4214601810754195670", - "15747334119752588507", - "10405287707095444813", - "4610085272533900462", - "4216483904112780599", - "3508213323871897987", - "15147434363539286233", - "7039835477045446950", - "6267848860527096000", - "12557164041453856961", - "485962112399396285", - "8405362789831159986", - "10171644387539529307", - "7646104574524565771", - "16899149906290667476", - "6706155290595359412", - "7687373536950343201", - "9352220011741150011", - "2874578854239859550", - "8687971288728298994", - "3998545562828966996", - "4365773927497922381", - "5839746122643682368", - "14791971216024413514", - "2004000520484889923", - "4997062711087837957", - "6074081199278021128", - "11753559443119571832", - "6571228815112508081", - "7917640799329546848", - "14227578312053218601", - "4211495198812517039", - "5617898145740026624", - "11263205183010933212", - "15799193497759773455", - "10016078883360850809", - "2419702257034664507", - "2915769593668599487", - "11392885571076472050", - "15443526755867138594", - "10114246627381353264", - "296560332993462271", - "13230282730881472747", - "17607647917451957602", - "13075730543952714155", - "234930954466926721", - "901982446281675282", - "14674140241236333883", - "5965985150445310510", - "4840465791233653540", - "10610076965630129382", - "12325664410842133789", - "3650709638296379891", - "9551944745655227441", - "14172522792761505355", - "7710368800014381349", - "14429130048440647727", - "11433890275844225056", - "10640942724964059822", - "6212893758857647156", - "14825971912898831363", - "17969718014348924077", - "14932039227614479618", - "1901880478437178757", - "16421134556705637484", - "7688648304697823550", - "6821559070023584033", - "14574440059148997881", - "15607640905391692512", - "13326309811368596526", - "342368914502173939", - "1325502531743133097", - "748859114951866375", - "17881885308569679361", - "14216935330975306867", - "9019172089398032884", - "3680856755754235986", - "3090927820072124254", - "15453041959585266345", - "4305040364281440445", - "16672919489413400925", - "7021004524081262401", - "11390685283806016424", - "13927529805783136457", - "14458735486512915944", - "10498666199044553718", - "15434392330452138337", - "13864868386099465696", - "14408788332135663584", - "13447282565773736098", - "5592704651698047547", - "2143220891421940636", - "12198995788319312621", - "8320393851575648978", - "12503485213765948674", - "15093830567207277799", - "17238470273025646183", - "16531420907370321345", - "9815401631228039149", - "4625388174975930388", - "10797918955373984352", - "136365345161585446", - "13934727723249086259", - "14319955257815757658", - "4837341060869820336", - "6254123020970513421", - "11753329972626173797", - "1434573250528593569", - "4433879498270283080", - "5907374086021321658", - "2680372903381997232", - "2814515755918320438", - "1883188584859025843", - "2428309339847512709", - "5681434553424063102", - "5935393383047093857", - "3738099288480444838", - "9207909704195674974", - "12570860082483952937", - "7270740992383420387", - "1547843615800623775", - "12843270942205635604", - "16346009733362387854", - "14293356061449768599", - "5356630609095889291", - "1228274638313686466", - "17214494197885866139", - "8866295371743464278", - "4292490886162829853", - "17341886026887261368", - "9841191132116337540", - "12300915206835872712", - "13677136857347440233", - "9518403177520824591", - "6327687374737106162", - "12833763563882685844", - "16528236774301279028", - "10611756459961189063", - "14011403046566848050", - "3544528581687346984", - "7355323796459692030", - "8265642943646127929", - "3254656351567168406", - "17332872086513057297", - "11726502324167902580", - "9149912035726590264", - "14073100535529389299", - "6517161646123146730", - "17465180686610631730", - "15760429455888218616", - "14547873047623934052", - "16247912291244958228", - "15380908812609812210", - "6594653671859160047", - "8460553403041859769", - "15077572526713530315", - "5023845453299603993", - "2647408565284935124", - "6415437753467537607", - "399209428191750084", - "10171049331346493508", - "504721519160201536", - "3532143023044823526", - "8634413731200456205", - "13779608451864102379", - "12622254617340912512", - "1689159373164138503", - "3830751578095738340", - "72071321812746117", - "1755466640342037807", - "11890759603370141856", - "3636649220350489694", - "1469462648749119352", - "7112001874470004601", - "13637969873865699674", - "4679664644261884858", - "16519576635601171920", - "15883308820009136344", - "15038250008091880516", - "10073276681622990647", - "2315736129378689783", - "2841534945672279093", - "10750606055792309360", - "4611823491133959844", - "3405211080247856665", - "9168778499152190871", - "9619168874779941382", - "15587611413706726817", - "6672922228868288797", - "15536339229384171288", - "3654534191624725740", - "6168394719362233219", - "12572360009678589900", - "5873267088425429430", - "3725547269208715970", - "187204220091081003", - "10238269284671594290", - "10159478274235755469", - "16853910712340381667", - "11237885161090553490", - "6910771539020384071", - "1851296766351326323", - "13086131837071954161", - "4078627780772844771", - "11414060107098664002", - "17782323568553369702", - "1543066992264202531", - "8730076713478971100", - "11083957660666097776", - "13487534054955136575", - "290263590575998921", - "13827499467937707244", - "13238620973046151989", - "2181694802331979679", - "592544803046311395", - "2103199700047518468", - "15226319346165534793", - "1312425355627229035", - "16978209732517470712", - "13909374337434953970", - "3172962602719674736", - "15617413715278415388", - "9358160459053193702", - "10907751143976571715", - "10848719554714486186", - "15168730460575504395", - "14806621060718153111", - "6163355349606761410", - "14801793702671584463", - "12163956359134216506", - "6062985620399584088", - "13878042128265997040", - "1628211088049142766", - "8255034086292631526", - "13269786317364767422", - "6144774042636061758", - "5676748134309525866", - "2464962859169111838", - "1835337668948833949", - "14369638829913588150", - "947361488230010443" - ] - ], - "merklePaths": [ - [ - "863216650107612727", - "8202529050335378059", - "3324434481355450201", - "3188187506824438980", - "11791245433858620020", - "3388384482206495117", - "6698791309394206922", - "12791711529634297509", - "6830225037355046499", - "5618052678267001019", - "14279351598490411542", - "12551116843767515810", - "6742948339853552501", - "14382771067761197733", - "5285823155889716490", - "12827034597396599982", - "14084189182319896378", - "11362199115326396242", - "15338679373422257095", - "2299692235188891716", - "11169025807860780802", - "1720682275880634423", - "7415966235300712701", - "3000625756079774853", - "12466887614661990923", - "3815572732364241757", - "6426000878080062409", - "10417451990987089542", - "8200310954436329515", - "18037123639860462119", - "2491066640052841237", - "12066731717969973403", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ], - [ - "13743470443781562229", - "3214665171899026693", - "6773640072077534317", - "14475046362204822635", - "14698684332668519977", - "12697183198628027522", - "9913839389305180315", - "17738287769298728780", - "5821873576649301688", - "2799063848808622064", - "11394448541296220915", - "1649373941486512716", - "7745498169363485864", - "1101430375002578510", - "3565132335380553758", - "5599923857088499309", - "10192517641811120506", - "14239628798272794395", - "7186204692940912918", - "4924295535911750317", - "15245449386468723948", - "11021057985345661417", - "10186076975512359108", - "13780509879349205899", - "5063403498525365521", - "12504174145448695186", - "15286411983806561283", - "2976053552530953877", - "10137946222981830099", - "1980333644985838471", - "17211801805050030978", - "16734929714833362423", - "14515058577901309860", - "12506611635058563774", - "3574257472005746426", - "9613533920947354848", - "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", - "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" - ], - [ - "4603564720696099511", - "989557075300076617", - "3892840484699996315", - "11339294980634340862", - "17614706484875770862", - "17540412432543426101", - "15598575003712057373", - "17073295190913465783", - "4878394558137877041", - "1650026209031762905", - "15976553990323278513", - "1875163916204600570", - "9742401159558262939", - "17183062473949279049", - "7909385412677778672", - "11842233347501647604", - "8755278064464564108", - "13828049997347637378", - "1400169486823588040", - "14895238478654166647", - "9373649302645823349", - "2958359895926813828", - "10054722976504387349", - "10695735513675984746", - "7668239193207099627", - "3979386198028698594", - "1710187412206670227", - "3982586635040871826", - "8200310954436329515", - "18037123639860462119", - "2491066640052841237", - "12066731717969973403", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ], - [ - "12875754889036309088", - "11867984176355570005", - "10042682110538358305", - "17084322398457183430", - "3377900705582563276", - "1982221105421886131", - "6097690731838857756", - "15496883225289478987", - "9145911179866453925", - "12585604228569105450", - "343265191919280759", - "13565679419794182627", - "17366232321789233875", - "16852700503700870176", - "730850571718316369", - "12031631487847360214", - "4462291038833183869", - "4708641281579664053", - "5711342483792347005", - "4656442006187808436", - "11515521488912705697", - "16295795390926237281", - "2914928737642585449", - "12592088379191954513", - "15867961070451434678", - "8967413869708077250", - "10964960846033696709", - "4697187747965183510", - "6924720603356631558", - "838725502648446473", - "11607188897176127791", - "15533341203949035687", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ], - [ - "2475173876939406334", - "14608888219425596533", - "1527475906575672781", - "5821416626139893933", - "10258218397252277209", - "1339182607184125141", - "5782831183580631972", - "12836688993533514910", - "1060070560840952806", - "11856276770801361526", - "15546964505876484086", - "12076571008836715317", - "17660343830540941868", - "16846017107056021795", - "10602973949794420622", - "11299619973135348484", - "2198722487028149641", - "6672668578494557108", - "5073149367636221866", - "6648636582422285880", - "17873018913418528410", - "2937100465232758043", - "11861890930030376148", - "7847981189431793010", - "7668239193207099627", - "3979386198028698594", - "1710187412206670227", - "3982586635040871826", - "8200310954436329515", - "18037123639860462119", - "2491066640052841237", - "12066731717969973403", - "3614226375826272275", - "7491177624591592139", - "6476218020108068011", - "5986517440276167008", - "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", - "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" - ] - ] -} \ No newline at end of file + "dataSetRoot": [ "14459953088494886308", "12400665201701660877", "8918969394875474575", "3734475392324688728" ] +, "entropy": [ "1234567", "0", "0", "0" ] +, "nCellsPerSlot": 512 +, "nSlotsPerDataSet": 16 +, "slotIndex": 3 +, "slotRoot": [ "6216356142838248961", "7651361162368135479", "8250178335123580371", "3813462866599431579" ] +, "slotProof": +[ "1345604040032513712" , "7222769029677219453" , "4856886058017005512" , "17218820401481758629" +, "6741690371018853470" , "10000950172891759230" , "1256624250298316158" , "14572953286928282395" +, "11250861626949238654" , "2066450512590186880" , "4406339264013603126" , "6649535526486987988" +, "14920223145083393283" , "18017129979212138612" , "1235310154294028825" , "16382646529383194172" +, "0" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +] +, "cellData": +[ [ "4111200969682878543" , "3387325207997927417" , "2932616927275391430" , "1995025627313496704" +, "1961347507293077647" , "1537181324488336218" , "3404404103013841137" , "3727710427346324943" +, "2138927732587695812" , "3715208475804714900" , "1454647159510086086" , "2849056681024814242" +, "2797770732564552381" , "4281068461220306323" , "2536791672187626673" , "187094301857999069" +, "4445112716515618692" , "259331173854983828" , "2153045190582574034" , "4304617055179540805" +, "221639124978313464" , "3304308916190250430" , "4089021076266286507" , "549033640858706364" +, "3044331879679251067" , "827587919550726016" , "4308334610113884279" , "4376001487296465758" +, "2355566683295648241" , "3612937677867517433" , "324879072152204991" , "4604327956877922356" +, "2924057261191726263" , "2354770520803503714" , "2249237342059505826" , "2818746003917675025" +, "3900053946986081579" , "4000975298798935391" , "322828372466088550" , "4250868332703693959" +, "854494083567288809" , "1244072611728971108" , "2559927554901977476" , "3324774724617852106" +, "1121127421087780836" , "1420818988498458600" , "831472750897778003" , "2168567604992124122" +, "29031593268236269" , "3647421755276834722" , "3986259886944478303" , "3345921067416441296" +, "13402926240441408" , "4421183053520442268" , "3201790561536980107" , "715823076146640477" +, "2754415368380477293" , "2949936321134401483" , "3474839395401159221" , "2124707552062842856" +, "2335485430641049073" , "4159019635853261564" , "547574573450363288" , "2154702348979979256" +, "4134963352851828758" , "1081302865101813789" , "2860564291276163485" , "4445835739319427715" +, "101201533965712487" , "1189762149663562544" , "3758693535869738126" , "3783353322678103675" +, "3474702117738007790" , "3074235448632480569" , "2577787124799568580" , "2323475333206976081" +, "3727929389140395656" , "504713527856300523" , "2772733426215402193" , "4597785345371857626" +, "2718133888660076442" , "4241166334257671809" , "3773495718228185339" , "1585470836972839739" +, "3905275032831739718" , "474118084850764791" , "3103165294613983120" , "809106277746366547" +, "77078292750204660" , "2009125912847635644" , "4334129009260425985" , "27914664153758694" +, "124183207760005694" , "2697644494020638873" , "1450582017557751997" , "2502694172625563114" +, "2740289107361865643" , "2712792501727369229" , "3071717962989657709" , "3341174445798330484" +, "2682651989210624359" , "1307526723014652984" , "179080794167069577" , "733133405798895763" +, "1968208516111884241" , "616726862203855605" , "3416520294945343392" , "3087673580377118030" +, "4492934591495466062" , "1367433602106674104" , "2292594969558892092" , "3496174638708163871" +, "1564175426693493214" , "1857069202634712791" , "3507703991356295846" , "4321354599820788562" +, "1933559093976823439" , "2506982692689670503" , "2335226876498022814" , "1756434612888038379" +, "2291735429251398871" , "3272557233784814701" , "1809699743445877700" , "3816856311479577580" +, "267950068872586384" , "721638994294338152" , "1216119273831318463" , "80053828028318046" +, "3560572514732187897" , "67245162611487250" , "1328217792914408215" , "1810477217048845046" +, "3119483990704144534" , "2066620474867043288" , "2523262138385687043" , "362691473327972498" +, "4598598868398188905" , "2774627440956921156" , "1628248636575611249" , "783002716800150996" +, "2613551581444565337" , "786725214529311687" , "4039260154995749485" , "1763895279097705375" +, "136527392068420286" , "513510190194159543" , "101962925982303979" , "1510157729819943802" +, "2330496005485118764" , "4000105577985578320" , "718494282380928926" , "2383517511824224511" +, "604197990500817771" , "3136971506998756433" , "3805138655859277411" , "1038385800740847149" +, "2122441102602688988" , "2311548995071730590" , "3125457545937811808" , "1416440682927465239" +, "1964367996399419205" , "3248660041939743727" , "4378487656428293722" , "741029356261789514" +, "3748221582368077009" , "533602551966563701" , "3282997084915483113" , "1231084572180473469" +, "3101179494144344034" , "3093205585436474945" , "3310012133156627299" , "3621605735885467729" +, "3124055322560316203" , "4109105559621002367" , "1653594148441457035" , "4332483426975350034" +, "3128791066896671630" , "3887278857891362911" , "3800172414968149810" , "1448401594644363382" +, "723585641772663768" , "2093179871223812466" , "2047800924815603061" , "3497650546718683561" +, "85833608374463290" , "3156547449332280267" , "1504677293871231369" , "1862764179206336726" +, "433821097900675005" , "4423255150988169390" , "1869049632168030510" , "3537248554988173472" +, "3135567919321587466" , "59138030503916467" , "404986263418400711" , "3426158735292024614" +, "2760116461917317810" , "2765796058087423764" , "1650995702197220856" , "1557535858445128723" +, "4257359473731533882" , "3835704793995667782" , "4352636554728767509" , "997252253590194569" +, "3737003374149059427" , "1322430971271905956" , "2755339423941703565" , "3391612788900790099" +, "1460681206394994196" , "2715817034082647845" , "806862389131961876" , "3152342880005229524" +, "4380217121047074139" , "4258103535158169693" , "2385457763972534377" , "4264480050562585615" +, "3412805117945145990" , "3435951942136979620" , "4097351347079059951" , "992914614506707395" +, "2005824081553683499" , "2319178920306968620" , "370837535487542853" , "3087560580926660094" +, "1083460313090264711" , "4482662514768920601" , "2656944137720080249" , "2649218097512041923" +, "2917715738356780065" , "1732641010676924796" , "4217252956018746972" , "978331566086950332" +, "3869223900929810022" , "3769840101624562479" , "946179666777742606" , "292295823696793243" +, "3659177233315384652" , "1854765096914974433" , "3762708774876587040" , "1222463533452030663" +, "3922722120059662793" , "3835830254335161100" , "2165030581383031435" , "1907026954948407123" +, "3790519940998177702" , "4017268473312137414" , "2859623361020640825" , "33918126679757461" +, "209081036798970399" , "3655976865540575992" , "4369372716842525678" , "262859757646325118" +, "172795378700495550" , "2578381167144733861" , "984917776960728752" , "3143105712253023288" +, "1130341035935710337" , "980824067806251077" , "1133707772968996023" , "2448825588499779635" +, "1022554427485498709" , "4149557735996014227" , "210322022232931300" , "4321917687253745218" +, "109851" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +] +, [ "1740247924101429115" , "4076899211406316800" , "2740294522385674890" , "4513515597031920585" +, "3890295521635620764" , "3903514916766118946" , "2469053593687320765" , "1927258944600359179" +, "2968615827183516338" , "3689618118861200518" , "1031372939054649472" , "1160040347519875842" +, "2290711972580904719" , "1262387029206600958" , "1610027556955263330" , "858435105936868455" +, "604116268270118160" , "2787118114566461420" , "1228964852938398132" , "1317908183990527513" +, "4122213493373894732" , "698702370829118884" , "860524147185089598" , "2427479531219887269" +, "4189544695706508114" , "448638170186506326" , "613435978962882295" , "1999341910201706383" +, "1723586248401252047" , "2961198498193378175" , "3362584888439142575" , "825849071715979952" +, "3692164194230014933" , "3360869706514970844" , "2405679623070026282" , "408995571663877990" +, "3613694856153956375" , "4217462972249558426" , "3729858483507208511" , "293259059372178850" +, "1865109397070692915" , "2604311632678145909" , "847427973491741092" , "157854495767521711" +, "1744748983941024631" , "2716923401657556654" , "1309187368991276347" , "3377086404443872538" +, "3268228995410361899" , "1390590013231769735" , "843321359797834567" , "4377862678787274645" +, "1762633846479541110" , "3504309754435526908" , "4105361296916375418" , "1996786457690748387" +, "4385290136985659892" , "1514980045446969037" , "3792755388344933894" , "4371381066397542899" +, "2362552373871863651" , "3190002817734611373" , "1433464277171295671" , "1908924694486781913" +, "4084139914214156588" , "4354675488265033892" , "1507350556899056076" , "3657538233619727818" +, "1604171879120423301" , "4370420407338374592" , "2971314578911797646" , "4420872655040029801" +, "2513152870342165646" , "891288922577365469" , "2637159796188441434" , "2721086576957952589" +, "2910289070713016799" , "157487828591049221" , "1098745217390755146" , "4503163939253693077" +, "3282918787641454003" , "4417455552150967880" , "4534831605894389500" , "2145028049100003680" +, "3438691870746395183" , "3799124582190096529" , "3814236898776615901" , "2929311423812309556" +, "882287390383490059" , "1840231491456374045" , "1604957791486495283" , "2685781010650730476" +, "405551328684509400" , "4109428449850090546" , "2287386738610412120" , "1102826798991022350" +, "3369052660962246195" , "3400251041646588058" , "3792704257748705509" , "154318897679130227" +, "3601341568781445917" , "1815421129478477193" , "3730184868009598910" , "2050838087330047062" +, "3674674550801913735" , "3448185771829931687" , "3369043043018450647" , "3357076207316393124" +, "3639898142526596914" , "3671116533410970031" , "1489504295580236227" , "1244078290837664852" +, "1492673429444569148" , "849512542602903874" , "4493897496253735964" , "3059885178524483403" +, "608314302162510787" , "2184761026382301527" , "2766818245282136321" , "1117918175269250463" +, "3395422328511115980" , "2121044414107285769" , "3141485994933322028" , "1129025632440526055" +, "1245845587859245647" , "2493998865463134242" , "2932877222041015003" , "616520034738720678" +, "3436715504077232702" , "3498349940167621228" , "1675100397690396990" , "3329019848715543351" +, "2011575105055987900" , "3164783028667496422" , "208220243896927970" , "3350233803493997954" +, "1086154613409624399" , "1584228202526684473" , "375970094484699389" , "3112993245769759055" +, "155783341694243182" , "1330151662533921300" , "1954049591109334638" , "3022325775736865511" +, "4084059835013475084" , "2314885887195178432" , "4029203188834676206" , "2511023319010113181" +, "2607221340783972382" , "4124310369000351777" , "652633106766492702" , "1343391239155231328" +, "1433378117535115127" , "3211578682153665966" , "866638607975787142" , "1474600303508843892" +, "4252315049303154917" , "154649040170904710" , "2659271626752154890" , "4026055544109582753" +, "4587000127531341085" , "228689208288643289" , "3071445791017824652" , "974768627319060133" +, "3435598662213761019" , "2717424039722393438" , "4206582327715198138" , "1332795598098933649" +, "1890386717132391369" , "4250832997085526718" , "4381049003932567083" , "4202782160516225415" +, "3352021238119475619" , "1739111923876519219" , "1143755492632516616" , "1726588181884562216" +, "735502438415293103" , "3964715484174518426" , "2585437392511277388" , "348852864212095828" +, "1920831584411789075" , "819597068116486364" , "4038814023584915027" , "1674714616716492701" +, "4164439961562935436" , "1184307289365646644" , "498834566750665744" , "1014636180686852576" +, "263108527029350448" , "3419203390527229493" , "1591046683846946094" , "1128479034666427823" +, "623856640086412828" , "3009277813855588561" , "4302732515176733762" , "440094952630958707" +, "700433279943211520" , "3734993401692576364" , "567142770971570149" , "3351356786661839173" +, "2337375191972234379" , "3676594625892375450" , "3195239127947323539" , "3274572739335572800" +, "722438843133311029" , "3632640065135241434" , "1406870168751385884" , "3997729982639099225" +, "4152410130580995722" , "2444175749731805317" , "2252991114853718909" , "322862976488447192" +, "289600462246444089" , "2078561382367926548" , "758971031321665284" , "2563237838864695735" +, "832793656366225708" , "3745983751681651235" , "1939686285994381906" , "2331711706443056241" +, "3101085416466286431" , "4225612617764736033" , "3527812509561136890" , "347233014593799249" +, "2251605915000189804" , "2027694949093821735" , "2211424286732840414" , "964287100987581971" +, "3736654886072816302" , "1188279880302832876" , "4491110567041049837" , "3634462972769884428" +, "574910107083290322" , "1437740518720929047" , "3009972588929306780" , "2753324902041718172" +, "4295252301355742330" , "546473556218819594" , "3603108839024607419" , "442174043480035149" +, "113911089973870374" , "2358923856122416931" , "2063957394518861613" , "4000517799896203183" +, "3598940743247845156" , "2086122670432549377" , "2899025127998528180" , "3668735081946404988" +, "4420185708558256958" , "4261416569840974841" , "648091691717925440" , "4308128932111313861" +, "4471666908494364342" , "372710140034101384" , "761369993984953570" , "3563689546399894847" +, "298549818361379306" , "3397069628239614794" , "2912593475200042894" , "1608380753914775026" +, "454206761387813136" , "2722996350971702783" , "2233659965767739326" , "94170365089341541" +, "106098" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +] +, [ "4269217080107917315" , "3002529947471764372" , "1410485619074271960" , "2412172837606072799" +, "735982899557536948" , "3126813882817885979" , "4554487793657015374" , "2612394731416256360" +, "789441106544735984" , "2840473353403557693" , "2491349202704975507" , "1322247417319014707" +, "3489298261890375408" , "120921204875429723" , "2556995975834403956" , "1322569991502939901" +, "595663518169734633" , "1976947952694156926" , "177419009408828844" , "2981656894867057950" +, "933683991600842717" , "1556024341947015075" , "1528832387625930425" , "2258418808672006542" +, "322189633024627822" , "2901386242713213802" , "2107153791199786102" , "4052762187760749544" +, "4468308413635939273" , "3754089616358444687" , "3217503950858778236" , "2627399654855737333" +, "1065085773191920427" , "3481487962215039208" , "3608060193157369043" , "505500163679529188" +, "2032274213645330882" , "1867777459785160091" , "4090211671831159534" , "3661020466081829892" +, "1877103857757113696" , "1007989508541195228" , "2665585298040398907" , "1748164637661419113" +, "4048760727523549475" , "784752931847224418" , "3553111610738846743" , "1918868442483758769" +, "1025534032072748502" , "3982276761682013531" , "3739956343125563241" , "3391152095090929847" +, "3159671034808006047" , "3087632300253926367" , "3726958436444389790" , "1612709058199034646" +, "1813691241632563076" , "2739006205621012281" , "2558630501960152731" , "261665221835472147" +, "3854879658920644098" , "1403153273197001276" , "288992136186323065" , "2070009193273042477" +, "200374876600540888" , "2090104854767178727" , "2297937207665675965" , "2085896524112114488" +, "602263733186440786" , "47385514888993093" , "1656145679924341936" , "695508894659282789" +, "1005096926141116532" , "4602779206702860999" , "469097243194684892" , "3892877616036353276" +, "986652829478757461" , "223210426495108436" , "939812352133045105" , "2170625073972023415" +, "3180051650474840564" , "2658822860098496976" , "642265539292867361" , "2550248824891340472" +, "2614188123440237895" , "500028998005890283" , "2428877111125298535" , "925552511724042478" +, "589811893861642503" , "851086453874682365" , "2699737757775485327" , "1103497768561027088" +, "1787391592434004074" , "3035352497976605590" , "2285520883319247194" , "2469901128319806150" +, "1861040232417807455" , "45414959312010764" , "2311948019031419661" , "492172463312075510" +, "4112861065337729260" , "831647986402230099" , "3183760295759876064" , "3438452349066514620" +, "882517070776505781" , "3317396599233980334" , "4240145096914809302" , "2011262586069274960" +, "4103953558296647960" , "1418702271879404371" , "1959919418881369895" , "3014669647349013320" +, "3237074321901702006" , "256816243701201656" , "1587918799048199096" , "4429146953010531024" +, "565468721530027539" , "2980139394704656668" , "2281473537586627910" , "2762072807084836719" +, "1486570444868871404" , "1849263680617777060" , "2741397340574396227" , "1701463323648166586" +, "1192808620877578746" , "3977982114493820008" , "2841615523241411811" , "2461942625004967503" +, "864862364754843617" , "899912590774276666" , "3910738009171267548" , "1422450704220784819" +, "2823399222032852648" , "1532361859692609374" , "4444580144236762437" , "4523157819835923738" +, "106098318269852896" , "3986558867800806807" , "1745040207027043254" , "3211749465276535570" +, "2791132508437805945" , "1726892885296791968" , "1840710446032440285" , "2555502709646605682" +, "1920957178136545389" , "625440214405951583" , "233132155951932024" , "2271293242458751629" +, "1916458030493781998" , "3079975750766311175" , "4385946880827309392" , "1491387941386491389" +, "2290674866190483816" , "1307043017044232725" , "1587867447473933966" , "3274873995899517535" +, "1575648891314254896" , "1468758773928690682" , "2988954328483840712" , "754717958497851970" +, "958894104350147851" , "1385639662707185527" , "2441501061593081231" , "370757457305386857" +, "3063766153228284197" , "1503211531675869072" , "2240594769350305033" , "1991914690279289572" +, "4397607093791337427" , "3087827333841347057" , "4049673731898354309" , "1034997463794810186" +, "1801050255152298003" , "4075659800348359018" , "540583941027491123" , "852201818472145202" +, "1635546953483627016" , "2198406301876731211" , "2365377194525176813" , "3763507075044466444" +, "2615506326697832598" , "2085515881029168586" , "3173541310846010286" , "2381323695947433609" +, "1415497488454315707" , "1893132992753540543" , "159231429263297891" , "663019843120498766" +, "2528183577280516060" , "3222071957377155289" , "1343654081919068430" , "964001076591402465" +, "1802148986473543877" , "3624604862914189406" , "475618852845084558" , "1641224167482927147" +, "558070326565299465" , "4468758352374712192" , "271801347353513521" , "4147909304123525049" +, "913733661991382335" , "3493832731564656596" , "446401282583683396" , "3625033362876913384" +, "727981844130152919" , "2355109423745509012" , "4344513483564806693" , "1088123283181583866" +, "1269257038191714510" , "755885356245804755" , "2680370426584061118" , "2636534924656666957" +, "2812662215915486130" , "204907474557831366" , "2277523053219389771" , "3494625316811556466" +, "2251371057826067857" , "3984958506656195405" , "1043411628143119281" , "965260509922522101" +, "1452681651394098308" , "1928906814480856517" , "1522662701059844384" , "3940668726166583310" +, "2318241343726496365" , "724943314353507760" , "1598209935237229414" , "3713665373396873937" +, "3202788579372926993" , "3650619177113211660" , "4106750337233566087" , "3299485301117379231" +, "3463058546657874282" , "1989867058486124563" , "2235039597165542009" , "2798627659952166199" +, "1086159084416669135" , "240212879075016729" , "3610422649631706349" , "3338673654008928052" +, "2756582177872374553" , "2858593688875150399" , "795972438017868699" , "1518344596392717507" +, "1622079393028597250" , "2359619858799117861" , "2632655552983988075" , "847473853922990637" +, "477132166834364404" , "1614078183324599535" , "4243589195534839931" , "3076493426286382189" +, "1803508460576784247" , "1037301339405262447" , "1662612656027017382" , "3085108054985072695" +, "764303457255820768" , "1688744926479925688" , "2037821477264833556" , "1457055616663297762" +, "4349298316035461802" , "2313813087589802506" , "4124925054569713583" , "1745089117020077554" +, "128009" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +] +, [ "4034258811268727131" , "3747903721835719006" , "2915060974245649894" , "342268869424411050" +, "2828618065782119503" , "4549677653382332109" , "3793879338695881009" , "1109056251282680760" +, "2076963639258163690" , "68558097751707552" , "1065932252746590842" , "1311691949688338375" +, "1544822431166405051" , "3138250420935986410" , "3831943302525073074" , "3379173993932715430" +, "617574271763008743" , "2910336113661804832" , "4209319645020586650" , "4350875593377970693" +, "168147635635558495" , "100137458425461499" , "361348144792776416" , "1905911283351355008" +, "4382748444635181137" , "1859508053613754665" , "4141609283310046708" , "3239774328216985835" +, "1006970701590879797" , "582385908075562107" , "1993368531721371396" , "4116950789841207986" +, "4348323119375560800" , "336551841953193797" , "2776409846765966228" , "1017592380367072177" +, "1572767989013296701" , "2676220325748701320" , "155522884005268625" , "4569373692831779077" +, "1901348869812955684" , "1432454250909224407" , "167976466128008872" , "3319577092833020986" +, "2594252293894598800" , "1427227988658253092" , "3186852682845959816" , "74409632769568017" +, "82493767425828584" , "2375643263266247001" , "1263139615711367468" , "3259724224887018668" +, "2182856907113974917" , "3615754531117206186" , "3289458811844216286" , "1192068880553730738" +, "4315229906269155766" , "1372241243661500621" , "1214204425620881351" , "566415669586456325" +, "3689514131691563486" , "994413662019578564" , "1991739235662019382" , "1200301986205483083" +, "259599505393679913" , "656057734119360815" , "1890057182639032696" , "2052486473606719025" +, "2273769158435343306" , "3566289986762825150" , "3875043611909078571" , "2797235889004443582" +, "4606071113256315244" , "3164954935311312052" , "4603538855186042565" , "4590558009846370322" +, "3911769446705370614" , "1322695775546030769" , "4074251421799962732" , "3276395048424377247" +, "3364047784202721295" , "707971968192296130" , "4478201459490950368" , "417342652224710615" +, "3710048229567942579" , "243105651372125901" , "1335786873187158963" , "1064547539559377357" +, "4040142256414689712" , "3247209950997871336" , "4520816560928353345" , "2876982642158268689" +, "1557461529091414378" , "2251046400529334790" , "4399073735722609726" , "288200234089439522" +, "1799271808882054954" , "3375377140402158074" , "369563638355551847" , "3265960239537616297" +, "2766715688631960996" , "389811442837290425" , "3970638659170937219" , "3745215392975298489" +, "1666749384170497586" , "4395364368258962112" , "3095933287235481830" , "2404553171347076937" +, "923914309133067349" , "110512329106909005" , "2571213514155772759" , "1608615468027306193" +, "3048031461289902529" , "2250184535440197257" , "3842601759395432384" , "1048997399028863606" +, "1101069807581422728" , "205472880281761342" , "2536290833437606961" , "2699837461100786536" +, "3295411351199015347" , "1916847814122984956" , "629815332996880247" , "513249329308473362" +, "2915391358008275194" , "583278642434764470" , "1733840426942977026" , "1530474950141369160" +, "639584009366816930" , "2933424926250428254" , "334507876526688560" , "1307694710160984501" +, "2577508023309377005" , "3642804190098490557" , "4437095278206366511" , "2254150624260715970" +, "2139231036716350578" , "2766540836222040252" , "4491404586413201819" , "699312550883961557" +, "3118167877768394458" , "3355709382841365489" , "3865620940871347792" , "1307584790838457930" +, "4080650036711645354" , "4463218759346529389" , "43970965558380393" , "3455228703619535131" +, "2193764858103935376" , "2871732653415886738" , "189763178356227238" , "2648014131876669366" +, "182205767269906464" , "3250429063499634285" , "4457561747449361987" , "4230664686238075478" +, "4195469071241820394" , "3694445673738644831" , "188551364087861924" , "1435496809726568143" +, "1653013391855985938" , "557316168815842068" , "566565519374138725" , "2760524227075749924" +, "1926928551043772910" , "492555028768783230" , "566590877769045237" , "1840037698875425501" +, "1151317328330147511" , "4169547369930409304" , "1929757148545418022" , "1685341382791060441" +, "95567160303065373" , "610770537258850513" , "1856963553471385494" , "3906416155852487197" +, "3491575212902766306" , "2915555939576079229" , "3066524882109743886" , "2050966712803315247" +, "4436867151341965219" , "2876133991093047589" , "1531558931389985516" , "609295401452253136" +, "878136522203982246" , "736573217458225186" , "2896838713462176324" , "1239694122903340249" +, "3568720184842846977" , "2438659447718085650" , "2307237960575751971" , "2874424632537001946" +, "2114122649700690944" , "4158282920229145252" , "3581231995086054003" , "3212872322384170124" +, "2597981302786705302" , "2383845074619489599" , "1666408275696244301" , "3193620155608629851" +, "604193242668252601" , "3116698393649158584" , "3496906759161849810" , "1550067100036854871" +, "1302361190183266894" , "2801643178516380439" , "1316257918787671092" , "1712535271201799992" +, "1519805723976433477" , "572953496803780160" , "1537149374868240126" , "4525203334696189752" +, "1651333964279501388" , "4450400634056729786" , "4315888781773972025" , "2314444543238181166" +, "1686214067882920884" , "75588805091420152" , "2164015379901309587" , "1431800025305561432" +, "4554871942226940256" , "681896366615087175" , "4107629971838150522" , "706913327911266223" +, "4267969105887702650" , "4534750020289987791" , "3325157788413592143" , "4071858564498037886" +, "17749945396983179" , "615788952756878455" , "3815800775926733402" , "1875768056398886392" +, "781573997886719383" , "808579595702316284" , "4537987737262617433" , "1479298715038519908" +, "1458085359981697890" , "2319092321717084364" , "1000045781174926009" , "4033481308942455678" +, "1944720254698959703" , "4411507657321965437" , "739076175520307092" , "2831115737844256114" +, "2939691721040033520" , "1180885103423573403" , "4405258893921740449" , "1142722576435559326" +, "1276528694337546678" , "3739321411385173515" , "2859837460513398498" , "1740605769974335770" +, "2562485060480653378" , "3407175589759234111" , "388040142502699120" , "285978442519040419" +, "3212906882331004682" , "3354358794709257316" , "2790038108176267653" , "3997701335533752205" +, "262114768528636505" , "2952771560557473695" , "594966962978633438" , "1050553650730158820" +, "89402" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +] +, [ "4585647360169792715" , "637092895853869247" , "3680301794979440480" , "3272240410778951745" +, "1907588772344321794" , "2118392365386677260" , "321114416898931728" , "4368009528771158492" +, "3040901449782471172" , "1763902489192295806" , "3436122906695846062" , "3877316532760524033" +, "2927605622262285722" , "4273603369037493315" , "2238093637769952593" , "465533404698505241" +, "1274022518146607189" , "3679274203742965597" , "182518914421704117" , "3088355213309652341" +, "442175882298559647" , "2624542502448096509" , "1181878371906476667" , "4002265688512198793" +, "355435372633049250" , "3646184600300258220" , "4120840758593657457" , "1963056284354583097" +, "3671750817852836075" , "2549133830639179039" , "2137205193743930975" , "59648369268099622" +, "4521643247863200466" , "1787603390667754340" , "4410761777687154103" , "460931760009977310" +, "2035868968120383183" , "1890176898911809526" , "3866198267444783518" , "4574142902242889742" +, "2068690149090293140" , "23483655452108849" , "1641601526235922484" , "1209317114873179397" +, "4057889490377590115" , "100206208205579869" , "463390678378481407" , "4599029785588028659" +, "954972794129401430" , "2172858440467935733" , "1932968841211426199" , "797936691786011805" +, "1693268917000782269" , "2736706931815153940" , "1673819999061234461" , "2585078955629062846" +, "1008877085655280750" , "717304752597676106" , "1762010368325490064" , "405423855065293624" +, "2872389664080832515" , "2194054485519583783" , "3649142805955030625" , "110303519806246991" +, "141391826309699575" , "1415507553047999020" , "1256417909728789924" , "1044890571791003713" +, "2462084135651050297" , "2041354866627844070" , "2288583844265384266" , "2496153536323947473" +, "1125058162910695329" , "683839509616110758" , "2095686486212194940" , "2237405805607643186" +, "1460372125944900836" , "1979665962215631160" , "4115263130171348457" , "2978764308871310876" +, "1610502036996964485" , "4160427234137384333" , "492390303037973971" , "4032883445122087245" +, "2935596346809814838" , "4503125268917720312" , "536896610281104580" , "4525587308028008088" +, "3265251638288306089" , "2977408702889014075" , "2489410661914759990" , "224793601637439379" +, "2706455675496190497" , "4584876448294189762" , "1649223135950255576" , "4321261765447156991" +, "1527170886046608304" , "4412687983008422151" , "701701280870054007" , "2629450753627733594" +, "1683433298656108845" , "2036277688276465844" , "4592482322340907336" , "1693145671040017448" +, "4262306691582335749" , "2481715786421298923" , "3700347177408511442" , "253650191096688594" +, "2369579471735274041" , "1178995183013596539" , "3715845855134451849" , "324433903018407711" +, "2702944824638582724" , "2850194154098227888" , "3925610040601001177" , "1568465845460912442" +, "3709488707504803170" , "2496304841161334755" , "3356463215924088751" , "390087558743705651" +, "3146792706887611132" , "3652829400091104177" , "3529932428983110069" , "183903644958988700" +, "1408718722936060518" , "2349074789330064236" , "3092272642502306770" , "658519625390452289" +, "3054268205845223046" , "1800093047391782585" , "1816038197766132514" , "4259871600934857093" +, "4031138263206185790" , "2736035190950736534" , "697078701681291341" , "3843811334842978991" +, "1327155110095089894" , "4233265598798480422" , "4478047016788071315" , "4460574795296070623" +, "2314161259131064436" , "1706485008935801151" , "3361316189833096783" , "58722395994608625" +, "1897221512849417118" , "1446863326430381912" , "3441506136750767338" , "1196155297844881885" +, "2151891439507803370" , "2528830923170162970" , "3467147251790540268" , "1925573318675310711" +, "910897726872158593" , "886636637469203851" , "699415088519809866" , "620549995522399744" +, "2720318249942851319" , "1500725603840125008" , "1046059893110617521" , "1291858299307502765" +, "126454272744965174" , "544760937627253094" , "1461492078942643441" , "3867578530080271582" +, "2808740404808488649" , "4043252821938006002" , "1405797315043545553" , "3043065161768601984" +, "4132567650742225426" , "2763152476802377995" , "3154672501483406549" , "738478938354693182" +, "3502364167659541782" , "4119851605145463023" , "1394776259484880068" , "4254053148395761053" +, "2766872521161867078" , "3387767449873169764" , "3333865894334693564" , "3927419868603461209" +, "2623947431017153930" , "536382778743307605" , "1664298717831184780" , "4382292103972261877" +, "1778838356301456071" , "3191832998335806630" , "759353573157166473" , "2258266633771544587" +, "1840033620012410471" , "207674819160438351" , "4498753874550176532" , "1785612421113518194" +, "2983772418443509274" , "540314127903744468" , "4529810762091361488" , "277832436168781297" +, "898957249522448991" , "4213131705487228769" , "4560508554318264762" , "3507562348512978320" +, "303685799839028746" , "4054507336076804416" , "301826712272177575" , "2602117677727442568" +, "564063056010460730" , "4312384978348291599" , "2285985095934913156" , "1116468530500719017" +, "2733009317567395781" , "858221147137389636" , "2802498280405563903" , "3980651357858023491" +, "2247012173149371056" , "1384802880189130822" , "780761584789737132" , "4581853320062536258" +, "912585638091475355" , "3129677796094758172" , "1596770183618478602" , "612979441521138809" +, "175615052289326610" , "1260513110338939949" , "3924222087534503828" , "535966268729661117" +, "730575115507149430" , "735349088147729394" , "2778827585126035462" , "4213549720835052555" +, "298372445350557516" , "3501309051409557259" , "842575147545701996" , "173813682935984123" +, "1388792571375942475" , "1455150440135641438" , "2260219559743886715" , "3107826610681383421" +, "4376410395106051287" , "49855704996896609" , "1589584590475316183" , "91435248312387748" +, "2282798535294398412" , "1888932451254878767" , "1574226381317583077" , "74115622574787929" +, "3435564770168676636" , "1076395275430734247" , "1572019728185895810" , "2725697364159300211" +, "74184766091540040" , "4562065544904886858" , "3670338608895294796" , "3371125856901349116" +, "2218636492951209708" , "2856521937383034418" , "4082442644917294560" , "3760165073964257381" +, "4296142666541308754" , "2152654961013012459" , "1215292761610185781" , "3989529837338434741" +, "2500940227765773601" , "408703817990298007" , "1257857444576143597" , "4574255700170983201" +, "77731" , "0" , "0" , "0" +, "0" , "0" , "0" , "0" +] +] +, "merklePaths": +[ [ "9834617050221860669" , "11413351114854288773" , "9661533288504321674" , "9993562115511150911" +, "40596393986291956" , "6738885603367353421" , "10026638978888874626" , "9990782655098669043" +, "6958452223888496824" , "7445615281374087287" , "3655095276382107958" , "14835878204613494021" +, "11015824641572930280" , "6056980346481056257" , "6824090081898407148" , "2113969394956659120" +, "6778109155961807653" , "18174770895019250057" , "10607426966322341230" , "17965352660033392569" +, "144240798700931663" , "11530574946682703691" , "8355604947418566174" , "6103188823783126937" +, "4000612478508899977" , "8397442622676597751" , "13242454311279131968" , "10592266448750114916" +, "1263866799050840545" , "18151952965040454658" , "3483398585178976437" , "7449270796943584753" +, "1136242299330249726" , "7608457769884715833" , "13580287345497539746" , "16479758974647629501" +, "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" +, "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" +] +, [ "12277565398883697065" , "12966826759417505082" , "5795109041248799435" , "16350534932773079605" +, "13964329456201248279" , "12177226905544071508" , "16878549604909533046" , "4831646808973125303" +, "11979098715829099124" , "325848407665776441" , "12976738426733958035" , "7465517250240442027" +, "7353866537984482010" , "8443029017649882272" , "11104194545718927887" , "8939299725534350324" +, "8602711423734886011" , "6761073709857852548" , "1635641880460770607" , "7697913814958120287" +, "1235524795390281371" , "1292729621304636804" , "4596091520835463012" , "12310606328363584857" +, "12887193143336132435" , "130991362062484114" , "10206445096175313452" , "9099408428750151040" +, "15935762892386899695" , "16582893623466051094" , "8773256083473141790" , "6310382211943425947" +, "16099314040403866093" , "12549936286293566773" , "9358051429526891720" , "5411364965461459503" +, "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" +, "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" +] +, [ "8675946949755015264" , "14389130687241392837" , "17682413887329223517" , "11929399742931727625" +, "18279513764132020454" , "9366153031008754896" , "1161364267968999225" , "1541298602850740777" +, "5762526300648633401" , "15060965457752732744" , "197739587337899268" , "2452043592173906867" +, "12346542879087693892" , "18359959275067230319" , "16836398065760064101" , "1541769849053040938" +, "276092587984131724" , "2406700358930161058" , "3756885899371763970" , "6024375329659067589" +, "3621084053329100874" , "17194883189804166156" , "17748720327722260252" , "6804475603834117414" +, "4000612478508899977" , "8397442622676597751" , "13242454311279131968" , "10592266448750114916" +, "1263866799050840545" , "18151952965040454658" , "3483398585178976437" , "7449270796943584753" +, "1136242299330249726" , "7608457769884715833" , "13580287345497539746" , "16479758974647629501" +, "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" +, "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" +] +, [ "2014126693772473758" , "4721303185769578558" , "15086279296374402050" , "2885937490215767929" +, "9400460128488157524" , "13275042069570623686" , "11785798308338023689" , "8062883252203070626" +, "17251726025829636869" , "9286694173558625140" , "14705903578307684931" , "14917462102530245161" +, "806491059107730621" , "11945941923097768442" , "2235457049536883281" , "4138299859997790382" +, "8589405410594606401" , "1814976684727025548" , "14527033532487819091" , "10240414561802292563" +, "14742464408095144171" , "16544693206367652302" , "15838189002094790660" , "18391909175493208822" +, "2922300906810883188" , "1093851137768273969" , "17114140682760652883" , "16623253816502961246" +, "9821745235529706132" , "8498976871983154550" , "2173719562183224871" , "15009364511706365378" +, "16099314040403866093" , "12549936286293566773" , "9358051429526891720" , "5411364965461459503" +, "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" +, "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" +] +, [ "15307040056009449864" , "8430744368882257587" , "5208920732682010010" , "2738412775374354188" +, "3190962989799627688" , "1544375688640491249" , "7184114604083088049" , "974119149852979888" +, "14424936762437040165" , "7590102420731214238" , "5556435183401744867" , "2962283806633179954" +, "7069457919655947376" , "17107523070819849925" , "14011394415365107360" , "2098752472097163481" +, "17557157386777867198" , "9973017664694461503" , "5970806457558584534" , "13707375376876415401" +, "10133432455905105372" , "9393758708900450342" , "16768953102210068075" , "11397644483005454082" +, "15105488844782799105" , "3006015595587065888" , "14759981272899772376" , "2352254281822318718" +, "9821745235529706132" , "8498976871983154550" , "2173719562183224871" , "15009364511706365378" +, "16099314040403866093" , "12549936286293566773" , "9358051429526891720" , "5411364965461459503" +, "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" +, "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" +] +] +}