From e16516da51e216f9153c94a04eace949c9963739 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 17 Oct 2024 19:45:47 -0700 Subject: [PATCH] fix: connect deferred vk root (#1649) Co-authored-by: jtguibas --- .github/workflows/pr.yml | 102 +++++++++--------- Cargo.lock | 1 + crates/core/machine/src/lib.rs | 2 +- crates/cuda/src/lib.rs | 2 +- crates/perf/Cargo.toml | 1 + crates/perf/run_s3.sh | 5 +- crates/perf/src/main.rs | 60 ++++++----- crates/prover/vk_map.bin | Bin 6361528 -> 6332728 bytes .../recursion/circuit/src/machine/deferred.rs | 4 + 9 files changed, 98 insertions(+), 79 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f0cc4ca51a..500033f728 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -120,14 +120,14 @@ jobs: env: CARGO_INCREMENTAL: 1 - # - name: Add wasm target - # run: rustup target add wasm32-unknown-unknown + - name: Add wasm target + run: rustup target add wasm32-unknown-unknown - # - name: Check wasm compatibility for sdk - # uses: actions-rs/cargo@v1 - # with: - # command: check - # args: -p sp1-sdk --target wasm32-unknown-unknown --no-default-features + - name: Check wasm compatibility for sdk + uses: actions-rs/cargo@v1 + with: + command: check + args: -p sp1-sdk --target wasm32-unknown-unknown --no-default-features examples: name: Examples @@ -270,55 +270,55 @@ jobs: --commit-hash "${{ github.sha }}" \ --author "${{ github.event.pull_request.user.login || github.actor }}" - # low-memory: - # name: Low Memory - # strategy: - # matrix: - # mem_limit: [16, 32, 64] - # runs-on: - # [ - # runs-on, - # "ram=${{ matrix.mem_limit}}", - # family=c7a, - # image=ubuntu22-full-x64, - # "run-id=${{ github.run_id }}", - # ] - # env: - # CARGO_NET_GIT_FETCH_WITH_CLI: "true" - # steps: - # - name: Checkout sources - # uses: actions/checkout@v4 + low-memory: + name: Low Memory + strategy: + matrix: + mem_limit: [16, 32, 64] + runs-on: + [ + runs-on, + "ram=${{ matrix.mem_limit}}", + family=c7a, + image=ubuntu22-full-x64, + "run-id=${{ github.run_id }}", + ] + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v4 - # - name: Setup CI - # uses: ./.github/actions/setup + - name: Setup CI + uses: ./.github/actions/setup - # - name: Install SP1 toolchain - # run: | - # curl -L https://sp1.succinct.xyz | bash - # ~/.sp1/bin/sp1up - # ~/.sp1/bin/cargo-prove prove --version + - name: Install SP1 toolchain + run: | + curl -L https://sp1.succinct.xyz | bash + ~/.sp1/bin/sp1up + ~/.sp1/bin/cargo-prove prove --version - # - name: Install SP1 CLI - # run: | - # cd crates/cli - # cargo install --force --locked --path . - # cd ~ + - name: Install SP1 CLI + run: | + cd crates/cli + cargo install --force --locked --path . + cd ~ - # - name: Run tendermint script - # run: | - # cd examples/tendermint/program - # cargo add sp1-zkvm --path $GITHUB_WORKSPACE/crates/zkvm/entrypoint - # cargo prove build - # cd ../script - # cargo remove sp1-sdk - # cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk - # SP1_DEV=1 RUST_LOG=info cargo run --release + - name: Run tendermint script + run: | + cd examples/tendermint/program + cargo add sp1-zkvm --path $GITHUB_WORKSPACE/crates/zkvm/entrypoint + cargo prove build + cd ../script + cargo remove sp1-sdk + cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk + SP1_DEV=1 RUST_LOG=info cargo run --release - # - name: Run cycle tracking script - # run: | - # cd examples/cycle-tracking/script - # cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk - # SP1_DEV=1 RUST_LOG=info cargo run --release + - name: Run cycle tracking script + run: | + cd examples/cycle-tracking/script + cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk + SP1_DEV=1 RUST_LOG=info cargo run --release # toolchain-test: # name: "Test toolchain installation (${{ matrix.name }})" diff --git a/Cargo.lock b/Cargo.lock index 0ec5620974..91c462d689 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6916,6 +6916,7 @@ dependencies = [ "serde", "serde_json", "slack-rust-rs", + "sp1-core-executor", "sp1-cuda", "sp1-prover", "sp1-sdk", diff --git a/crates/core/machine/src/lib.rs b/crates/core/machine/src/lib.rs index f50ee422c6..16fd571c95 100644 --- a/crates/core/machine/src/lib.rs +++ b/crates/core/machine/src/lib.rs @@ -30,7 +30,7 @@ pub mod utils; /// This string should be updated whenever any step in verifying an SP1 proof changes, including /// core, recursion, and plonk-bn254. This string is used to download SP1 artifacts and the gnark /// docker image. -pub const SP1_CIRCUIT_VERSION: &str = "v3.0.0-rc4"; +pub const SP1_CIRCUIT_VERSION: &str = "v3.0.0"; // Re-export the `SP1ReduceProof` struct from sp1_core_machine. // diff --git a/crates/cuda/src/lib.rs b/crates/cuda/src/lib.rs index f299d59d52..f63a65c744 100644 --- a/crates/cuda/src/lib.rs +++ b/crates/cuda/src/lib.rs @@ -91,7 +91,7 @@ impl SP1CudaProver { /// [SP1ProverClient] that can be used to communicate with the container. pub fn new() -> Result> { let container_name = "sp1-gpu"; - let image_name = "public.ecr.aws/succinct-labs/sp1-gpu:445c33b"; + let image_name = "public.ecr.aws/succinct-labs/sp1-gpu:7e66232"; let cleaned_up = Arc::new(AtomicBool::new(false)); let cleanup_name = container_name; diff --git a/crates/perf/Cargo.toml b/crates/perf/Cargo.toml index fd4e92c8b2..3cc77b6fc9 100644 --- a/crates/perf/Cargo.toml +++ b/crates/perf/Cargo.toml @@ -11,6 +11,7 @@ categories = { workspace = true } [dependencies] sp1-prover = { workspace = true } +sp1-core-executor = { workspace = true, features = ["programs"] } sp1-sdk = { workspace = true } p3-baby-bear = { workspace = true } sp1-stark = { workspace = true } diff --git a/crates/perf/run_s3.sh b/crates/perf/run_s3.sh index f26278ee9b..a9a0ef7a06 100755 --- a/crates/perf/run_s3.sh +++ b/crates/perf/run_s3.sh @@ -14,9 +14,10 @@ aws s3 cp s3://sp1-testing-suite/$s3_path/program.bin /tmp/program.bin aws s3 cp s3://sp1-testing-suite/$s3_path/stdin.bin /tmp/stdin.bin # Set environment variables -export RUSTFLAGS="-Copt-level=3 -Ctarget-cpu=native" +export RUSTFLAGS="-Copt-level=3 -Ctarget-cpu=native -Cdebuginfo=2" export RUST_BACKTRACE=1 export RUST_LOG=debug +export SP1_DEBUG=1 # Run moongate-perf -cargo run --release -p sp1-perf -- --program /tmp/program.bin --stdin /tmp/stdin.bin --mode $stage \ No newline at end of file +cargo run -p sp1-perf -- --program /tmp/program.bin --stdin /tmp/stdin.bin --mode $stage \ No newline at end of file diff --git a/crates/perf/src/main.rs b/crates/perf/src/main.rs index f4151493dc..baeffbc49b 100644 --- a/crates/perf/src/main.rs +++ b/crates/perf/src/main.rs @@ -1,8 +1,10 @@ use std::time::{Duration, Instant}; use clap::{command, Parser, ValueEnum}; +use sp1_core_executor::programs::tests::VERIFY_PROOF_ELF; use sp1_cuda::SP1CudaProver; use sp1_prover::components::DefaultProverComponents; +use sp1_prover::HashableKey; use sp1_sdk::{self, ProverClient, SP1Context, SP1Prover, SP1Stdin}; use sp1_stark::SP1ProverOpts; @@ -17,7 +19,7 @@ struct PerfArgs { pub mode: ProverMode, } -#[derive(Debug, Clone)] +#[derive(Default, Debug, Clone)] #[allow(dead_code)] struct PerfResult { pub cycles: u64, @@ -71,22 +73,15 @@ fn main() { let (_, verify_core_duration) = time_operation(|| prover.verify(&core_proof.proof, &vk)); - let (compress_proof, compress_duration) = time_operation(|| { - prover - .compress( - &vk, - core_proof, - stdin.proofs.iter().map(|(proof, _)| proof.clone()).collect(), - opts, - ) - .unwrap() - }); + let proofs = stdin.proofs.into_iter().map(|(proof, _)| proof).collect::>(); + let (compress_proof, compress_duration) = + time_operation(|| prover.compress(&vk, core_proof.clone(), proofs, opts).unwrap()); let (_, verify_compressed_duration) = time_operation(|| prover.verify_compressed(&compress_proof, &vk)); let (shrink_proof, shrink_duration) = - time_operation(|| prover.shrink(compress_proof, opts).unwrap()); + time_operation(|| prover.shrink(compress_proof.clone(), opts).unwrap()); let (_, verify_shrink_duration) = time_operation(|| prover.verify_shrink(&shrink_proof, &vk)); @@ -97,6 +92,30 @@ fn main() { let (_, verify_wrap_duration) = time_operation(|| prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk)); + // Generate a proof that verifies two deferred proofs from the proof above. + let (pk_verify_proof, vk_verify_proof) = prover.setup(VERIFY_PROOF_ELF); + let pv = core_proof.public_values.to_vec(); + + let mut stdin = SP1Stdin::new(); + let vk_u32 = vk.hash_u32(); + stdin.write::<[u32; 8]>(&vk_u32); + stdin.write::>>(&vec![pv.clone(), pv.clone()]); + stdin.write_proof(compress_proof.clone(), vk.vk.clone()); + stdin.write_proof(compress_proof.clone(), vk.vk.clone()); + + let context = SP1Context::default(); + let (core_proof, _) = time_operation(|| { + prover.prove_core(&pk_verify_proof, &stdin, opts, context).unwrap() + }); + let deferred_proofs = + stdin.proofs.into_iter().map(|(proof, _)| proof).collect::>(); + let (compress_proof, _) = time_operation(|| { + prover + .compress(&vk_verify_proof, core_proof.clone(), deferred_proofs, opts) + .unwrap() + }); + prover.verify_compressed(&compress_proof, &vk_verify_proof).unwrap(); + let result = PerfResult { cycles, execution_duration, @@ -126,15 +145,9 @@ fn main() { prover.verify(&core_proof.proof, &vk).expect("Proof verification failed") }); - let (compress_proof, compress_duration) = time_operation(|| { - server - .compress( - &vk, - core_proof, - stdin.proofs.iter().map(|(proof, _)| proof.clone()).collect(), - ) - .unwrap() - }); + let proofs = stdin.proofs.into_iter().map(|(proof, _)| proof).collect::>(); + let (compress_proof, compress_duration) = + time_operation(|| server.compress(&vk, core_proof, proofs).unwrap()); let (_, verify_compressed_duration) = time_operation(|| prover.verify_compressed(&compress_proof, &vk)); @@ -147,10 +160,9 @@ fn main() { let (_, wrap_duration) = time_operation(|| server.wrap_bn254(shrink_proof).unwrap()); - // TODO: Verify wrapped bn254 proofs. + // TODO: FIX // let (_, verify_wrap_duration) = // time_operation(|| prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk)); - let verify_wrap_duration = Duration::from_secs(0); let result = PerfResult { cycles, @@ -162,7 +174,7 @@ fn main() { shrink_duration, verify_shrink_duration, wrap_duration, - verify_wrap_duration, + ..Default::default() }; println!("{:?}", result); diff --git a/crates/prover/vk_map.bin b/crates/prover/vk_map.bin index bced2e747ff2754b4c42f042e0851f25d16c599f..afa7df3b1361bbb0edb591d6e1b62bea3e495449 100644 GIT binary patch delta 1238008 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⪼@9OI2ojeDMv{_IWMx%~vKm!cou(v+QAvIBY9k+SSWU3MmNbzm1-Wmh^RMVCyVTXv&I zcBfbNAbw3?PugWKGO{-X>7XJLX~;fA3xR!Ull|zF{mIDzl;l8a(n+68A~7Ry5GgsB ztQExsv#-z*V%% z)nw!v3R0jVGib=QL~jgSN1M!~Q?4f`P?8&{Ns&I8MdGHwjilrzvT`#;xrM6SN>gql zc5|Scq|7EQx09DUD9fGHST;6JH#-w}9|c6p18yiGxBRAd1S zd57qofp=+>_vn=O$;k(l9>7BVWdQx=1b-dCSp97Pll1oiOxHgKFh~C!zyj?Xz!F_DfC={o z{~Ewl{d)kj^q&FD(|-rBNdFta!2AAx7?byfst9RWio7gMS(c$L%M!UiupF(jJRPzE zT@s~R`q3jR(km+we;}|j?Xn6P=}$ohP>~o78A$ZOz#!UWFr6}loD8KT!>Gw{`Xo-` zp+E~M89`P?Qj}3tWmTH88nJRarG*hXZTVD(lc8>(V8ybjuie zWIcLied3P_)Hb zPW;Kh9<M>BvNt^Svi=Z z970tNr74FIdn#}^NlBBI$>ik-%5o%iIf}^Bfum`aW9X1$>5>fHGKC&Fj$S#Q_%neM zXqOYo$Vn9BWGa%SAybJy8#skFIh9U1jhviLNzR}qXVNEKB%TXQBPC~%m9r_zIaK9b znsOeo=L6@HlpJ}PPFXIXE*BE11}>siE~Y~+p-V2MTk`bCW%SDB#ODRBpk1ycBUe$7 ztEtE}G^9ZEg}@Bj<{}TIFRr!0WWj8)W273i1{ed7FmRh`te6 zK%2Znr@Tu}-lHV%Qyd9?Ss~BV64wLeAjEVY9jA{C9jM>_ZF<%$OXsHFii!olmk1<7mh%rNdj4@Y# zim_0Cj?r&Hus6n7T^wVQ{t{!l{u*PB{uX0_{vKnA{t;vJJHbC=Owhgn zUg<~t{lJQ}%SvQqWeTzi73ohy1`z!q5Ti{7(kX+;$zVz{gqjScPll2BFfg2y#K}qv zMHxX=M$(i~#Oi@nNy=)ZWp(nBpe&=Q%Nj&J3am-1tVM^cO_!`gx2#K#w9+eMi2pCJ z9__L|8QFk>Y)C~mq9Gd-{W#D@n~bGXHX$dQQj*Q6$>#LQ79>6iY)MLzWMv#h*@~)c zO;ffZ_Gw^SlCm9X*`B<#Q8$#s-uCN;U9K7qvdfg4Ckk*v(3C^u4-n`p|-#C{0eLQ-xeEw_=E zZpt#7y4+6W$G{!5%AIt`U3AIabjv;TNQqvVL;R<}y|l}HWaNGd@&FZikcK=&^yfgC zHhGv%d4!xiN=Y80CXdr6Pmt&hJV{C_WMwWzd5Wq$O;esBwm9%CNqLU6JWpP#lw}@u zd4b3;ffs3&m*|j}>5^CImRISK9(rXy@m~Y4(Jrr(kvAyFn^fd28uB*L-vTw-WC5M> z4mo+3lDtPv-ltDKAn|+PLsC*FD<4sm|525XY04+W{s??ZQa&RspOcpcWm!mFz98~v z*u*afGUm^)C0`9>qJBM)Y5L7TX6v^DnXk=(EY?K>Y3U1oH<0oA{XnMZ4+EK@KMrKB z{xpz<`tv~gEeZAxWUMY8$Rzz`Ak+2Nfy~k02C_hZAIK8@V<4md3jR5e3EDT1sk&q! zv-Gcl%+tRIvPl0K$iTmY{|;oF{x^`xLAUYmP#d8vOHr4liTo2-hE`dY4q1*aS)OiL zfgXv{EB%Q78(5KcS&59SOhHzmBK>K|0HXf|VzkLXI%N@q-A^Z(oR{%QKoE z9!b$F6Ns-6*o}7Cos8^3LH48~d(n`+iADn*w8=y|Wgl{~FD2QJn(R-X96+L9;6PH+ zNmeFNl!K_s!8GL%Vk-s?B`JrImcz+QnzBr$E=LeqDR3mMaugkMG+lBG-Eu5FlA%|o z5MMcP9PM&E899N1oJd7Zq9G>}T_upEO{UT*r;w9VDamQnw6l7C?$D}nmkUQJV7EJc#@P<$jV%b@)T8hnx;HMtR?U) zNqLU6JWpP#lw}@ud4b4?z>BoXOLWM~bjd4p%d7NA54|#<_{hL(w9D&cziETB`~At&!rlJ}^|`}D~NBvuW4NJ{Et{6c=#ePB(vSGsffZ?&mB`4-6l4`D(w~M5Ai7QXzB-R=jMN(EJEvu22)hSDYx{M|=Ca?yrvL+p}7G1J7 z-LeinvM#;SN_@S*7}{k$GO|7e*?@{{NJBOvx_)3|+N6z68B0z!p(LA9lg;Rp%}Hz! z*n*U7Nmh~+WgJ!6il%H$a>Kwjq-9(3vK?jFp1QOX*(flcR@s3L*^w^UiEi1M9@&Ln z*_HUlffVgBfsE`%L3XDid(ebf`(j4bgRHsw8_qu-Jm`O^mCo52t8>mW=rpzL?P2fh7 zauaE}nY`RWS#G5+w-MPk&`qn%rbBM0OYWds?xaWVqF3%FzFpuR+NDHB=1`D(smOga z7Y z^71TYd5*d~Ph^Kcl~$QYhrB?SyhyjaM31~oue?Hh$H1$!OAi^DPeERzBCpesH;C>O zc#}4Hi%xl)oYW}E0&4OOeey1eodfTYlK08V2NdN)s#2#Z9}(Ln@IR9BF=_dPynISo zKBF$56WKM)U}G?2b`7(!a4-|~i@{9OF9$PQzZ%SZ{dzEq^_#)8q=MfLX1q2BGes8- zW`=$@n7R7>U>52RgXuRR_~T&4>Q952q(2X4y7mrcjxHX|0{vw$OZ3;ljNUEy+h8W> z?}M4De+*`p{yCU=+BcX*x@0f|cMtwGm~r~|U?%H7gSkxq9n8b}-(WrphIx$a5v~xS zRhFVdmZnRVp<9-vN0y^kmM6YvUa`v=C6l&wh1*5qXy%CaqW*^bBof$eFPb~`ABWMNamnBpuXbB7L$CiAjNdNy&a> zWq*ot0984VrgRcJC@_hn97I|UCNGCjmP4t_VMGoN98RmG>5$2E$q{tRk@Uz>^vco1 z4+$JYyBteKG8AMA6*-QE98dJnzzMX;iR9!YN^&wa$6MF!PYzs6yIev> zE~OxODsmYOxt!<`fh%Z}E6K@Kl;mn^at(b_AaP`11}V9gtXxM?W>S^wX$r)S3fw?a zilk*0dAX6Y+(cb&CUSJ(7Fy+2I^;IGq?>M;O^@78uiQcWn82O1%UxvTZVGY_6)Dk> zIYf^Q+)JC>N2lCRP9C5n4^oqd=#w&uOyFTs@(5XZl%hOFRUW4)PY|0Dc#@=4NXuOE z@)Tuxnz}qg7gO>iJlO6 zjW&6mPI-fzyh%ykq9$+CCp8i$1{RQ#cgV`S6y-gt@;*)ZfY?ca4@pX$w0uNf{zq9p zrY@flIXNuhr$ZQXa#)DZhA>e-AHp;YVgk?jMKg$Ox7hsxJ>^V!o&La5I)j>hOpFW!GA-) z{ula#VIjLt3)hLzElbfOOVcaM5I;SzEbX!!8Cjl!tUyJgG^8KVGXg8pCM(e?E0dE| zC`o^6GJrmbkvKCjkdzD}D}yP@5UMhirVJz26&OxZ;-sa8yo{hMBdN`46lz)rNw&SYd43bHE|NzsrAM00`NXp`OPls(AFo|I%SYO*(d(m`T+ zU?M5mhpg;NQTC%M`_q&Ih+Pmkkfd~ymPzF0Aj)zubvcB{g@Hq9mBZ+e!|9SV-7=XT zIf7m}lK4e|qiC0-$;dGjSAB59dLUT&l;H&K_HiCh)9g;u$h4!Mmk>84v|(<8UjD|ZmTI&dfL zau*r7n}Xa!MM^Ye4$*4@_tGZ!(JA+nlLsitgVf|9`lL*v5O|oBJVI6;r6`Y4mB(qy z6U1f&o+K$1(lVF4JVjZarY_GAxi;`Dt@0cl@;qHqrCa9FBQMY^FA~2l@DlCvG8uV= zg1kyadT7XeqB8@p(I&6cDQ}RIHz~i0vLq(2O0y8bwnIr`I37U<7IS)#o| z8GU1L@lYn{FGHECzYb-V{x+0(`uk88=^sNGcvJAtp^VeMp-k2#L%B@<8p^}^_fS64 ze}=Nu&B1>|zy25cgD&LF;W`nzWhr`OX?kTD;L z2C}4NDp@&&qMS-qPNONO6MHCd21z-Sv~-b|X_VzG>T))ba^M_VGWn_Nz(TtQB*q$F2SldI{IYe+mAD3FpF zWaV0lavfEfNmH&T_E-Rtasz28l9ySO^?dCAZNn-So(8dgXTF zPXz9uUG5|!cTteLsmMJvq(t<|z#Q7-UOMGIa&kWRl84F4BNXLP zs`403d7RkXz!N0pNzzgwFLNo&Q`F^YB2NXLp;exxL!P5co~K)?^vFDV*)XQ*=fjw-jbY5!g~M2^ zUkszA8vJq?68(7?qhAR24r78Y9>!GtWf-&c*I~@l--fYBe;>xc7lVHcW1RjujLF(JjLUS% zFdo*whVha9J&dJZ3jP!N_21C1|Aqcwn8@yz!j&TQ$Wrvm(!^g5EJM32OGcKXAj?yc z6=+D5=qrJKw8@He%1Y#9WlFLNHR(^E3?T7pAVx|Cl9fReWiVA4LQ{qk>j?}aDZ@!i zoV>J9mJ!rtB$4@nQMAgcbjWIS$?9}Vf*u)7udG4*wZNLR%UWb)Z3?mu6tv=V(i zForf+k4{;ioNPczHl!vS(I*>|cq7n8O2(3vO(@EyRAn=ovN^Fg16z=kElEp~yo{qP zTTz#-iM$oqhE~~@4%v<_*`97`r$@%qD?1Q>JFp||vJ)BEnS$&>MRuhjDWbK&1lnXb zI%RiqvIiyElbY;BpX^OyL7;<_Oe8D&P?UYC%6>Fue`4LGKsPrL|qOh z@^0V|TIEnW2xLjgRI+jkMLCtKoJLblC-!0B43cstY3U*_(VY?g|y2>WaMHBatRf=l!oMq{x5JDZE`uCas@fLl9F6S zO|GU-t|9Sppg>Aykd6P1we-^ldcDa*`+(kj|rXu&ykP^|)19NDTd+C(>$jSYb ziAJDIN**RFk5H6HsmfzC<#A#Q15c2YCrL|%yv(I6Pf?eriF^@whE{o&4tb6)d7f^m z(j)Wel^2MA8F-O)d5Mg?OhI0uBCpbr9-?0b=F=vx(J8N!lQ$^Io7Chj`s8gAUk7TW zWC2-uhoZboRoGf_Vq&NTge zIJ31eocX$NIE(d*;j}b^Uk+!yel?sa`t@*T=r_ZetKSZ1p*DxpZ&7g3aK`F)!k) z(?5qZS^I`_nJyX5!}`~7KGMI3v(yj4e?q_h8~XLX&>wUne+XBK&?8IHD@zmqF|Z8n zvMd={j)E*tMOL68QKCNu`q3sU(kUyEla(pSD%7MueKLT=&w&^z8Aw(JQIx?{We80f zN~||9jHC=FEphVFLRm&omytvk2S(8(Iujn@pfnb|WXdQ<6QX$)5DdUL=+T_9i7AWMv{n*@vp^OH=kE_E%tkl5zlPIgq?` zQkF^7eEjbLo=v=$7;8ksQ4;o%m9L3uu=M$;d?%aI;fU3MhQ{E-kKkyz&d7rd=KwdtiEOqMg5s?AQth3br z;*1%v%-TzR9A~0_5@(uz8fUhC7H7VG9%r#O;JKA*YD!Y(eL9d&>!L~(I4ZC9u)j3&IJ8A&Q$Gsx* z*gGU#Ekb-~U@6*VX)>}51zDDgEJs6@Cps*!0&NndQ~HsU6)DL|)MRD)WEB#_1N}+K z0J0LJCWWL3IlHF{)qdL==8 zL|`=SvIZGhlY*>8Mb@Sv>ku6oSeG_wrBlX`ll3Uc`qX3t`eZ{AqXHX|l8wnq8$}sQ zRW_k1n-W_!uo+3&oV08~UbdtxN$N6=$ZCPDXqBz$kZtIaZRwWn=#lN|m3HE*2gcJb zJCKnbDacM#WM>+(3(-ViSK1^+r%WIxyHS$esmUJn$(|%e2lgT*dy|z8iZYR^>_b!b zCALOjKa#RPX*qzr97tI@smmlHYX%OYRSu>@4xvj9rCSc8M-Hb~(!|#aOr~9qAR|Xo zkfW%`(KO^3qH70^rA;z)$`o>P93?rPnw&tNoJeAwz)7U!WU`W_C{wA*DKzC&V(SJ@ zBPpkomNUr9nUtlAx=bU|8aRtqIhzhShb}pnZaI%0IiFt15g!wnPP<${MlPfv7g3Rm zX~-o+*9%-qo8;+~%gD*)l;jF(awUCo6^Zo&SCf)!$V!2t%%CdQ(v<6nZ4j7AQm!X0 zke3@MOOd+FBC=uNMq1@2I^<@$5~UYv;`g{B@dC6GDUfqsysqd9wjz5@EA#XoU}YaUY?{Z z73wmV$R>fOXqBhwkZ0(UXX%#b=#l5?l`8Q~1M_H?7s$wq6yzl;@-hv1h3IC1S80vb@qCd7UdaK}1Elkj#TbQc7EzHuz zEzHwjT3DpNwlHw(;BPIA)8AW|tbep{nf}?r!`j!vN4lhirM3zF75eq>(69f5e*HJ} z>wlp?=tyo8t`;G_ZD1+dWoa_93OTki<@bjY!GH zWTlOwjHN1@(3DMy?Ht&Qq-;)FwjeKCQkEoj8AoK7z*e-%)^x}=bjh}K%Xak0_Vh|S z@m&MsX_p4kdxgg$?nu-5Bg+J5)%S@k&?a1N(V)m zNLBWsDf<%JEwCR+*`Kr=Kwb`{ES=P45|P~l2hl1A(;djuxa zE=Q1&BPqyHRODzHatzTu1IN-P89HSOIXRA!98XP7pifRDu~*rLz*Dr!({#u)bjh=H%X9R|^YluU_`!jBw95-*1A zWvNq_kBA)ZNRD94;b9Cu9>GNYWCYXn(-F+p&qgp`KOezjZH%BL9b7nq@%qIGrs$U= zn4w>dV6J{Wf`$6c2>MM9emjD(+8n_oT{ME}`rQcT==UR7pg)XYiT*f((MJS-8o>np zc?46ncLcL^@dy^_FC!RuWboG!jMLvnFj;>e!Daf#2p-lyNAQvMjbN#xf=fcT{uR3Q z@6fIPgl_#ebnAbiI~YbXess86gmzhqj4Vw-mZ2ic(vand9uruePFaDRL@7x>YO*4I zvJ#1711pn~Rme(ziZXzz#AwPuVwu1ok}{aI3?VN=Da$bGGMvbiK%7=-p+iQ{B_rvU zQS`{F^vY_)j|;3$yClfSXbQ3h61Lv|#Z4eUgl>`bTZLQZz2Bq?e#fj-%d#MHpmBRQ#y#95|~I*_8~3%l9&A`%l_2m03xRb4y08&>5xfu$w73>!Su)>^va>cPYWDI zyBtnN(iCJe6*+>297*)_z)`fx(R9i&6A;z$)%JePfaePPcA2McHjz9awS>0ilSUiRj#2a1!Cs} zW{{L?Ny~NQWhQ00p1MHf+`tXAN|6qkMVH)2x7K2mZ&S$Tk>JV;d@qA6u!(*qBalt)O* zqvYi=%JMjMd4k9VfhTE|3LP?+E_sS>d72)1hF*D=_=SPzXqV^7NR@)jqarWRkQa$w z6nKd?d6`amg`B)fNqVTseEQ@y5*G(vCnax?l{YEMTU6z3no=WnNnims2`1Fn*MJjv-RVV%-2swvRFSINlQNX*+|Cg=OdY- zjgidIg(I1(UyNj-emRnUmj%BX$yoh*B$M=;kxbWbM>0p7BUzw}MzTb|8_DR)gWr#2 zg8nd)srutcX6a8OnWsOGWRdocWZ)IS#UmM~zl>zE{yLJ&^tX{btiO-sBmH9}OI;cK zGxTd;=+`BoU;hgI`giEpe?q_h8~U#b{ula#VJ9aE8Eb1LttAnvKWEX0(D}9n8F)J{E zlY9fs;u}mb6SIFQ-tJQ>n{oM7jf~(<*1sA!pJhU3AMddgLs6djhx9CU?*&caoF4D9PQ_DzUH042J za{>>Mlrm{~n7lkfSstY>j}f^y@HnmV1Re4uT~eW2=F%fi(JN0Azc26%?eZ)cd5(fS zPerOUWFFD`1251fFVZP5k&~Ax$t%?4Rr;id!~=o(q~tZS@;XI%gQ~nqQ{E!>VBl?% zQX?%3$jdvF3jL3rErK;ouje7^`27Vv>F}is}0GDCX!lqgbHdj$(;6 zM=|=5;G$7X(Csv-S$RBMH$p>} zBKkyNY1(8NI%QdMvK%E@o|>#cpF~MK8R$n!RwOGcQIwUb$|^LaKe0++07;3FmVxAD z5M>!mU4{^u8yHHf45LGa(=%cj(2 zGa}CgHm6m#phLE#OOkZUIC^9&dSz?k&j+@lUA847+fk71sYp8w8Beqt*nu|Lkxto( zoa{_VcA+M_(kCer^8yn{$!=t2cZ#wHRoRoK>_zN_z}_UKgS1Q}FZ)oIeW}ZSL|zQ+ zPpce2ha56D|$$wDksvElZd?N1nan}O?T73h!~=#nDc zGK(I$kzTop_*;RSX_s5b$gLFQHY(Chs-XLHW6#3nYe ziA`)`6I)^vo7gaHViU_=VH2BZS=bV7VG~=T4Y5+Oi7l}uw*H^@?_7MJH|OSczUT3M zKR7o>%)z4Yy6vTY0;u&1ajc4(T z91*dAqEOMoPR+UKFT^ zB{)AZ-oPi`BrM({A>Jk{-k~Jkr7ntiJ~fsS6z>re?~@iEP!Jzd6(8aH%vgqBl!%Ds zB*hAH;$zC<6C5kGlnr#Pw3q&~2FA;k4NR5g2Ik0B4J?(PH?UED(ZKMs`DFuRZD6kau7Tz9`vx}4Y6H!mo9i1G zCx2*Qiu|#G+483bmdKwQSTBERVCWa-h6cvSS_2d1#s+4{UmI8;e`{cs{Jnu*Uz&ed zzx>nsYa*a}z07=mB8h=`#i#n$A+Hk8G-IMx~4 z;T78x62piKHyJUUqS%3&7=imMV@Cp_fv9LCC7Q?!4;9gj^J}98pJ*j4+DM3YvZ8~M z=%g;Zc)l^Z2#RiEqKC8?NkQyHRqTxGTVoV{;UgkOlN7s<6T4CtyW#lG*d4FfgOJ#h zxbTw^V_~%ix3epo}@U2oH&-UI1a~;#_@Q?353Ln#6_5l zm_SjSL`|HG`zPZR0^(Gn;xtm?bn+rXMNGu`vvCGKaVBAL771}SS#b^}F^Rf};`zmx zOi-LlOq@qroKHbqKvi6bYlCqSei0)grjQgDlM|Ov7MJ3v8JFP|mlG0K5EpSWVk$*( zB{gvs?v2LP1jIE&#WYglTJj=6MNG%}t8pDZaXn#i0|{{>S#c93aWi$1#PgdmgP^#D zw78XmxQ(i~9oO&19r(qaL_~_Dm`P6DMOoa9;}2sNUU3g00da9J8Ih(aW>XXQ;r`RO zpMZFPsCbZ+c!<1sn2N~Y++@tbCmtaz9wi|jBP$-KB%Yuyp2Sl(vINCkVqzX?@e~E| zG*vMl*Jk4x{Nh=XB1cXvpe&xl@t5&DUhx7U@gi~Y5*e|OqR3Mdi*WyKEG8gcCMsSb zC0->jUZWyj$M=s>AS{-U5O0tbZ&DI(Q5SFH`PX=dpm>*v(_Lq!9y-Tio9__`qW4rTfee_WlsReY;I*L@XmI zO60_H%3{SVN8gTKA2-hG>f7Gylg3%&jZYhAO*KAioHfT-**I&dQEr^I(OA{UaEJMM zBV*+kjZBtbHZoJLZe)>M)5toxwvmCo%t|Ap<+?^D$gdiiF28PMuKcEv5^x{@KVJxv7z*vfju>x!L;rnSWWo{M-8FKh`h*wSM`Z^_#Y$ z&i;M1qCU}!u;@)f^dT$yQWE{Bi~e{97y}3jCowUQwAg}z7(`WUiOXpW#xJ%aB8HF@ zE^=ZhWwAAmfyOp?#kPdRcErW@WW+Fv!c9#K$GwHI0|7CDsMwK|Xdo{dsfZ?=gA5No z(M(vhkPxk8MH?m2PF-~1+0y7FD7?f(7irN=LG(}+BXJEjcET@qCL%_W6h3ldG-a_1 zj;)Mc@rvCDiQS2dJ;;bXDGEO|F$VV#V=n??Z=zx!Qet27Vm~Tkf1EBOfKQAiEDj(c z4kRlMq9hKcE)Kyn)Hsx&2oe+HNQ=WLh{LIhBXDhP9Eo2XMMNA;QiRBf@s!0eIJPm4 z#Vd{@B#tL8P9P&rq$tAF#01>i8YdADCleK?kP@eo7pGAXr{mnth~N_w35zpGh%?EG zvnYwPsf%;)Y;Q~=D5Au~WYXeX3gSGf;(T1gj0^CK3yFw}NQxLaF@>_Y7>C=q1h2T1 zkhqMvxSWi*f})616H{>yH?AZgt|BU~CMB*RFQ!ou*W%p4NZ=FG35)AUi0jFU8z_kz zsf(NNj4*B{D3Zj)4ASBj3gT9(;x=468n@#YcMuVGk`yU&VkTvA7mfzwZoFa^A#o3J z0U2>GMUkc^X5(%&?js=XCn_EwB_1R%9-<;1#@S?K@QFEu#Umudqh!Tnl*HrI#S?fu z#*+j^mYA4JTFj#$o}wzA#?@@h$1k2CBAz8Fa^%DU%Hla3EynYB#S4VQi^RoCWW+*> zB2P^$!rf{tCLmrWDqbNaUL`MHqat3%*=7{*i6w-^8zjV=WW`&Q#M{)xJ9yfScL|Cj zF|m}ic#nd3pQ`u(SBLQ-e(@1Wv5cH3Q5MT_blNC6qCWd>>RZWbQpEogCe$m8C`DGJ}9^7|%c%W4x#3GKZ2q^F)@I&a8eKhsfsOd`HVsM z#g;_GV3J}ha$*Q&;leT67>ZYHO-O7*Tx?55Y)4USPfZNNy^G-{AchkaJCG71$cr7R zhz6Xy8jbiw6Jg;YA)3jG7D}R(x@g0*o6$~CbPyArq=lD)=%OmRaqVvO;1?r_h@D7^ zoymz&l!Xt+9>!?AVi!VUSK?wfGGcd%Vh?I!PuzPNega|)QLz^(u{U|K4;8U5PQS4q zKCwSx5g;MPk`)I~5(iQj2jLlG986FgLQEV=S_CPGaa6@&xb`v*$1jc`B90^}jv^DX)iId5TQ>chjaqerJhEJSM zSVTyOiDbnYl*F0T#aVdvGtMR`&LJiykrq)3Vlq{6F0TEJ^YDxFiHHkGiVMk!iztg2 zj({-*ueg|yxP-X4l#IBHqPU!zxB~ZBBThg}B`U5YC9WbbuBIZc!Fhl&4WGD{ut<;) z)5(hKD2eN-iyQD9XxvCp+(b;=Oj;x^FdvPCPqzQ=GM8$oi#Qo&O160I=I1e=*!Y3XkEHWg-9J1mO zO5#!K;xRly<8gxG31Z?&(jrSi%%v*k;TmT=g z3J+7|#~$X$PdqG@pL*CRKl3m=WUlluR+c?Xma9C>l%IQ8B){;mPJZcOpgxzb_Apwm z@i0NI^)OvlJj|8rJS>-AdDtw!_RxHc`HhEh@>>s669VWRxW!wmVehXwK%53A$``}gI?nKkQ|8?9gdYW?yz>zBV1c<)7Anyt&Ex zW!?JaX6u)KS-8BB z#Q+MzNmUHQ6*jiOF9s12Tapxm$%(Bfiy=5B7%seGC?T;maj^{U5JZa$%x%3iruM+J#e3H>`6fQiHb3# z#9rjZ-c-asI3vcs_{4sM#r`BjfUFoxNgP039EfM4aS%aqFfnlmX>lk85u_@{;X1=O z48J&>h&Y0zIFg(=in2Hw$C*Y5uNY5A979|jOGX?=Q5;WAoPhf*<3s`?OjJxDB~BtQ zPNpJG!FjfEDn4-;a7g81%;fNYBykZI=aWQdm2^n!IMR6H5aXIeE#uWraoT!*eN?b`^Tt!7( zjq_aN8hm0JVR0=9ksvFkQxexv7uVxC&$xl0xRIE+iL|(xf=E&oGjN@6+=5@+N<`d7 zQru2X+(B8~iQ@tzg;&fZB<>BWra9(6Q zh)+C3SUgNZWXOs+l*A*{#iMv)#$yD<Oo+Bfkrzl>aCSJsSiSZHvv5=_9lM;)_i^WvL%Q!DJUco0`B`jVe zAzmjd3Y5eW>f#MNmlQE;Tb=E^lV4T+z%N`EfH#n zziVc_{Jxo?SDDpj#>n-}Oq4$~GeiE^%mVpSGppp!&Gfq3{KdNE2J4nJ>y{g>TmEX@ z@;B?2zgzb;<{#EA|Fmwo$+~6Ty5(l;mVa6IH1lukmj76{{MWkWf7Wf5_}KNkPwYzMH40A!E=MrOi;8C z6Ro608wJr$RdnFG(dfi4yhKD7NzqMC^iUQfaol9=gjeiLNQ@#bd}PFEieeXPVprTZ z8@mw@yAu_AkP>^67k(;Y49=vn7e28!VX+Shu`gM%A0@FrbrHZb!x&3Y96(GQNLn03 zK^#m~9D?f><52t}NJNYyDGnni4yP=Rz;UZ_Bwle8A#pTu5h5eTQxwNg6UXAd%{Y#L zIG(6Dfs{Crya-bf6L8*coP4D9#`z&Ll0)q9D$u zD$c=mr!fh?h!PQ#Ns4pHiSsCn^Kqn%3-F2y35kn{ix?R(g`&8anz#h_Oyg1l;xeM* za#G?7@*++}OvQPZaV0)+6=88T32_ZsF^!VAmbysbx!agdP+Uh$Tu)luKtbF{RosMY zmT@zFkt8B!kQBF&6SqIkk zoDUd_@rjoSi&sd9SILUkD2dmpivpepjU@!d8^pw$q{Ukl#M@NGJGdS)-o-D9M8r~( z;yrTWeahkk91q(*T5y2F@`*Z(+3jqJ;_a%NC}~)h*1GYg$+?*S4@(R$6F Y_H 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

`3RLasq`j%iSEpi%pIh`&!gOZ#{ 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