Skip to content

Commit d261f5d

Browse files
committed
fixed test
1 parent 6482ec6 commit d261f5d

8 files changed

Lines changed: 666 additions & 490 deletions

File tree

zk-id/Cargo.lock

Lines changed: 166 additions & 231 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

zk-id/Cargo.toml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,30 @@ test-sbf = []
1414
[dependencies]
1515
anchor-lang = "0.31.1"
1616
borsh = "0.10.4"
17-
light-sdk = { version = "0.15.0", features = ["anchor", "v2"] }
18-
light-hasher = { version = "4.0.0", features = ["solana"] }
19-
light-sdk-types = "0.15.0"
20-
light-compressed-account = {version = "0.5.0"}
21-
light-concurrent-merkle-tree = "2"
17+
light-sdk = { path = "/Users/ananas/dev/light-protocol3/sdk-libs/sdk", features = ["anchor", "poseidon"] }
18+
light-hasher = { path = "/Users/ananas/dev/light-protocol3/program-libs/hasher" }
19+
light-sdk-types = { path = "/Users/ananas/dev/light-protocol3/sdk-libs/sdk-types" }
20+
light-compressed-account = { path = "/Users/ananas/dev/light-protocol3/program-libs/compressed-account" }
2221
# use cpi feature to avoid custom allocator conflict issues
2322
account-compression = { version = "2", features = ["cpi"] }
2423
groth16-solana = { path = "/Users/ananas/dev/groth16-solana" }
24+
light-concurrent-merkle-tree = "2"
2525

2626
[dev-dependencies]
27-
light-program-test = "0.15.0"
28-
light-client = "0.15.0"
27+
light-program-test = { path = "/Users/ananas/dev/light-protocol3/sdk-libs/program-test" }
28+
light-client = { path = "/Users/ananas/dev/light-protocol3/sdk-libs/client" }
2929
tokio = "1.40.0"
3030
solana-sdk = "2.2"
3131
circom-prover = "0.1"
3232
rust-witness = "0.1"
3333
num-bigint = "0.4"
3434
serde_json = "1.0"
35-
light-merkle-tree-reference = "3.0.0"
36-
light-compressed-account = {version = "0.5.0", features = ["new-unique"]}
35+
light-compressed-account = { path = "/Users/ananas/dev/light-protocol3/program-libs/compressed-account", features = ["new-unique"] }
36+
light-merkle-tree-reference= { path = "/Users/ananas/dev/light-protocol3/program-tests/merkle-tree" }
3737
groth16-solana = { path = "/Users/ananas/dev/groth16-solana", features = ["vk", "circom"] }
3838

3939
[build-dependencies]
40+
41+
[target.'cfg(not(target_os = "solana"))'.build-dependencies]
4042
rust-witness = "0.1"
4143
groth16-solana = { path = "/Users/ananas/dev/groth16-solana", features = ["vk"] }

zk-id/build.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,21 @@ fn main() {
1212
if std::path::Path::new(vk_json_path).exists() {
1313
generate_vk_file(vk_json_path, output_dir, output_file)
1414
.expect("Failed to generate verifying key Rust file");
15-
println!("cargo:warning=Generated verifying_key.rs from verification_key.json");
15+
// Successfully generated verifying_key.rs
1616
} else {
1717
println!("cargo:warning=Verification key JSON not found. Run './scripts/setup.sh' first.");
1818
}
1919

20-
// Transpile the WebAssembly witness generators for Circom circuits
21-
let witness_wasm_dir = "./build/compressed_account_merkle_proof_js";
22-
if std::path::Path::new(witness_wasm_dir).exists() {
23-
rust_witness::transpile::transpile_wasm(witness_wasm_dir.to_string());
24-
println!("cargo:warning=Transpiled witness generator");
25-
} else {
26-
println!("cargo:warning=Witness WASM not found. Run './scripts/setup.sh' first.");
20+
// Only transpile witness generators for non-Solana targets
21+
// Check the TARGET environment variable since build scripts run on the host
22+
let target = std::env::var("TARGET").unwrap_or_default();
23+
if !target.contains("sbf") && !target.contains("solana") {
24+
let witness_wasm_dir = "./build/compressed_account_merkle_proof_js";
25+
if std::path::Path::new(witness_wasm_dir).exists() {
26+
rust_witness::transpile::transpile_wasm(witness_wasm_dir.to_string());
27+
// Successfully transpiled witness generator
28+
} else {
29+
println!("cargo:warning=Witness WASM not found. Run './scripts/setup.sh' first.");
30+
}
2731
}
2832
}

zk-id/circuits/compressed_account_merkle_proof.circom

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ template CompressedAccountHash() {
1111
signal input owner_hashed;
1212
signal input leaf_index;
1313
signal input merkle_tree_hashed;
14+
signal input address;
1415
signal input discriminator;
1516
signal input data_hash;
1617

1718
signal output hash;
1819

19-
component poseidon = Poseidon(5);
20+
component poseidon = Poseidon(6);
2021

2122
poseidon.inputs[0] <== owner_hashed;
2223
poseidon.inputs[1] <== leaf_index;
2324
poseidon.inputs[2] <== merkle_tree_hashed;
24-
poseidon.inputs[3] <== discriminator + 36893488147419103232; // + discriminator domain
25-
poseidon.inputs[4] <== data_hash;
25+
poseidon.inputs[3] <== address;
26+
poseidon.inputs[4] <== discriminator + 36893488147419103232; // + discriminator domain
27+
poseidon.inputs[5] <== data_hash;
2628

2729
hash <== poseidon.out;
2830
}
@@ -61,6 +63,8 @@ template CompressedAccountMerkleProof(levels) {
6163
// Compressed account inputs
6264
signal input owner_hashed;
6365
signal input leaf_index;
66+
signal input account_leaf_index;
67+
signal input address;
6468
signal input merkle_tree_hashed;
6569
signal input discriminator;
6670
signal input issuer_hashed;
@@ -81,7 +85,8 @@ template CompressedAccountMerkleProof(levels) {
8185
// Step 1: Compute compressed account hash
8286
component accountHasher = CompressedAccountHash();
8387
accountHasher.owner_hashed <== owner_hashed;
84-
accountHasher.leaf_index <== leaf_index;
88+
accountHasher.leaf_index <== account_leaf_index;
89+
accountHasher.address <== address;
8590
accountHasher.merkle_tree_hashed <== merkle_tree_hashed;
8691
accountHasher.discriminator <== discriminator;
8792
accountHasher.data_hash <== data_hasher.out;
@@ -106,8 +111,8 @@ component main {
106111
merkle_tree_hashed,
107112
discriminator,
108113
issuer_hashed,
109-
expectedRoot,
110114
public_encrypted_data_hash,
111-
public_data_hash
115+
public_data_hash,
116+
expectedRoot
112117
]
113118
} = CompressedAccountMerkleProof(26);

zk-id/src/lib.rs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#![allow(unexpected_cfgs)]
2+
#![allow(deprecated)]
23

34
use account_compression::{state_merkle_tree_from_bytes_zero_copy, StateMerkleTreeAccount};
45
use anchor_lang::{prelude::*, AnchorDeserialize, AnchorSerialize};
@@ -9,7 +10,7 @@ use light_sdk::account::{poseidon::LightAccount as LightAccountPoseidon, LightAc
910
use light_sdk::cpi::v1::CpiAccounts;
1011
use light_sdk::{
1112
address::v1::derive_address,
12-
cpi::{v2::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction},
13+
cpi::{v1::LightSystemProgramCpi, InvokeLightSystemProgram, LightCpiInstruction},
1314
derive_light_cpi_signer,
1415
instruction::{account_meta::CompressedAccountMeta, PackedAddressTreeInfo, ValidityProof},
1516
LightDiscriminator, LightHasher,
@@ -22,6 +23,7 @@ pub const LIGHT_CPI_SIGNER: CpiSigner =
2223
derive_light_cpi_signer!("HNqStLMpNuNJqhBF1FbGTKHEFbBLJmq8RdJJmZKWz6jH");
2324

2425
pub const ISSUER: &[u8] = b"issuer";
26+
pub const CREDENTIAL: &[u8] = b"credential";
2527
pub const ZK_ID_CHECK: &[u8] = b"ZK_ID_CHECK";
2628

2729
// Include the generated verifying key module
@@ -55,7 +57,7 @@ pub mod zk_id {
5557
.map_err(|_| ErrorCode::AccountNotEnoughKeys)?,
5658
&crate::ID,
5759
);
58-
60+
msg!("address {:?}", address);
5961
let mut issuer_account = LightAccount::<'_, IssuerAccount>::new_init(
6062
&crate::ID,
6163
Some(address),
@@ -72,9 +74,7 @@ pub mod zk_id {
7274

7375
LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)
7476
.with_light_account(issuer_account)?
75-
.with_new_addresses(&[
76-
address_tree_info.into_new_address_params_assigned_packed(address_seed, Some(0))
77-
])
77+
.with_new_addresses(&[address_tree_info.into_new_address_params_packed(address_seed)])
7878
.invoke(light_cpi_accounts)?;
7979

8080
Ok(())
@@ -114,7 +114,7 @@ pub mod zk_id {
114114
.ok_or(ProgramError::ArithmeticOverflow)?;
115115

116116
let (address, address_seed) = derive_address(
117-
&[ISSUER, ctx.accounts.signer.key().as_ref()],
117+
&[CREDENTIAL, credential_pubkey.as_ref()],
118118
&address_tree_info
119119
.get_tree_pubkey(&light_cpi_accounts)
120120
.map_err(|_| ErrorCode::AccountNotEnoughKeys)?,
@@ -139,9 +139,7 @@ pub mod zk_id {
139139
LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)
140140
.with_light_account(issuer_account)?
141141
.with_light_account_poseidon(credential_account)?
142-
.with_new_addresses(&[
143-
address_tree_info.into_new_address_params_assigned_packed(address_seed, Some(0))
144-
])
142+
.with_new_addresses(&[address_tree_info.into_new_address_params_packed(address_seed)])
145143
.invoke(light_cpi_accounts)?;
146144

147145
Ok(())
@@ -200,23 +198,34 @@ pub mod zk_id {
200198
output_state_tree_index,
201199
);
202200
event_account.data = encrypted_data;
203-
let event_account_info = event_account.to_account_info()?;
201+
202+
let event_account_info = event_account
203+
.to_output_compressed_account_with_packed_context(None)?
204+
.unwrap();
204205

205206
// Construct public inputs array for the circuit
206-
// Order must match the circuit: owner_hashed, merkle_tree_hashed, discriminator, issuer_hashed, expectedRoot
207+
// Order MUST match the circuit's public declaration exactly:
208+
// owner_hashed, merkle_tree_hashed, discriminator, issuer_hashed, expectedRoot, public_encrypted_data_hash, public_data_hash
207209
let public_inputs: [[u8; 32]; 7] = [
208210
account_owner_hashed,
209211
merkle_tree_hashed,
210212
discriminator,
211213
issuer_hashed,
214+
event_account_info
215+
.compressed_account
216+
.data
217+
.as_ref()
218+
.unwrap()
219+
.data_hash, // This is public_encrypted_data_hash
220+
data_hash, // This is public_data_hash
212221
expected_root,
213-
event_account_info.output.as_ref().unwrap().data_hash,
214-
data_hash,
215222
];
223+
216224
let proof_a = decompress_g1(&credential_proof.a).map_err(|e| {
217225
let code: u32 = e.into();
218226
Error::from(ProgramError::Custom(code))
219227
})?;
228+
220229
let proof_b = decompress_g2(&credential_proof.b).map_err(|e| {
221230
let code: u32 = e.into();
222231
Error::from(ProgramError::Custom(code))
@@ -244,13 +253,9 @@ pub mod zk_id {
244253
Error::from(ProgramError::Custom(code))
245254
})?;
246255

247-
msg!("ZK proof verified successfully");
248-
249256
LightSystemProgramCpi::new_cpi(LIGHT_CPI_SIGNER, proof)
250-
.with_account_infos(&[event_account_info])
251-
.with_new_addresses(&[
252-
address_tree_info.into_new_address_params_assigned_packed(address_seed, Some(0))
253-
])
257+
.with_output_compressed_accounts(&[event_account_info])
258+
.with_new_addresses(&[address_tree_info.into_new_address_params_packed(address_seed)])
254259
.invoke(light_cpi_accounts)?;
255260

256261
Ok(())

zk-id/src/verifying_key.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ pub const VERIFYINGKEY: Groth16Verifyingkey = Groth16Verifyingkey {
99

1010
vk_gamma_g2: [25u8, 142u8, 147u8, 147u8, 146u8, 13u8, 72u8, 58u8, 114u8, 96u8, 191u8, 183u8, 49u8, 251u8, 93u8, 37u8, 241u8, 170u8, 73u8, 51u8, 53u8, 169u8, 231u8, 18u8, 151u8, 228u8, 133u8, 183u8, 174u8, 243u8, 18u8, 194u8, 24u8, 0u8, 222u8, 239u8, 18u8, 31u8, 30u8, 118u8, 66u8, 106u8, 0u8, 102u8, 94u8, 92u8, 68u8, 121u8, 103u8, 67u8, 34u8, 212u8, 247u8, 94u8, 218u8, 221u8, 70u8, 222u8, 189u8, 92u8, 217u8, 146u8, 246u8, 237u8, 9u8, 6u8, 137u8, 208u8, 88u8, 95u8, 240u8, 117u8, 236u8, 158u8, 153u8, 173u8, 105u8, 12u8, 51u8, 149u8, 188u8, 75u8, 49u8, 51u8, 112u8, 179u8, 142u8, 243u8, 85u8, 172u8, 218u8, 220u8, 209u8, 34u8, 151u8, 91u8, 18u8, 200u8, 94u8, 165u8, 219u8, 140u8, 109u8, 235u8, 74u8, 171u8, 113u8, 128u8, 141u8, 203u8, 64u8, 143u8, 227u8, 209u8, 231u8, 105u8, 12u8, 67u8, 211u8, 123u8, 76u8, 230u8, 204u8, 1u8, 102u8, 250u8, 125u8, 170u8],
1111

12-
vk_delta_g2: [9u8, 182u8, 194u8, 239u8, 134u8, 104u8, 17u8, 202u8, 241u8, 205u8, 236u8, 6u8, 64u8, 221u8, 138u8, 78u8, 208u8, 85u8, 135u8, 216u8, 232u8, 200u8, 74u8, 214u8, 161u8, 211u8, 86u8, 224u8, 135u8, 47u8, 46u8, 240u8, 38u8, 202u8, 49u8, 185u8, 86u8, 166u8, 237u8, 191u8, 36u8, 87u8, 88u8, 80u8, 198u8, 160u8, 109u8, 103u8, 206u8, 197u8, 9u8, 85u8, 251u8, 84u8, 0u8, 84u8, 122u8, 107u8, 207u8, 52u8, 170u8, 159u8, 6u8, 177u8, 21u8, 151u8, 177u8, 91u8, 211u8, 112u8, 141u8, 188u8, 194u8, 178u8, 84u8, 152u8, 215u8, 15u8, 37u8, 232u8, 8u8, 128u8, 55u8, 244u8, 130u8, 210u8, 243u8, 190u8, 138u8, 238u8, 202u8, 71u8, 154u8, 54u8, 179u8, 121u8, 17u8, 162u8, 164u8, 61u8, 219u8, 107u8, 133u8, 200u8, 103u8, 133u8, 194u8, 207u8, 92u8, 76u8, 90u8, 59u8, 18u8, 156u8, 221u8, 232u8, 230u8, 81u8, 95u8, 123u8, 189u8, 63u8, 188u8, 156u8, 163u8, 5u8, 108u8, 75u8],
12+
vk_delta_g2: [21u8, 72u8, 208u8, 181u8, 233u8, 215u8, 234u8, 232u8, 113u8, 68u8, 77u8, 114u8, 103u8, 162u8, 47u8, 11u8, 120u8, 77u8, 110u8, 19u8, 67u8, 254u8, 169u8, 8u8, 191u8, 75u8, 11u8, 227u8, 210u8, 6u8, 173u8, 116u8, 45u8, 185u8, 182u8, 83u8, 53u8, 212u8, 78u8, 213u8, 69u8, 211u8, 202u8, 5u8, 201u8, 183u8, 233u8, 109u8, 204u8, 118u8, 17u8, 183u8, 24u8, 152u8, 252u8, 216u8, 43u8, 181u8, 124u8, 88u8, 151u8, 223u8, 136u8, 89u8, 6u8, 22u8, 50u8, 253u8, 219u8, 31u8, 186u8, 76u8, 70u8, 153u8, 107u8, 169u8, 85u8, 202u8, 171u8, 74u8, 160u8, 61u8, 172u8, 104u8, 190u8, 41u8, 165u8, 192u8, 39u8, 17u8, 21u8, 78u8, 131u8, 223u8, 52u8, 147u8, 19u8, 186u8, 39u8, 3u8, 160u8, 232u8, 28u8, 85u8, 253u8, 159u8, 62u8, 190u8, 149u8, 21u8, 38u8, 33u8, 245u8, 201u8, 183u8, 80u8, 156u8, 157u8, 166u8, 239u8, 220u8, 76u8, 134u8, 209u8, 85u8, 64u8, 120u8, 130u8],
1313

1414
vk_ic: &[
15-
[2u8, 213u8, 234u8, 85u8, 255u8, 94u8, 145u8, 236u8, 211u8, 126u8, 45u8, 113u8, 53u8, 28u8, 169u8, 222u8, 254u8, 238u8, 227u8, 69u8, 118u8, 236u8, 77u8, 184u8, 177u8, 242u8, 0u8, 87u8, 240u8, 214u8, 168u8, 108u8, 15u8, 117u8, 191u8, 251u8, 188u8, 229u8, 83u8, 158u8, 143u8, 140u8, 236u8, 84u8, 138u8, 209u8, 63u8, 101u8, 111u8, 19u8, 202u8, 166u8, 97u8, 60u8, 28u8, 244u8, 94u8, 107u8, 197u8, 219u8, 74u8, 146u8, 152u8, 91u8],
16-
[8u8, 61u8, 65u8, 85u8, 235u8, 27u8, 35u8, 64u8, 236u8, 91u8, 75u8, 92u8, 8u8, 82u8, 188u8, 238u8, 125u8, 100u8, 229u8, 212u8, 54u8, 185u8, 60u8, 56u8, 216u8, 219u8, 191u8, 204u8, 74u8, 27u8, 71u8, 0u8, 44u8, 119u8, 216u8, 238u8, 16u8, 173u8, 201u8, 167u8, 194u8, 153u8, 61u8, 27u8, 100u8, 170u8, 141u8, 70u8, 94u8, 145u8, 102u8, 90u8, 190u8, 169u8, 66u8, 36u8, 187u8, 210u8, 141u8, 15u8, 70u8, 12u8, 124u8, 53u8],
17-
[46u8, 59u8, 214u8, 149u8, 229u8, 106u8, 220u8, 117u8, 176u8, 122u8, 12u8, 141u8, 228u8, 61u8, 184u8, 178u8, 56u8, 57u8, 44u8, 123u8, 185u8, 7u8, 151u8, 229u8, 64u8, 106u8, 34u8, 206u8, 200u8, 14u8, 181u8, 121u8, 27u8, 221u8, 0u8, 168u8, 179u8, 57u8, 151u8, 89u8, 54u8, 16u8, 184u8, 66u8, 128u8, 120u8, 67u8, 62u8, 99u8, 83u8, 184u8, 198u8, 32u8, 238u8, 248u8, 48u8, 173u8, 255u8, 103u8, 33u8, 160u8, 20u8, 252u8, 87u8],
18-
[12u8, 127u8, 161u8, 71u8, 193u8, 20u8, 52u8, 60u8, 7u8, 250u8, 171u8, 248u8, 102u8, 63u8, 89u8, 110u8, 161u8, 186u8, 178u8, 179u8, 81u8, 217u8, 123u8, 227u8, 83u8, 133u8, 35u8, 195u8, 117u8, 158u8, 192u8, 79u8, 27u8, 90u8, 101u8, 223u8, 238u8, 40u8, 146u8, 190u8, 102u8, 216u8, 219u8, 123u8, 133u8, 65u8, 21u8, 58u8, 139u8, 8u8, 238u8, 22u8, 31u8, 66u8, 244u8, 1u8, 150u8, 37u8, 149u8, 84u8, 119u8, 81u8, 97u8, 211u8],
19-
[21u8, 196u8, 79u8, 77u8, 215u8, 114u8, 152u8, 50u8, 230u8, 160u8, 112u8, 202u8, 81u8, 63u8, 178u8, 166u8, 148u8, 234u8, 158u8, 71u8, 56u8, 255u8, 158u8, 243u8, 88u8, 249u8, 40u8, 216u8, 58u8, 176u8, 81u8, 235u8, 8u8, 95u8, 140u8, 190u8, 153u8, 233u8, 27u8, 211u8, 105u8, 60u8, 17u8, 104u8, 6u8, 67u8, 143u8, 18u8, 146u8, 81u8, 56u8, 231u8, 186u8, 65u8, 88u8, 203u8, 206u8, 18u8, 140u8, 253u8, 168u8, 156u8, 205u8, 202u8],
20-
[1u8, 220u8, 136u8, 107u8, 234u8, 229u8, 110u8, 15u8, 19u8, 252u8, 101u8, 89u8, 145u8, 127u8, 168u8, 103u8, 114u8, 129u8, 21u8, 236u8, 105u8, 109u8, 250u8, 24u8, 8u8, 2u8, 76u8, 153u8, 72u8, 166u8, 62u8, 185u8, 26u8, 3u8, 76u8, 187u8, 122u8, 207u8, 21u8, 139u8, 1u8, 151u8, 175u8, 191u8, 85u8, 17u8, 49u8, 182u8, 107u8, 40u8, 235u8, 108u8, 152u8, 200u8, 245u8, 131u8, 109u8, 108u8, 241u8, 0u8, 123u8, 109u8, 233u8, 143u8],
21-
[0u8, 55u8, 22u8, 247u8, 50u8, 139u8, 254u8, 255u8, 146u8, 25u8, 188u8, 212u8, 237u8, 18u8, 217u8, 137u8, 84u8, 169u8, 209u8, 87u8, 13u8, 54u8, 245u8, 13u8, 217u8, 140u8, 219u8, 23u8, 204u8, 190u8, 165u8, 104u8, 32u8, 148u8, 164u8, 101u8, 71u8, 148u8, 213u8, 70u8, 132u8, 211u8, 1u8, 24u8, 130u8, 190u8, 25u8, 120u8, 123u8, 194u8, 143u8, 55u8, 57u8, 246u8, 37u8, 241u8, 242u8, 106u8, 127u8, 11u8, 25u8, 65u8, 239u8, 71u8],
22-
[36u8, 85u8, 179u8, 115u8, 28u8, 121u8, 35u8, 7u8, 122u8, 136u8, 2u8, 222u8, 97u8, 155u8, 55u8, 246u8, 113u8, 68u8, 9u8, 144u8, 30u8, 160u8, 67u8, 227u8, 242u8, 154u8, 225u8, 154u8, 130u8, 110u8, 168u8, 118u8, 5u8, 255u8, 233u8, 16u8, 202u8, 47u8, 192u8, 215u8, 35u8, 87u8, 34u8, 152u8, 237u8, 66u8, 240u8, 240u8, 146u8, 156u8, 150u8, 248u8, 140u8, 199u8, 65u8, 245u8, 147u8, 123u8, 110u8, 50u8, 25u8, 216u8, 44u8, 147u8],
15+
[22u8, 24u8, 254u8, 206u8, 152u8, 246u8, 56u8, 167u8, 103u8, 120u8, 252u8, 140u8, 102u8, 72u8, 191u8, 241u8, 29u8, 106u8, 51u8, 197u8, 27u8, 159u8, 141u8, 78u8, 189u8, 160u8, 73u8, 24u8, 183u8, 155u8, 8u8, 91u8, 41u8, 139u8, 41u8, 97u8, 22u8, 78u8, 73u8, 136u8, 207u8, 61u8, 34u8, 70u8, 147u8, 59u8, 149u8, 33u8, 109u8, 142u8, 61u8, 247u8, 162u8, 228u8, 118u8, 62u8, 86u8, 245u8, 185u8, 137u8, 77u8, 166u8, 60u8, 84u8],
16+
[32u8, 68u8, 146u8, 188u8, 23u8, 36u8, 153u8, 164u8, 137u8, 88u8, 42u8, 246u8, 90u8, 222u8, 1u8, 95u8, 44u8, 56u8, 144u8, 95u8, 67u8, 143u8, 25u8, 143u8, 2u8, 158u8, 40u8, 13u8, 51u8, 30u8, 246u8, 193u8, 17u8, 123u8, 112u8, 172u8, 250u8, 245u8, 110u8, 160u8, 8u8, 14u8, 62u8, 179u8, 73u8, 182u8, 148u8, 171u8, 138u8, 217u8, 7u8, 11u8, 3u8, 235u8, 100u8, 42u8, 106u8, 239u8, 117u8, 209u8, 72u8, 73u8, 33u8, 50u8],
17+
[42u8, 181u8, 245u8, 200u8, 39u8, 109u8, 99u8, 82u8, 245u8, 76u8, 116u8, 172u8, 9u8, 90u8, 62u8, 240u8, 226u8, 195u8, 193u8, 164u8, 199u8, 40u8, 212u8, 203u8, 177u8, 33u8, 111u8, 84u8, 74u8, 11u8, 247u8, 201u8, 43u8, 52u8, 202u8, 231u8, 116u8, 47u8, 209u8, 168u8, 105u8, 194u8, 95u8, 200u8, 0u8, 204u8, 110u8, 236u8, 55u8, 43u8, 14u8, 81u8, 169u8, 68u8, 210u8, 93u8, 255u8, 193u8, 92u8, 24u8, 27u8, 79u8, 238u8, 3u8],
18+
[10u8, 88u8, 243u8, 196u8, 106u8, 25u8, 70u8, 23u8, 141u8, 245u8, 210u8, 34u8, 0u8, 10u8, 89u8, 105u8, 1u8, 229u8, 192u8, 220u8, 19u8, 163u8, 24u8, 216u8, 188u8, 223u8, 128u8, 192u8, 31u8, 143u8, 50u8, 190u8, 30u8, 8u8, 96u8, 76u8, 79u8, 133u8, 163u8, 122u8, 22u8, 117u8, 25u8, 130u8, 18u8, 158u8, 186u8, 138u8, 183u8, 236u8, 186u8, 218u8, 138u8, 22u8, 219u8, 98u8, 244u8, 207u8, 131u8, 84u8, 9u8, 213u8, 123u8, 144u8],
19+
[37u8, 30u8, 238u8, 175u8, 106u8, 133u8, 208u8, 28u8, 79u8, 89u8, 174u8, 238u8, 90u8, 198u8, 209u8, 220u8, 3u8, 179u8, 53u8, 0u8, 148u8, 251u8, 220u8, 240u8, 212u8, 142u8, 208u8, 243u8, 116u8, 220u8, 42u8, 237u8, 34u8, 169u8, 128u8, 36u8, 215u8, 197u8, 11u8, 238u8, 223u8, 190u8, 121u8, 65u8, 118u8, 173u8, 41u8, 220u8, 46u8, 219u8, 61u8, 146u8, 113u8, 225u8, 110u8, 35u8, 19u8, 25u8, 121u8, 149u8, 6u8, 83u8, 220u8, 145u8],
20+
[17u8, 167u8, 78u8, 13u8, 150u8, 211u8, 217u8, 37u8, 109u8, 228u8, 186u8, 26u8, 234u8, 255u8, 14u8, 238u8, 106u8, 57u8, 88u8, 188u8, 119u8, 188u8, 53u8, 227u8, 180u8, 66u8, 159u8, 1u8, 85u8, 17u8, 37u8, 87u8, 8u8, 23u8, 148u8, 137u8, 217u8, 106u8, 247u8, 96u8, 22u8, 223u8, 15u8, 80u8, 14u8, 115u8, 57u8, 14u8, 226u8, 185u8, 81u8, 241u8, 156u8, 133u8, 83u8, 173u8, 179u8, 232u8, 79u8, 84u8, 190u8, 78u8, 137u8, 145u8],
21+
[41u8, 166u8, 165u8, 235u8, 204u8, 121u8, 215u8, 74u8, 117u8, 54u8, 65u8, 201u8, 145u8, 187u8, 109u8, 145u8, 148u8, 238u8, 55u8, 191u8, 157u8, 33u8, 37u8, 109u8, 169u8, 111u8, 246u8, 23u8, 81u8, 104u8, 195u8, 161u8, 22u8, 168u8, 203u8, 78u8, 151u8, 68u8, 89u8, 49u8, 213u8, 133u8, 94u8, 139u8, 98u8, 246u8, 4u8, 189u8, 85u8, 219u8, 235u8, 230u8, 158u8, 23u8, 253u8, 211u8, 53u8, 137u8, 145u8, 241u8, 13u8, 218u8, 2u8, 120u8],
22+
[45u8, 20u8, 183u8, 144u8, 118u8, 246u8, 157u8, 110u8, 8u8, 160u8, 76u8, 154u8, 70u8, 124u8, 221u8, 103u8, 151u8, 230u8, 135u8, 158u8, 183u8, 233u8, 225u8, 154u8, 244u8, 226u8, 227u8, 192u8, 114u8, 170u8, 44u8, 181u8, 17u8, 144u8, 36u8, 238u8, 190u8, 142u8, 125u8, 97u8, 222u8, 23u8, 59u8, 169u8, 12u8, 156u8, 76u8, 222u8, 170u8, 254u8, 57u8, 209u8, 51u8, 197u8, 50u8, 248u8, 182u8, 105u8, 212u8, 146u8, 127u8, 168u8, 111u8, 65u8],
2323
]
2424
};

0 commit comments

Comments
 (0)