From 0a10a12c7efc6e0dfe9a6340fa53b2572e43931c Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Sun, 26 Jul 2026 20:39:13 -0500 Subject: [PATCH 01/14] Implement Rust version of Paperclip for AOT --- .github/workflows/native_build.yml | 72 ++ native/.gitignore | 6 + native/Cargo.lock | 1615 ++++++++++++++++++++++++++++ native/Cargo.toml | 43 + native/build.rs | 468 ++++++++ native/rust-toolchain.toml | 2 + native/src/aot.rs | 508 +++++++++ native/src/args.rs | 215 ++++ native/src/classpath.rs | 396 +++++++ native/src/errors.rs | 129 +++ native/src/jni.rs | 140 +++ native/src/main.rs | 302 ++++++ native/src/util.rs | 126 +++ 13 files changed, 4022 insertions(+) create mode 100644 .github/workflows/native_build.yml create mode 100644 native/.gitignore create mode 100644 native/Cargo.lock create mode 100644 native/Cargo.toml create mode 100644 native/build.rs create mode 100644 native/rust-toolchain.toml create mode 100644 native/src/aot.rs create mode 100644 native/src/args.rs create mode 100644 native/src/classpath.rs create mode 100644 native/src/errors.rs create mode 100644 native/src/jni.rs create mode 100644 native/src/main.rs create mode 100644 native/src/util.rs diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml new file mode 100644 index 0000000..d584eac --- /dev/null +++ b/.github/workflows/native_build.yml @@ -0,0 +1,72 @@ +name: Build Release +on: + workflow_dispatch: + inputs: + jar_url: + description: 'Direct download URL for the input JAR' + required: true + type: string + +jobs: + build: + name: Build ${{ matrix.target }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + # Linux (x86_64) + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + use_cross: true + extension: "" + # Linux (aarch64) + - os: ubuntu-latest + target: aarch64-unknown-linux-musl + use_cross: true + extension: "" + # macOS (x86_64) + - os: macos-latest + target: x86_64-apple-darwin + use_cross: false + extension: "" + # macOS (aarch64) + - os: macos-latest + target: aarch64-apple-darwin + use_cross: false + extension: "" + # Windows (x86_64) + - os: windows-latest + target: x86_64-pc-windows-msvc + use_cross: false + extension: ".exe" + # Windows (aarch64) + - os: windows-latest + target: aarch64-pc-windows-msvc + use_cross: false + extension: ".exe" + steps: + - name: Checkout repository + uses: actions/checkout@v7 + - name: Download Input JAR + shell: bash + run: curl -fL -o paperclip.jar "${{ inputs.jar_url }}" + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + toolchain: nightly + targets: ${{ matrix.target }} + - name: Install cross + if: matrix.use_cross + run: cargo install cross --git https://github.com/cross-rs/cross + - name: Build with cross + if: matrix.use_cross + run: cross build --release --target ${{ matrix.target }} + - name: Build with cargo + if: ${{ !matrix.use_cross }} + run: cargo build --release --target ${{ matrix.target }} + - name: Upload binary artifact + uses: actions/upload-artifact@v4 + with: + name: paperclip-${{ matrix.target }} + path: target/${{ matrix.target }}/release/paperclip${{ matrix.extension }} diff --git a/native/.gitignore b/native/.gitignore new file mode 100644 index 0000000..c2fe87a --- /dev/null +++ b/native/.gitignore @@ -0,0 +1,6 @@ +.idea/ +/target +.DS_Store + +run/ +paperclip.jar diff --git a/native/Cargo.lock b/native/Cargo.lock new file mode 100644 index 0000000..ae0c44e --- /dev/null +++ b/native/Cargo.lock @@ -0,0 +1,1615 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aes" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" +dependencies = [ + "cipher", + "cpubits", + "cpufeatures", +] + +[[package]] +name = "arc-swap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +dependencies = [ + "rustversion", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bitflags" +version = "2.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" + +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", + "zeroize", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "bzip2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +dependencies = [ + "libbz2-rs-sys", +] + +[[package]] +name = "cc" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cdivsufsort" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edefce019197609da416762da75bb000bbd2224b2d89a7e722c2296cbff79b8c" +dependencies = [ + "cc", + "sacabase", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cipher" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + +[[package]] +name = "cobs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" +dependencies = [ + "thiserror", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "constant_time_eq" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-deque" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" + +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + +[[package]] +name = "curl" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a45ee8994e5307cb4c60cfc1c20bf7263ffb771ddc135c9f768a14bcbc15b09" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2", + "windows-sys", +] + +[[package]] +name = "curl-sys" +version = "0.4.90+curl-8.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97799a0d220bfb3361e0fe4936966ff8c4b24d65c3f06dfc70d7b680b44e7897" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys", +] + +[[package]] +name = "deflate64" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "ctutils", + "zeroize", +] + +[[package]] +name = "digest-io" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2de63d600bc7fab91180bc17385f29b342468dc8ef2af09dceba450a293de3da" +dependencies = [ + "digest", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags", + "objc2", +] + +[[package]] +name = "either" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "futures-core" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" + +[[package]] +name = "futures-task" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" + +[[package]] +name = "futures-util" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasm-bindgen", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin", + "stable_deref_trait", +] + +[[package]] +name = "hex-literal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1" + +[[package]] +name = "hmac" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" +dependencies = [ + "digest", +] + +[[package]] +name = "hybrid-array" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "818356c5132c1fede50f837ca96afbe78ff42413047f4abb886217845e1b6c8c" +dependencies = [ + "typenum", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "inout" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "java-locator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c46c1fe465c59b1474e665e85e1256c3893dd00927b8d55f63b09044c1e64f" +dependencies = [ + "glob", +] + +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "java-locator", + "jni-macros", + "jni-sys", + "libloading", + "log", + "simd_cesu8", + "thiserror", + "walkdir", + "windows-link 0.2.1", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "libbz2-rs-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.1", +] + +[[package]] +name = "libredox" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +dependencies = [ + "libc", +] + +[[package]] +name = "libz-sys" +version = "1.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" + +[[package]] +name = "lzma-rust2" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca93e534d1142d1d0dcca6d25fe302508a5dfb40b302802904577725ea0b695b" +dependencies = [ + "sha2", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nyquest" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c54715182b0e7fb868e03ca248e7ce988db1c3539448e2e89172e464c46fc63d" +dependencies = [ + "nyquest-interface", + "thiserror", +] + +[[package]] +name = "nyquest-backend-curl" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a929439f135ed0b3944a6f7a881f9712c7d102ec89520eb3b6fc9a90f75c77ce" +dependencies = [ + "curl", + "curl-sys", + "libc", + "memchr", + "nyquest-interface", + "pin-project-lite", +] + +[[package]] +name = "nyquest-backend-nsurlsession" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "737f41a546c5fef3466f809bfb44ec2bbef6bd01ba39214bf8ffc1f331452e07" +dependencies = [ + "arc-swap", + "block2", + "cfg-if", + "nyquest-interface", + "objc2", + "objc2-core-foundation", + "objc2-foundation", + "objc2-security", +] + +[[package]] +name = "nyquest-backend-winrt" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7dd1a2bde71ed7e8bf33bcf5f56669aa3dea0f6d4a8b4b9c6557dd9766813ef" +dependencies = [ + "cfg-if", + "nyquest-interface", + "windows", + "windows-collections", + "windows-core", + "windows-future", +] + +[[package]] +name = "nyquest-interface" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb05f2ed2f66e1ebe9135ebac41d17e00588841502c4fad99ed57476c13147ca" +dependencies = [ + "cfg-if", + "thiserror", +] + +[[package]] +name = "nyquest-preset" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea35ac70869718aceb64b004e507fd5644f58b574ff84ac5e936912a37ef2c54" +dependencies = [ + "cfg-if", + "nyquest", + "nyquest-backend-curl", + "nyquest-backend-nsurlsession", + "nyquest-backend-winrt", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags", + "block2", + "objc2", +] + +[[package]] +name = "objc2-security" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" +dependencies = [ + "bitflags", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "paperclip" +version = "0.1.0" +dependencies = [ + "core-foundation", + "digest-io", + "hex-literal", + "indoc", + "java-locator", + "jni", + "nyquest", + "nyquest-backend-curl", + "nyquest-preset", + "pkg-config", + "postcard", + "qbsdiff", + "rust-embed", + "serde", + "serde_json", + "sha2", + "thiserror", + "zip", +] + +[[package]] +name = "pbkdf2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" +dependencies = [ + "digest", + "hmac", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "heapless", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppmd-rust" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "qbsdiff" +version = "1.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc7f24528be166f08f2c7becaca5618865499b6ded2565d5afcd795cc0d7596" +dependencies = [ + "byteorder", + "bzip2", + "rayon", + "suffix_array", +] + +[[package]] +name = "quote" +version = "1.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror", +] + +[[package]] +name = "rust-embed" +version = "8.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" +dependencies = [ + "mime_guess", + "proc-macro2", + "quote", + "rust-embed-utils", + "shellexpand", + "syn 2.0.119", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "sacabase" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9883fc3d6ce3d78bb54d908602f8bc1f7b5f983afe601dabe083009d86267a84" +dependencies = [ + "num-traits", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shellexpand" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd-adler32" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "socket2" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "spin" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "suffix_array" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "907d9ca9637a22e3a7d7c7818f6105a7898857359e187ad3325d986684b9ec3f" +dependencies = [ + "cdivsufsort", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.2", +] + +[[package]] +name = "time" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +dependencies = [ + "deranged", + "js-sys", + "num-conv", + "powerfmt", + "serde_core", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" + +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.119", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.126" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core", + "windows-link 0.1.3", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "zeroize" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" + +[[package]] +name = "zip" +version = "8.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" +dependencies = [ + "aes", + "bzip2", + "constant_time_eq", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.4.3", + "hmac", + "indexmap", + "lzma-rust2", + "memchr", + "pbkdf2", + "ppmd-rust", + "sha1", + "time", + "typed-path", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zlib-rs" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" + +[[package]] +name = "zopfli" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/native/Cargo.toml b/native/Cargo.toml new file mode 100644 index 0000000..d4b9a98 --- /dev/null +++ b/native/Cargo.toml @@ -0,0 +1,43 @@ +[package] +name = "paperclip" +version = "0.1.0" +edition = "2024" +license = "MIT" + +[profile.release] +strip = false +opt-level = 3 +lto = true +codegen-units = 1 + +[dependencies] +jni = { version = "0.22.4", features = ["invocation"] } +java-locator = "0.1.9" +qbsdiff = "1.4.4" + +nyquest = { version = "0.4.0", features = ["blocking-stream"] } +nyquest-preset = { version = "0.4.0", features = ["blocking-stream"] } +sha2 = "0.11.0" +digest-io = "0.1.0" +thiserror = "2.0.19" +zip = "8.6.0" + +serde = { version = "1.0.229", features = ["derive"] } +postcard = "1.1.3" + +hex-literal = "1.1.0" +rust-embed = { version = "8.12.0", features = ["interpolate-folder-path"] } +indoc = "2.0.7" + +[target.'cfg(target_os = "linux")'.dependencies] +nyquest-backend-curl = { version = "0.4.1", features = ["blocking-stream", "ssl"] } + +[target.'cfg(target_os = "macos")'.dependencies] +core-foundation = "0.10.1" + +[build-dependencies] +zip = "8.6.0" +serde_json = "1.0.151" + +[target.'cfg(target_os = "linux")'.build-dependencies] +pkg-config = "0.3.33" diff --git a/native/build.rs b/native/build.rs new file mode 100644 index 0000000..e9a4617 --- /dev/null +++ b/native/build.rs @@ -0,0 +1,468 @@ +use std::fs::{File, OpenOptions}; +use std::io::{Read, Write}; +use std::path::Path; +use zip::ZipArchive; +use zip::result::ZipError; + +// Paperclip needs the following files from the Paperclip jar to execute (all in META-INF/): +// 1. patches.list +// 2. versions.list +// 3. libraries.list +// 4. download-context +// 5. main-class +// 6. versions/ (directory) +// 7. libraries/ (directory) +// This script looks for a `./paperclip.jar` file in the project and extracts those pieces from it if present. +// The result is an equivalent Paperclip executable, but as a native binary rather than a jar file. +// If there is no `./paperclip.jar` file available, this will generate empty stubs so the code will still resolve +// properly in an editor, but an error will also be inserted to prevent the project from successfully compiling + +fn main() { + println!("cargo::rerun-if-changed=$CARGO_MANIFEST_DIR/paperclip.jar"); + + configure_host(); + + let out_dir = std::env::var_os("OUT_DIR").unwrap(); + let out_dir = Path::new(&out_dir); + + let manifest_dir = std::env::var_os("CARGO_MANIFEST_DIR").unwrap(); + let manifest_dir = Path::new(&manifest_dir); + let jar = manifest_dir.join("paperclip.jar"); + if !jar.is_file() { + println!("cargo::warning=paperclip.jar not found"); + patches::write_empty_patches(&out_dir); + files::write_empty_entries(&out_dir, "versions"); + files::write_empty_entries(&out_dir, "libraries"); + config::write_empty_config(&out_dir); + extract::create_dir(&out_dir, "versions"); + extract::create_dir(&out_dir, "libraries"); + write_error(&out_dir); + return; + } + + let jar = match File::open(jar) { + Ok(file) => file, + Err(e) => { + println!("cargo::error=Error opening paperclip.jar: {e}"); + return; + } + }; + let mut jar = match ZipArchive::new(jar) { + Ok(j) => j, + Err(e) => { + println!("cargo::error=Error reading paperclip.jar: {e}"); + return; + } + }; + + // Write config data + if patches::write_patch_file(&out_dir, &mut jar).is_err() { + return; + } + if files::write_entries_file(&out_dir, &mut jar, "versions").is_err() { + return; + } + if files::write_entries_file(&out_dir, &mut jar, "libraries").is_err() { + return; + } + if config::write_config_file(&out_dir, &mut jar).is_err() { + return; + } + + // Extract files + if extract::extract_to_dir(&mut jar, "versions").is_err() { + return; + } + if extract::extract_to_dir(&mut jar, "libraries").is_err() { + return; + } + + // If we built from an invalid paperclip.jar, prevent compilation + let patches_text = std::fs::read_to_string(out_dir.join("patches.rs")).unwrap(); + let config_text = std::fs::read_to_string(out_dir.join("config.rs")).unwrap(); + if patches_text.contains("[crate::classpath::PatchEntry; 0]") && config_text.contains("None") { + write_error(&out_dir); + } +} + +#[cfg(not(target_os = "linux"))] +fn configure_host() {} + +#[cfg(target_os = "linux")] +fn configure_host() { + let target_os = std::env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS not set"); + + if target_os == "linux" { + pkg_config::Config::new() + .probe("libcurl") + .expect("System libcurl development headers are required for Linux builds."); + pkg_config::Config::new() + .probe("openssl") + .expect("System openssl development headers are required for Linux builds."); + } +} + +mod patches { + use super::*; + + pub struct PatchEntry<'a> { + location: &'a str, + original_hash: &'a str, + patch_hash: &'a str, + output_hash: &'a str, + original_path: &'a str, + patch_path: &'a str, + output_path: &'a str, + } + + pub fn write_patch_file(out_dir: &Path, jar: &mut ZipArchive) -> Result<(), ()> { + let mut patch_list = match jar.by_name("META-INF/patches.list") { + Ok(p) => p, + Err(ZipError::FileNotFound) => { + println!("cargo::warning=paperclip.jar does not include a patch list"); + write_empty_patches(&out_dir); + return Ok(()); + } + Err(e) => { + println!("cargo::error=Error reading paperclip.jar: {e}"); + return Err(()); + } + }; + + let mut patch_lines = String::new(); + if let Err(e) = patch_list.read_to_string(&mut patch_lines) { + println!("cargo::error=Error reading patch list in paperclip.jar: {e}"); + return Err(()); + } + + let mut patches = Vec::::new(); + for line in patch_lines.lines() { + let parts: Vec<&str> = line.split("\t").collect(); + if parts.len() != 7 { + println!( + "cargo::error=Patch list file in paperclip.jar contains an invalid line: {line}" + ); + return Err(()); + } + + let location = parts[0]; + let original_hash = parts[1]; + let patch_hash = parts[2]; + let output_hash = parts[3]; + let original_path = parts[4]; + let patch_path = parts[5]; + let output_path = parts[6]; + + patches.push(PatchEntry { + location, + original_hash, + patch_hash, + output_hash, + original_path, + patch_path, + output_path, + }); + } + + write_patches(&out_dir, &patches); + + Ok(()) + } + + #[rustfmt::skip] + fn write_patches(out_dir: &Path, patches: &[PatchEntry]) { + let mut file = File::create(out_dir.join("patches.rs")).unwrap(); + + write!(file, "pub mod patches {{\n").unwrap(); + write!(file, "{}pub const PATCHES: [crate::classpath::PatchEntry; {}] = [\n", ind(1), patches.len()).unwrap(); + + for entry in patches { + write!(file, "{}crate::classpath::PatchEntry {{\n", ind(2)).unwrap(); + write!(file, "{}location: \"{}\",\n", ind(3), entry.location).unwrap(); + write!(file,"{}original_hash: hex_literal::hex!(\"{}\"),\n",ind(3),entry.original_hash).unwrap(); + write!(file,"{}patch_hash: hex_literal::hex!(\"{}\"),\n",ind(3),entry.patch_hash).unwrap(); + write!(file,"{}output_hash: hex_literal::hex!(\"{}\"),\n",ind(3),entry.output_hash).unwrap(); + write!(file,"{}original_path: \"{}\",\n",ind(3),entry.original_path).unwrap(); + write!(file, "{}patch_path: \"{}\",\n", ind(3), entry.patch_path).unwrap(); + write!(file, "{}output_path: \"{}\",\n", ind(3), entry.output_path).unwrap(); + write!(file, "{}}},\n", ind(2)).unwrap(); + } + + write!(file, "{}];\n", ind(1)).unwrap(); + write!(file, "}}\n").unwrap(); + } + + #[rustfmt::skip] + pub fn write_empty_patches(out_dir: &Path) { + let mut file = File::create(out_dir.join("patches.rs")).unwrap(); + write!(file, "pub mod patches {{\n").unwrap(); + write!(file, "{}pub const PATCHES: [crate::classpath::PatchEntry; 0] = [];\n", ind(1)).unwrap(); + write!(file, "}}\n").unwrap(); + } +} + +mod files { + use super::*; + + pub struct FileEntry<'a> { + hash: &'a str, + id: &'a str, + path: &'a str, + } + + pub fn write_entries_file( + out_dir: &Path, + jar: &mut ZipArchive, + location: &str, + ) -> Result<(), ()> { + let mut entry_list = match jar.by_name(format!("META-INF/{location}.list").as_str()) { + Ok(p) => p, + Err(ZipError::FileNotFound) => { + println!("cargo::warning=paperclip.jar does not include a {location} list"); + write_empty_entries(&out_dir, location); + return Ok(()); + } + Err(e) => { + println!("cargo::error=Error reading paperclip.jar: {e}"); + return Err(()); + } + }; + + let mut entry_lines = String::new(); + if let Err(e) = entry_list.read_to_string(&mut entry_lines) { + println!("cargo::error=Error reading {location} list in paperclip.jar: {e}"); + return Err(()); + } + + let mut patches = Vec::::new(); + for line in entry_lines.lines() { + let parts: Vec<&str> = line.split("\t").collect(); + if parts.len() != 3 { + println!( + "cargo::error={location}.list file in paperclip.jar contains an invalid line: {line}" + ); + return Err(()); + } + + let hash = parts[0]; + let id = parts[1]; + let path = parts[2]; + + patches.push(FileEntry { hash, id, path }); + } + + write_entries(&out_dir, &patches, location); + + Ok(()) + } + + #[rustfmt::skip] + fn write_entries(out_dir: &Path, patches: &[FileEntry], location: &str) { + let mut file = File::create(out_dir.join(format!("{location}.rs"))).unwrap(); + + write!(file, "pub mod {location} {{\n").unwrap(); + write!(file, "{}pub const {}: [crate::classpath::FileEntry; {}] = [\n", ind(1), location.to_uppercase(), patches.len()).unwrap(); + + for entry in patches { + write!(file, "{}crate::classpath::FileEntry {{\n", ind(2)).unwrap(); + write!(file, "{}hash: hex_literal::hex!(\"{}\"),\n", ind(3), entry.hash).unwrap(); + write!(file,"{}id: \"{}\",\n", ind(3),entry.id).unwrap(); + write!(file,"{}path: \"{}\",\n", ind(3),entry.path).unwrap(); + write!(file, "{}}},\n", ind(2)).unwrap(); + } + + write!(file, "{}];\n", ind(1)).unwrap(); + write!(file, "}}\n").unwrap(); + } + + #[rustfmt::skip] + pub fn write_empty_entries(out_dir: &Path, location: &str) { + let mut file = File::create(out_dir.join(format!("{location}.rs"))).unwrap(); + write!(file, "pub mod {location} {{\n").unwrap(); + write!(file, "{}pub const {}: [crate::classpath::FileEntry; 0] = [];\n", ind(1), location.to_uppercase()).unwrap(); + write!(file, "}}\n").unwrap(); + } +} + +mod config { + use super::*; + + #[rustfmt::skip] + pub fn write_config_file(out_dir: &Path, jar: &mut ZipArchive) -> Result<(), ()> { + let mut context_line = String::new(); + { + let mut context_entry = match jar.by_name("META-INF/download-context") { + Ok(e) => e, + Err(ZipError::FileNotFound) => { + println!("cargo::warning=paperclip.jar does not include a download-context file"); + write_empty_config(&out_dir); + return Ok(()); + } + Err(e) => { + println!("cargo::error=Error reading download-context in paperclip.jar: {e}"); + return Err(()); + } + }; + context_entry.read_to_string(&mut context_line).unwrap(); + } + let context_split: Vec<&str> = context_line.split("\t").collect(); + if context_split.len() != 3 { + println!("cargo::error=download-context file in paperclip.jar is invalid: {context_line}"); + return Err(()); + } + + let mut main_class_line = String::new(); + { + let mut main_class_entry = match jar.by_name("META-INF/main-class") { + Ok(e) => e, + Err(ZipError::FileNotFound) => { + println!("cargo::warning=paperclip.jar does not include a main-class file"); + write_empty_config(&out_dir); + return Ok(()); + } + Err(e) => { + println!("cargo::error=Error reading main-class in paperclip.jar: {e}"); + return Err(()); + } + }; + main_class_entry + .read_to_string(&mut main_class_line) + .unwrap(); + } + + let mut version = String::new(); // TODO replace with paper-version + let version_json = match jar.by_name("version.json") { + Ok(mut version_json_entry) => { + let mut json_text = String::new(); + version_json_entry.read_to_string(&mut json_text).unwrap(); + let value = serde_json::from_str::(&json_text).unwrap(); + version.push_str(value.as_object().unwrap().get("id").unwrap().as_str().unwrap()); + serde_json::to_string(&value).unwrap() + } + _ => "".to_string(), + }; + + let mut file = File::create(out_dir.join("config.rs")).unwrap(); + + write!(file, "pub mod config {{\n").unwrap(); + write!(file,"{}pub const CONFIG: crate::classpath::Config = crate::classpath::Config {{\n",ind(1)).unwrap(); + write!(file, "{}download_context: Some(crate::classpath::DownloadContext {{\n", ind(2)).unwrap(); + write!(file, "{}hash: hex_literal::hex!(\"{}\"),\n", ind(3), context_split[0]).unwrap(); + write!(file, "{}url: \"{}\",\n", ind(3), context_split[1]).unwrap(); + write!(file, "{}file_name: \"{}\",\n", ind(3), context_split[2]).unwrap(); + write!(file, "{}}}),\n", ind(2)).unwrap(); + write!(file, "{}main_class: \"{}\",\n", ind(2), main_class_line).unwrap(); + write!(file, "{}version: \"{}\",\n", ind(2), version).unwrap(); + write!(file, "{}version_json: r#\"{}\"#,\n", ind(2), version_json).unwrap(); + write!(file, "{}}};\n", ind(1)).unwrap(); + write!(file, "}}\n").unwrap(); + + Ok(()) + } + + #[rustfmt::skip] + pub fn write_empty_config(out_dir: &Path) { + let mut file = File::create(out_dir.join("config.rs")).unwrap(); + + write!(file, "pub mod config {{\n").unwrap(); + write!(file,"{}pub const CONFIG: crate::classpath::Config = crate::classpath::Config {{\n",ind(1)).unwrap(); + write!(file,"{}download_context: None,\n",ind(2)).unwrap(); + write!(file, "{}main_class: \"\",\n", ind(2)).unwrap(); + write!(file, "{}version: \"\",\n", ind(2)).unwrap(); + write!(file, "{}version_json: \"\",\n", ind(2)).unwrap(); + write!(file, "{}}};\n", ind(1)).unwrap(); + write!(file, "}}\n").unwrap(); + } +} + +mod extract { + use super::*; + + pub fn create_dir(out_dir: &Path, target: &str) { + let target_dir = out_dir.join(target); + let _ = std::fs::remove_dir_all(&target_dir); + std::fs::create_dir_all(&target_dir).unwrap(); + } + + pub fn extract_to_dir(jar: &mut ZipArchive, target: &str) -> Result<(), ()> { + let prefix = format!("META-INF/{target}/"); + + let out_dir = std::env::var_os("OUT_DIR").unwrap(); + let target_dir = Path::new(&out_dir).join(target); + + for i in 0..jar.len() { + let mut entry = match jar.by_index(i) { + Ok(e) => e, + Err(e) => { + println!("cargo::error=Error extracting files from paperclip.jar: {e}"); + return Err(()); + } + }; + let name = entry.name().to_owned(); + + if !name.starts_with(&prefix) { + continue; + } + + // Strip the prefix to get the relative structure + let Some(relative_path) = name.strip_prefix(&prefix) else { + continue; + }; + + // Skip the root directory entry itself + if relative_path.is_empty() { + continue; + } + + let out_path = target_dir.join(relative_path); + if !out_path.starts_with(&target_dir) { + // Something went wrong + println!( + "cargo::error=Invalid zip entry path in paperclip.jar: {}", + out_path.display() + ); + return Err(()); + } + + if entry.is_dir() { + if let Err(e) = std::fs::create_dir_all(&out_path) { + println!("cargo::error=Error creating directory: {e}"); + return Err(()); + } + } else { + if let Some(parent) = out_path.parent() { + if let Err(e) = std::fs::create_dir_all(parent) { + println!("cargo::error=Error creating directory: {e}"); + return Err(()); + } + } + let mut out_file = match File::create(&out_path) { + Ok(f) => f, + Err(e) => { + println!("cargo::error=Error creating file: {e}"); + return Err(()); + } + }; + if let Err(e) = std::io::copy(&mut entry, &mut out_file) { + println!("cargo::error=Error copying file: {e}"); + return Err(()); + } + } + } + + Ok(()) + } +} + +fn write_error(out_dir: &Path) { + let mut file = OpenOptions::new() + .create(true) + .append(true) + .open(out_dir.join("config.rs")) + .unwrap(); + write!(file, "\nconst _: () = compile_error!(\"Paperclip cannot be built without a valid ./paperclip.jar present.\");\n").unwrap(); +} + +fn ind(c: usize) -> String { + " ".repeat(c) +} diff --git a/native/rust-toolchain.toml b/native/rust-toolchain.toml new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/native/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly" diff --git a/native/src/aot.rs b/native/src/aot.rs new file mode 100644 index 0000000..ce42950 --- /dev/null +++ b/native/src/aot.rs @@ -0,0 +1,508 @@ +use crate::args::RecordMode; +use crate::errors::{Error, ErrorLoc}; +use crate::jni::{java_bin, jni_attach_thread}; +use crate::util::{copy_owned, create_directory, file_hash}; +use crate::{ONLY_USE_AOT_FAILED_EXIT_CODE, err, generic, l, null}; +use jni::objects::{JObject, JObjectArray, JString}; +use jni::{Env, JValue, JavaVM, ScopeToken, jni_sig, jni_str}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use std::ffi::OsString; +use std::path::{Path, PathBuf}; +use std::process::Command; +use std::sync::Arc; +use std::thread::JoinHandle; +use std::time::{Duration, SystemTime}; + +const AOT_CACHE_FILE: &str = "paper.aot"; +const AOT_CACHE_META: &str = "paper.aot.meta"; + +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +struct Fingerprint { + hash: [u8; 32], + timestamp: u128, +} + +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +pub struct AotMeta { + jvm_ident: String, + classpath: HashMap, + jvm_args: Vec, + app_args: Vec, + aot_cache_hash: [u8; 32], +} + +impl AotMeta { + pub fn build( + java_home: &str, + classpath: &[OsString], + jvm_args: &[String], + app_args: &[String], + aot_cache_file: &Path, + ) -> Result { + let java_home = Path::new(java_home); + let java = java_bin(java_home); + + let output = err! { + Command::new(&java).arg("-Xinternalversion").output() + => format!("Failed to execute 'java -Xinternalversion' command ({})", java.display()) + }?; + let jvm_ident = String::from_utf8_lossy(&output.stdout).trim().to_string(); + + let mut classpath_hashed = HashMap::::new(); + for path in classpath { + let file = Path::new(path); + if !file.exists() { + return generic!( + "Cannot compute AOT info: classpath entry does not exist: {}", + path.display() + ); + } + + let meta = err! { + std::fs::metadata(path) + => format!("Failed to read file metadata for {}", path.display()) + }?; + let modified_time = err! { + try { + meta + .modified().loc(l!())? + .duration_since(SystemTime::UNIX_EPOCH).loc(l!())? + .as_millis() + } + => format!("Failed to read file modification time for {}", path.display()) + }?; + let hash = l!(file_hash(file))?; + classpath_hashed.insert( + path.clone(), + Fingerprint { + hash, + timestamp: modified_time, + }, + ); + } + + let aot_cache_hash = l!(file_hash(aot_cache_file))?; + + Ok(AotMeta { + jvm_ident, + classpath: classpath_hashed, + jvm_args: jvm_args.iter().map(|s| s.to_string()).collect(), + app_args: app_args.iter().map(|s| s.to_string()).collect(), + aot_cache_hash, + }) + } + + pub fn aot_files(dir: &Path) -> (PathBuf, PathBuf) { + (AotMeta::aot_cache_file(dir), AotMeta::aot_meta_file(dir)) + } + pub fn aot_cache_file(dir: &Path) -> PathBuf { + dir.join(".paper").join("cache").join(AOT_CACHE_FILE) + } + + pub fn aot_meta_file(dir: &Path) -> PathBuf { + dir.join(".paper").join("cache").join(AOT_CACHE_META) + } + + pub fn read(aot_meta_file: &Path) -> Result { + let bytes = err! { + std::fs::read(aot_meta_file) + => format!("Failed to read AOT meta file: {}", aot_meta_file.display()) + }?; + let meta = err! { + postcard::from_bytes::(&bytes) + => format!("Failed to parse AOT meta file: {}", aot_meta_file.display()) + }?; + Ok(meta) + } + + pub fn write(&self, aot_meta_file: &Path) -> Result<(), Error> { + let bytes = Vec::new(); + let bytes = err! { + postcard::to_extend(&self, bytes) + => "Failed to serialize AOT meta file" + }?; + if let Some(parent) = aot_meta_file.parent() { + create_directory(parent)?; + } + let tmp_out = aot_meta_file.with_file_name("paper.aot.meta.tmp"); + err! { + std::fs::write(&tmp_out, &bytes) + => format!("Failed to write AOT meta file: {}", tmp_out.display()) + }?; + err! { + std::fs::rename(&tmp_out, aot_meta_file) + => format!("Failed to rename AOT meta file: {} -> {}", tmp_out.display(), aot_meta_file.display()) + }?; + + Ok(()) + } +} + +pub enum AotCacheAction { + Use { aot_cache_file: PathBuf }, + Record { aot_cache_file: PathBuf }, + None, +} +impl AotCacheAction { + pub fn use_cache(aot_cache_file: PathBuf) -> Self { + Self::Use { aot_cache_file } + } + + pub fn record(aot_cache_file: PathBuf) -> Self { + Self::Record { aot_cache_file } + } + pub fn none() -> Self { + Self::None + } +} + +pub fn check_aot_opt<'a>( + repo_dir: &Path, + mode: RecordMode, + java_home: &str, + classpath: &[OsString], + jvm_args: &[&str], + app_args: &[&str], +) -> Result { + if mode == RecordMode::NoAot { + return Ok(AotCacheAction::none()); + } + + let (aot_cache_file, aot_meta_file) = AotMeta::aot_files(&repo_dir); + + if !aot_cache_file.exists() || !aot_meta_file.exists() { + return match mode { + RecordMode::Normal | RecordMode::OnlyRecord | RecordMode::ForceRecord => { + Ok(AotCacheAction::record(aot_cache_file)) + } + RecordMode::Check => Err(Error::Exit(1)), + RecordMode::OnlyUse => { + eprintln!("No AOT cache found"); + Err(Error::Exit(ONLY_USE_AOT_FAILED_EXIT_CODE)) + } + RecordMode::NoRecord => Ok(AotCacheAction::none()), + RecordMode::NoAot => unreachable!(), + }; + } + + let jvm_args = copy_owned(jvm_args); + let app_args = copy_owned(app_args); + let current_meta = l!(AotMeta::build( + &java_home, + classpath, + &jvm_args, + &app_args, + &aot_cache_file + ))?; + let saved_meta = l!(AotMeta::read(&aot_meta_file))?; + + match mode { + RecordMode::Normal => { + if current_meta == saved_meta { + Ok(AotCacheAction::use_cache(aot_cache_file)) + } else { + Ok(AotCacheAction::record(aot_cache_file)) + } + } + RecordMode::Check => Err(Error::Exit(if current_meta == saved_meta { 0 } else { 1 })), + RecordMode::OnlyUse => { + if current_meta != saved_meta { + eprintln!("AOT cache is invalid"); + Err(Error::Exit(ONLY_USE_AOT_FAILED_EXIT_CODE)) + } else { + Ok(AotCacheAction::use_cache(aot_cache_file)) + } + } + RecordMode::NoRecord => { + if current_meta != saved_meta { + Ok(AotCacheAction::none()) + } else { + Ok(AotCacheAction::use_cache(aot_cache_file)) + } + } + RecordMode::OnlyRecord => { + if current_meta == saved_meta { + Err(Error::Exit(0)) + } else { + Ok(AotCacheAction::record(aot_cache_file)) + } + } + RecordMode::ForceRecord => Ok(AotCacheAction::record(aot_cache_file)), + RecordMode::NoAot => unreachable!(), + } +} + +pub fn setup_auto_recording( + jvm: Arc, + java_home: &str, + classpath: &[OsString], + jvm_args: &[String], + app_args: &[String], + mode: RecordMode, +) -> Option>> { + let cwd = match std::env::current_dir() { + Ok(p) => p, + Err(e) => { + eprintln!("Failed to find current directory: {}", e); + return None; + } + }; + let aot_meta_file = AotMeta::aot_meta_file(&cwd); + + if aot_meta_file.exists() { + return None; + } + + // Make copies to pass to the other thread + let jvm_cache_checker = jvm.clone(); + let java_home = java_home.to_string(); + let classpath = classpath.iter().cloned().collect::>(); + let jvm_args = copy_owned(jvm_args); + let app_args = copy_owned(app_args); + + let meta_thread_handle = std::thread::spawn(move || { + let watchdog_thread = jni_str!("org/spigotmc/WatchdogThread"); + let has_started_field = jni_str!("hasStarted"); + let has_started_sig = jni_sig!("Z"); + + loop { + std::thread::sleep(Duration::from_millis(100)); + // We don't stay attached, so if the server stops early, `jvm.destroy()` won't be deadlocked waiting + // for us to release the last non-daemon thread. + + let mut scope = ScopeToken::default(); + let mut guard = l!(jni_attach_thread( + &jvm_cache_checker, + &mut scope, + jni_str!("aot-cache-checker"), + ))?; + let env = guard.borrow_env_mut(); + + // While we are waiting, we need to make sure the `main` and `Server thread` threads are still running. + // If both threads are gone, that means the server has crashed. + if !check_threads_are_running(env).loc(l!())? { + return Ok(()); + } + + let has_started = env + .get_static_field(&watchdog_thread, &has_started_field, &has_started_sig) + .loc(l!())? + .z(); + match has_started { + Ok(true) => break, + Ok(false) => continue, + Err(jni::errors::Error::JavaException) => { + let _ = env.exception_clear(); // ignore it + continue; + } + Err(e) => return l!(Err(Error::from(e))), + }; + } + + // Server has completed starting + + let ended_recording = end_aot_recording(&jvm_cache_checker); + let ended_recording = match ended_recording { + Ok(r) => r, + Err(e) => { + return l!(Err(Error::wrap("Failed to end AOT cache recording", e))); + } + }; + + if ended_recording { + // Recording is done, we need to write the meta file + let aot_cache_file = AotMeta::aot_cache_file(&cwd); + if !aot_cache_file.exists() { + return generic!("No AOT cache file found after recording!"); + } + + let meta = match AotMeta::build( + &java_home, + &classpath, + &jvm_args, + &app_args, + &aot_cache_file, + ) { + Ok(m) => m, + Err(e) => { + return l!(Err(Error::wrap("Failed to generate AOT cache meta", e))); + } + }; + + if let Err(e) = meta.write(&aot_meta_file) { + return l!(Err(Error::wrap("Failed to write AOT cache meta", e))); + }; + } + + // For only record, stop the server + match mode { + RecordMode::OnlyRecord | RecordMode::ForceRecord => { + let _: Result<(), Error> = jvm_cache_checker.attach_current_thread(|env| { + let minecraft_server = env + .get_static_field( + jni_str!("net/minecraft/server/MinecraftServer"), + jni_str!("SERVER"), + jni_sig!("Lnet/minecraft/server/MinecraftServer;"), + ) + .loc(l!())? + .into_object() + .loc(l!())?; + if minecraft_server.is_null() { + return Ok(()); + } + env.call_method( + minecraft_server, + jni_str!("halt"), + jni_sig!("(Z)V"), + &[JValue::Bool(true)], + ) + .loc(l!())?; + Ok(()) + }); + } + _ => {} + } + + Ok(()) + }); + Some(meta_thread_handle) +} + +fn end_aot_recording(jvm: &JavaVM) -> Result { + let mut scope = ScopeToken::default(); + let mut guard = l!(jni_attach_thread( + jvm, + &mut scope, + jni_str!("aot-cache-checker") + ))?; + let env = guard.borrow_env_mut(); + + let aot_cache_bean_class = + l!(env.find_class(jni_str!("jdk/management/HotSpotAOTCacheMXBean")))?; + // Trigger record + let aot_cache_bean = env + .call_static_method( + jni_str!("java/lang/management/ManagementFactory"), + jni_str!("getPlatformMXBean"), + jni_sig!("(Ljava/lang/Class;)Ljava/lang/management/PlatformManagedObject;"), + &[JValue::Object(&aot_cache_bean_class)], + ) + .loc(l!())? + .into_object() + .loc(l!())?; + if aot_cache_bean.is_null() { + return null!("ManagementFactory", "getThreadMXBean()"); + } + + let ended = env + .call_method( + &aot_cache_bean, + jni_str!("endRecording"), + jni_sig!("()Z"), + &[], + ) + .loc(l!())? + .z() + .loc(l!())?; + Ok(ended) +} + +// Threading + +fn check_threads_are_running(env: &mut Env) -> Result { + let thread_mx_bean = env + .call_static_method( + jni_str!("java/lang/management/ManagementFactory"), + jni_str!("getThreadMXBean"), + jni_sig!("()Ljava/lang/management/ThreadMXBean;"), + &[], + ) + .loc(l!())? + .into_object() + .loc(l!())?; + if thread_mx_bean.is_null() { + return null!("ManagementFactory", "getThreadMXBean()"); + } + + let all_threads = env + .call_method( + &thread_mx_bean, + jni_str!("dumpAllThreads"), + jni_sig!("(ZZI)[Ljava/lang/management/ThreadInfo;"), + &[JValue::Bool(false), JValue::Bool(false), JValue::Int(0)], + ) + .loc(l!())? + .into_object() + .loc(l!())?; + let all_threads = l!(env.cast_local::(all_threads))?; + let len = l!(all_threads.len(env))?; + + if len == 0 { + return Ok(false); + } + + let terminated = env + .get_static_field( + jni_str!("java/lang/Thread$State"), + jni_str!("TERMINATED"), + jni_sig!("Ljava/lang/Thread$State;"), + ) + .loc(l!())? + .into_object() + .loc(l!())?; + + for i in 0..len { + let thread_info = l!(all_threads.get_element(env, i))?; + if thread_info.is_null() { + continue; + } + + let thread_name = l!(thread_name(env, &thread_info))?; + if thread_name != "Server thread" { + continue; + } + + let thread_state = env + .call_method( + thread_info, + jni_str!("getThreadState"), + jni_sig!("()Ljava/lang/Thread$State;"), + &[], + ) + .loc(l!())? + .into_object() + .loc(l!())?; + if thread_state.is_null() { + return null!("ThreadInfo", "getThreadState()"); + } + + let is_terminated = l!(env.is_same_object(&terminated, &thread_state))?; + if !is_terminated { + // At least one thread is still running + return Ok(true); + } + } + + Ok(false) +} + +fn thread_name(env: &mut Env, thread_info: &JObject) -> Result { + let thread_name = env + .call_method( + thread_info, + jni_str!("getThreadName"), + jni_sig!("()Ljava/lang/String;"), + &[], + ) + .loc(l!())? + .into_object() + .loc(l!())?; + if thread_name.is_null() { + return null!("ThreadInfo", "getThreadName()"); + } + let thread_name = l!(env.cast_local::(thread_name))?; + let thread_name = l!(thread_name.mutf8_chars(env))?; + let thread_name = thread_name.to_str(); + Ok(thread_name.to_string()) +} diff --git a/native/src/args.rs b/native/src/args.rs new file mode 100644 index 0000000..b7514f4 --- /dev/null +++ b/native/src/args.rs @@ -0,0 +1,215 @@ +use crate::ONLY_USE_AOT_FAILED_EXIT_CODE; +use crate::config::CONFIG; +use crate::errors::Error; +use indoc::indoc; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct ArgOptions<'a> { + pub jvm_args: Vec<&'a str>, + pub app_args: Vec<&'a str>, + pub record: RecordMode, +} + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +pub enum RecordMode { + #[default] + Normal, + Check, + OnlyUse, + NoRecord, + OnlyRecord, + ForceRecord, + NoAot, +} + +// Split args into (jvm_args, app_args) +// This function handles --version, --help, and other cases +pub fn split_args<'a>(args: &'a Vec) -> Result>, Error> { + // There are 3 categories of args, which this function tries to split organically: + // 1. paperclip args + // 2. jvm args + // 3. app args + // If a paperclip arg is found, it's handled and we immediately return. + // jvm args must strictly come before app args. We determine jvm args by looking for -D or -X. If it doesn't + // match, we assume it's an app arg. If we see another jvm arg after an app arg, we fail. + + let mut record_preference = RecordMode::default(); + let mut jvm_args = Vec::<&'a str>::new(); + let mut app_args = Vec::<&'a str>::new(); + + let mut partition_mark = false; + for arg in &args[1..] { + match arg.as_str() { + "-h" | "--help" => { + if jvm_args.is_empty() && app_args.is_empty() { + return print_help(args); + } + app_args.push(arg); + } + "-v" | "--version" => { + if jvm_args.is_empty() && app_args.is_empty() { + return print_version(); + } + app_args.push(arg); + } + "--version-json" => { + if jvm_args.is_empty() && app_args.is_empty() { + return print_vers_json(); + } + app_args.push(arg); + } + "--check-aot" | "--only-use-aot" | "--no-record" | "--only-record" + | "--force-record" | "--no-aot" => { + if jvm_args.is_empty() && app_args.is_empty() { + if record_preference != RecordMode::Normal { + eprintln!( + "--check-aot, --only-use-aot, --no-record, --only-record, \ + --force-record, and --no-aot may only be specified once" + ); + return Err(Error::Exit(1)); + } + record_preference = match arg.as_str() { + "--check-aot" => RecordMode::Check, + "--only-use-aot" => RecordMode::OnlyUse, + "--no-record" => RecordMode::NoRecord, + "--only-record" => RecordMode::OnlyRecord, + "--force-record" => RecordMode::ForceRecord, + "--no-aot" => RecordMode::NoAot, + _ => unreachable!(), + }; + } else { + app_args.push(arg); + } + } + "--" => { + if partition_mark { + app_args.push(arg); + } else { + partition_mark = true; + } + } + _ => { + if partition_mark { + app_args.push(arg); + } else if is_jvm_arg(arg) { + if !app_args.is_empty() { + eprintln!( + "JVM arguments must come before application arguments: `{}` comes after `{}`", + arg, + app_args.last().unwrap() + ); + return Err(Error::Exit(1)); + } + if arg.starts_with("-J") { + jvm_args.push(&arg[2..]); + } else { + jvm_args.push(arg); + } + } else { + app_args.push(arg); + } + } + } + } + + Ok(Some(ArgOptions { + record: record_preference, + jvm_args, + app_args, + })) +} + +fn is_jvm_arg(arg: &str) -> bool { + arg.starts_with("-D") || arg.starts_with("-X") || arg.starts_with("-J") +} + +fn print_help(args: &Vec) -> Result>, Error> { + println!( + indoc! {" + paperclip - Execute the Paper server with Project Leyden AOT + (Ahead-Of-Time) cache management. + + License: MIT + + Usage: {} [aot args] [jvm args] [app args] + + Description: + Wrapper to launch the Paper server. Arguments are divided into JVM + arguments (for the Java Virtual Machine) and Application arguments + (for the Paper server itself). + + JVM arguments must be specified BEFORE any Application arguments. + If a JVM argument is encountered after Application arguments have + started, the program will terminate with an error. + + JVM Discovery: + Paperclip relies on the present of a Java Runtime Environment (JRE) + to execute the server. Paperclip attemps to find the JRE based on + the standard JRE discovery mechanisms of the platform its on. The + 'JAVA_HOME' environment variable will always take highest priority + when selecting from multiple JREs. Otherwise, the location of the + 'java' executable on the 'PATH' will be used. + + AOT Arguments: + Arguments that control how paperclip handles AOT recording and cache + management. These must strictly come befre any JVM or app arguments, + and are mutually exclusive. Only one of the options in this group + are allowed at a time: + + --check-aot Checks if a valid AOT cache file exists. If it does, + paperclip will immediately exit with exit code 0. If + not, paperclip will exit with exit code 1. + --only-use-aot Require an existing vlid AOT cache to be present. If + no valid AOT cache file exists, paperclip will not + start, returning exit code {} instead. + --no-record Do not record AOT information. If a valid AOT cache + file already exists, it will be used. If no valid AOT + cache file exists, or the existing cache is out of + date, paperclip will ignore it and start without + recording a for a new AOT cache. + --only-record Only record a new AOT cache. Paperclip will shut down + the server immediately once the AOT cache has + successfuly been recorded. This option will not + re-record over a valid AOT cache. + --force-record Force paperclip to record a new AOT cache. This + option behaves the same as '--only-record', except it + will always record a new cache, even if a valid cache + already exists. + --no-aot Disable all AOT features completely. + + JVM Arguments: + Arguments passed to the JVM must match one of the following formats: + + -X Pass extended arguments to the JVM. + (e.g., -Xmx4G, -XX:+UseG1GC) + -D Pass system properties to the JVM. + (e.g., -Dcom.mojang.eula.agree=true) + -J Pass any other arbitrary argument to the JVM by + prefixing it with '-J'. (e.g., '-J--enable-preview' + will pass '--enable-preview' to the JVM) + + Application Arguments: + Any argument that does not start with -X, -D, or -J is automatically + assumed to be an Application argument and marks the beginning of the + [app args] section. + + Special Arguments: + -- Marks the end of JVM arguments. All arguments following + this separator will be treated strictly as Application + arguments, even if they start with -X, -D, or -J. + "}, + args[0], ONLY_USE_AOT_FAILED_EXIT_CODE, + ); + + Ok(None) +} + +fn print_version() -> Result>, Error> { + println!("{}", CONFIG.version); + Ok(None) +} + +fn print_vers_json() -> Result>, Error> { + println!("{}", CONFIG.version_json); + Ok(None) +} diff --git a/native/src/classpath.rs b/native/src/classpath.rs new file mode 100644 index 0000000..8345314 --- /dev/null +++ b/native/src/classpath.rs @@ -0,0 +1,396 @@ +use crate::config::CONFIG; +use crate::errors::{Error, ErrorLoc}; +use crate::libraries::LIBRARIES; +use crate::patches::PATCHES; +use crate::util::{bytes_matches_hash, create_file, extract_zip_entry, file_matches_hash}; +use crate::versions::VERSIONS; +use crate::{LibrariesAssets, VersionsAssets, err, generic, l}; +use qbsdiff::Bspatch; +use std::borrow::Cow; +use std::ffi::OsString; +use std::fmt::Debug; +use std::fs::File; +use std::io::Read; +use std::path::{Path, PathBuf}; +use zip::ZipArchive; +use zip::result::ZipError; + +pub fn repo_dir() -> PathBuf { + let repo_dir = std::env::var_os("PAPERCLIP_BUNDLER_REPO_DIR"); + let repo_dir = repo_dir.as_ref().map(Path::new).unwrap_or(Path::new("")); + repo_dir.to_owned() +} + +pub fn setup_classpath(dir: &Path) -> Result, Error> { + // This _should_ be guarded at compile time by the code `build.rs` generates, + // so it should be impossible for this assertion to fail. + assert!( + PATCHES.len() == 0 || CONFIG.download_context.is_some(), + "patches found without a corresponding original-url" + ); + + let base_file = if let Some(download_context) = CONFIG.download_context { + Some(err! { download_context.download(&dir) => + "Failed to download file" + }?) + } else { + None + }; + + let mut classpath = extract_and_apply_patches(&dir, base_file)?; + let mut res = Vec::with_capacity(classpath.versions.len() + classpath.libraries.len()); + res.append(&mut classpath.versions); + res.append(&mut classpath.libraries); + Ok(res) +} + +fn extract_and_apply_patches + Debug>( + dir: &Path, + original_jar: Option

, +) -> Result { + let mut jar = err! { + try { + original_jar + .as_ref() + .map(|j| ZipArchive::new(File::open(j)?) ) + .transpose().loc(l!())? + } => format!("Failed to open jar: {:?}", original_jar) + }?; + + let mut classpath = Classpath { + versions: vec![], + libraries: vec![], + }; + err! { + try { + extract_files( + Location::Versions, + dir, + &mut jar, + &VERSIONS, + &mut classpath, + )? + } => "Failed to extract versions" + }?; + err! { + try { + extract_files( + Location::Libraries, + dir, + &mut jar, + &LIBRARIES, + &mut classpath, + )? + } => "Failed to extract libraries" + }?; + + err! { apply_patches(dir, &mut jar, &mut classpath) => + "Failed to apply patches" + }?; + + Ok(classpath) +} + +fn extract_files( + location: Location, + dir: &Path, + original_jar: &mut Option>, + entries: &[FileEntry], + classpath: &mut Classpath, +) -> Result<(), Error> { + if entries.is_empty() { + return Ok(()); + } + + let jar_path = format!("META-INF/{}", location.name()); + let target_path = dir.join(location.name()); + for entry in entries { + err! { entry.extract(location, &target_path, original_jar, &jar_path, classpath) => + format!("Failed to extract files from {}/{}: {}/{}", jar_path, entry.path, target_path.display(), entry.path) + }?; + } + + Ok(()) +} + +fn apply_patches( + dir: &Path, + original_jar: &mut Option>, + classpath: &mut Classpath, +) -> Result<(), Error> { + if PATCHES.is_empty() { + return Ok(()); + } + if original_jar.is_none() { + return generic!("Patches provided without patch target"); + } + let original_jar = original_jar.as_mut().unwrap(); + + let mut announced = false; + for patch_entry in PATCHES { + err! { + try { + announced |= patch_entry.apply_patch(dir, original_jar, announced, classpath)? + } => format!("Failed to apply patch: {}/{}", patch_entry.location, patch_entry.patch_path) + }?; + } + + Ok(()) +} + +#[derive(Copy, Clone)] +enum Location { + Versions, + Libraries, +} + +impl Location { + fn from_name(name: &str) -> Self { + match name { + "versions" => Self::Versions, + "libraries" => Self::Libraries, + _ => panic!("Invalid location: {name}"), + } + } + + fn name(&self) -> &'static str { + match self { + Self::Versions => "versions", + Self::Libraries => "libraries", + } + } + + fn resolve(&self, file: &str) -> Option> { + match self { + Self::Versions => VersionsAssets::get(file).map(|f| f.data), + Self::Libraries => LibrariesAssets::get(file).map(|f| f.data), + } + } +} + +#[derive(Debug)] +pub struct FileEntry { + pub hash: [u8; 32], + pub id: &'static str, + pub path: &'static str, +} + +impl FileEntry { + fn extract( + &self, + location: Location, + target_base_path: &Path, + original_jar: &mut Option>, + jar_base_path: &str, + classpath: &mut Classpath, + ) -> Result<(), Error> { + for patch in PATCHES { + if patch.location == location.name() && patch.output_path == self.path { + // This file will be created from a patch + return Ok(()); + } + } + + let output_path = target_base_path.join(self.path); + if output_path.exists() && file_matches_hash(&output_path, &self.hash)? { + classpath.push(location, output_path.into_os_string()); + return Ok(()); + } + + match location.resolve(self.path) { + Some(d) => { + if let Some(parent) = output_path.parent() { + err! { + std::fs::create_dir_all(parent) + => format!("Failed to create directory: {}", parent.display()) + }?; + } + err! { + std::fs::write(&output_path, &d) + => format!("Failed to write file: {}", output_path.display()) + }? + } + None => { + // This file is not in our binary, but may be in the original jar + let original_jar = match original_jar { + Some(original_jar) => original_jar, + None => { + // no original jar was provided (we are not running in patcher mode) + // This is an invalid situation + return generic!( + "{} not found in our binary, and no original jar provided", + self.path + ); + } + }; + + let entry_path = format!("{}/{}", jar_base_path, self.path); + err! { + extract_zip_entry(original_jar, entry_path.as_str(), &output_path) + => format!("Failed to extract file from original jar: {entry_path}") + }?; + } + } + + if !file_matches_hash(&output_path, &self.hash).loc(l!())? { + return generic!("Hash check failed for extracted file {}", self.path); + } + + classpath.push(location, output_path.into_os_string()); + Ok(()) + } +} + +#[derive(Debug)] +pub struct PatchEntry { + pub location: &'static str, + pub original_hash: [u8; 32], + pub patch_hash: [u8; 32], + pub output_hash: [u8; 32], + pub original_path: &'static str, + pub patch_path: &'static str, + pub output_path: &'static str, +} + +impl PatchEntry { + fn apply_patch( + &self, + repo_dir: &Path, + original_jar: &mut ZipArchive, + announced: bool, + classpath: &mut Classpath, + ) -> Result { + let location = Location::from_name(self.location); + let jar_path = format!("META-INF/{}/{}", self.location, self.original_path); + let output_file = repo_dir.join(&self.location).join(self.output_path); + + // Short-cut if the patch is already applied + if output_file.exists() && file_matches_hash(&output_file, &self.output_hash).loc(l!())? { + classpath.push(location, output_file.into_os_string()); + return Ok(false); + } + + if !announced { + println!("Applying patches"); + } + + let mut jar_entry = match original_jar.by_name(jar_path.as_str()) { + Ok(entry) => entry, + Err(ZipError::FileNotFound) => { + return generic!("Input file not found in original jar {jar_path}"); + } + Err(e) => return l!(Err(Error::from(e))), + }; + + let mut input_file_data = Vec::::new(); + l!(jar_entry.read_to_end(&mut input_file_data))?; + + if !bytes_matches_hash(&input_file_data, &self.original_hash) { + return generic!("Hash check of input file failed for {jar_path}"); + } + + // Get and verity patch data is correct + let patch_data = location.resolve(self.patch_path); + if patch_data.is_none() { + return generic!("Patch file not found: {}", self.patch_path); + } + let patch_data = patch_data.unwrap(); + + if !bytes_matches_hash(&patch_data, &self.patch_hash) { + return generic!("Hash check of patch file failed for {}", self.patch_path); + } + + err! { + try { + if let Some(parent) = output_file.parent() { + err! { + std::fs::create_dir_all(parent) + => format!("Failed to create directory: {}", parent.display()) + }?; + } + let mut target_file = create_file(&output_file).loc(l!())?; + + let patcher = Bspatch::new(&patch_data).loc(l!())?; + patcher.apply(&input_file_data, &mut target_file).loc(l!())?; + } => "Error executing bsdiff patch" + }?; + + if !file_matches_hash(&output_file, &self.output_hash).loc(l!())? { + return generic!("Patch not applied correctly for {}", self.output_path); + } + + classpath.push(location, output_file.into_os_string()); + Ok(true) + } +} + +#[derive(Debug)] +pub struct Config { + pub download_context: Option, + pub main_class: &'static str, + pub version: &'static str, + pub version_json: &'static str, +} + +#[derive(Debug)] +pub struct DownloadContext { + pub hash: [u8; 32], + pub url: &'static str, + pub file_name: &'static str, +} + +impl DownloadContext { + pub fn download(&self, repo_dir: &Path) -> Result { + let target_file = err! { self.create_output_target(&repo_dir) => + format!("Failed to create directory: {}", repo_dir.display()) + }?; + if target_file.exists() && file_matches_hash(&target_file, &self.hash)? { + return Ok(target_file); + } + + println!("Downloading {}", self.file_name); + + let mut output_file = create_file(&target_file).loc(l!())?; + err! { + try { + let mut downloader = nyquest::blocking::get(self.url)?.into_read(); + std::io::copy(&mut downloader, &mut output_file).map_err(Into::into)? + } => format!("Failed to download: {}", self.file_name) + }?; + + if !file_matches_hash(&target_file, &self.hash).loc(l!())? { + return generic!( + "Hash check failed for downloaded file {}", + target_file.display() + ); + } + + Ok(target_file) + } + + fn create_output_target(&self, repo_dir: &Path) -> Result { + let target_path = repo_dir.join(".paper").join("cache").join(self.file_name); + if let Some(parent) = target_path.parent() { + err! { std::fs::create_dir_all(parent) => + format!("Failed to create output directory {}", parent.display()) + }?; + } + Ok(target_path) + } +} + +#[derive(Debug)] +struct Classpath { + versions: Vec, + libraries: Vec, +} + +impl Classpath { + fn push(&mut self, location: Location, file_name: OsString) { + match location { + Location::Versions => &mut self.versions, + Location::Libraries => &mut self.libraries, + } + .push(file_name); + } +} diff --git a/native/src/errors.rs b/native/src/errors.rs new file mode 100644 index 0000000..dd3a769 --- /dev/null +++ b/native/src/errors.rs @@ -0,0 +1,129 @@ +use thiserror::Error; + +#[derive(Debug, Error)] +pub enum Error { + #[error("JNI error: {0:?}")] + Jni(#[from] jni::errors::Error), + #[error("JVM error: {0:?}")] + JVM(#[from] jni::JvmError), + #[error("JVM start error: {0:?}")] + StartJvm(#[from] jni::errors::StartJvmError), + #[error("Failed to find Java installation: {0:?}")] + JavaLoc(#[from] java_locator::errors::JavaLocatorError), + #[error("IO error: {0:?}")] + Io(#[from] std::io::Error), + #[error("Time error: {0:?}")] + Time(#[from] std::time::SystemTimeError), + #[error("Download error: {0:?}")] + Net(#[from] nyquest::Error), + #[error("Zip error: {0:?}")] + Zip(#[from] zip::result::ZipError), + #[error("Parse error: {0:?}")] + Int(#[from] std::num::ParseIntError), + #[error("Serialization error: {0:?}")] + Postcard(#[from] postcard::Error), + #[error("{msg}\nCaused by: {cause}")] + Wrapped { + msg: String, + #[source] + cause: Box, + }, + #[error("{0}")] + Generic(String), + #[error("{file}:{line}: {error}")] + Loc { + file: &'static str, + line: u32, + #[source] + error: Box, + }, + #[error("Exiting with code {0}")] + Exit(i32), +} + +pub trait ErrorLoc { + type Output; + + fn loc(self, loc: Loc) -> Self::Output; +} + +impl> ErrorLoc for Result { + type Output = Result; + + fn loc(self, loc: Loc) -> Self::Output { + match self { + Ok(r) => Ok(r), + Err(e) => Err(Error::loc(loc.file, loc.line, e)), + } + } +} + +pub struct Loc { + pub file: &'static str, + pub line: u32, +} + +#[macro_export] +macro_rules! err { + ($res:expr => $msg:expr) => { + match $crate::l!($res) { + Ok(r) => Ok(r), + Err(e) => Err($crate::errors::Error::wrap($msg, e)), + } + }; +} + +#[macro_export] +macro_rules! l { + () => { + $crate::errors::Loc { + file: file!(), + line: line!(), + } + }; + ($res:expr) => { + match $res.map_err($crate::errors::Error::from) { + Ok(r) => Ok(r), + Err(Error::Loc { + file: _, + line: _, + error, + }) => Err(Error::loc(file!(), line!(), error)), // Reset loc info + Err(e) => Err(Error::loc(file!(), line!(), e)), + } + }; +} + +#[macro_export] +macro_rules! generic { + ($($arg:tt)*) => { + $crate::l!(Err($crate::errors::Error::generic(format!($($arg)*)))) + }; +} + +impl Error { + pub fn wrap(msg: impl Into, cause: impl Into) -> Self { + Error::Wrapped { + msg: msg.into(), + cause: Box::from(cause.into()), + } + } + + pub fn generic(s: impl Into) -> Self { + Error::Generic(s.into()) + } + + pub fn loc(file: &'static str, line: u32, cause: impl Into) -> Self { + Error::Loc { + file, + line, + error: Box::from(cause.into()), + } + } +} + +impl From> for Error { + fn from(value: Box) -> Self { + *value + } +} diff --git a/native/src/jni.rs b/native/src/jni.rs new file mode 100644 index 0000000..4f3dcd2 --- /dev/null +++ b/native/src/jni.rs @@ -0,0 +1,140 @@ +use crate::errors::Error; +use crate::{err, generic, l}; +use jni::objects::{JPrimitiveArray, TypeArray}; +use jni::strings::JNIStr; +use jni::{AttachConfig, AttachGuard, Env, JavaVM, ScopeToken}; +use std::path::{Path, PathBuf}; +use std::process::Command; + +pub fn jni_attach_thread<'scope>( + jvm: &JavaVM, + scope: &'scope mut ScopeToken, + thread_name: &JNIStr, +) -> jni::errors::Result> { + unsafe { + jvm.attach_current_thread_guard( + || { + AttachConfig::default() + .scoped(true) + .thread_name(thread_name) + }, + scope, + ) + } +} + +pub fn as_primitive_array<'a: 'b, 'b, T: TypeArray>( + env: &mut Env<'a>, + array: &[T], +) -> Result, Error> { + let java_array = l!(JPrimitiveArray::::new(env, array.len()))?; + l!(java_array.set_region(env, 0, &array))?; + Ok(java_array) +} + +#[macro_export] +macro_rules! null { + ($class:literal, $method:literal) => { + $crate::generic!("{}::{} returned 'null'", $class, $method) + }; +} + +pub fn java_bin(base: &Path) -> PathBuf { + let mut path = base.to_path_buf(); + path.push("bin"); + path.push("java"); + #[cfg(windows)] + { + path.set_extension("exe"); + } + path +} + +pub fn check_java_version(java_home: &str) -> Result<(), Error> { + let java_home = Path::new(java_home); + let java = java_bin(java_home); + + let version_text = err! { + Command::new(&java).arg("-version").output() + => format!("Failed to execute 'java -version' command ({})", java.display()) + }? + .stderr; + let version_text = String::from_utf8_lossy(&version_text); + let version_line = match version_text.lines().next() { + Some(l) => l, + None => { + return generic!("Failed to parse 'java -version' (no output)"); + } + }; + + let start = match version_line.chars().position(|c| c == '"') { + Some(i) => i + 1, // skip the quote + None => { + return generic!("Failed to parse 'java -version' (no version number found)"); + } + }; + + let version_line = &version_line[start..]; + let version = match version_line.chars().position(|c| c == '"') { + Some(i) => &version_line[..i], + None => return generic!("Failed to parse 'java -version' (no version number found)"), + }; + + let version_parts = version.split('.').take(3).collect::>(); + let major_version = l!(version_part(&version_parts, 0))?; + let minor_version = l!(version_part(&version_parts, 1))?; + let patch_version = l!(version_part(&version_parts, 2))?; + + let version_err = "Unsupported Java version: Java 25.0.4 or higher is required, found: "; + + // We require >25.0.4 + if major_version.is_none() || major_version.unwrap() < 25 { + let mut err_msg = format!( + "{}{}", + version_err, + major_version + .map(|v| v.to_string()) + .unwrap_or_else(|| "unknown".to_string()) + ); + if let (Some(minor_version), Some(patch_version)) = (minor_version, patch_version) { + err_msg.push_str(&format!(".{}.{}", minor_version, patch_version)); + } + eprintln!("{err_msg}"); + return Err(Error::Exit(1)); + } + let major_version = major_version.unwrap(); + if minor_version.is_none() || patch_version.is_none() { + // We can't verify it's 25.0.4, but we tried + return Ok(()); + } + let minor_version = minor_version.unwrap(); + let patch_version = patch_version.unwrap(); + if minor_version > 0 || patch_version >= 4 { + return Ok(()); + } + + eprintln!( + "{}{}.{}.{}", + version_err, major_version, minor_version, patch_version + ); + Err(Error::Exit(1)) +} + +fn version_part(parts: &[&str], index: usize) -> Result, Error> { + if parts.len() <= index { + return Ok(None); + } + let num = match parts[index].parse::() { + Ok(v) => v, + Err(e) => { + return l!(Err(Error::wrap( + format!( + "Failed to parse 'java -version' (invalid version number): {}", + parts[index] + ), + e, + ))); + } + }; + Ok(Some(num)) +} diff --git a/native/src/main.rs b/native/src/main.rs new file mode 100644 index 0000000..47dde41 --- /dev/null +++ b/native/src/main.rs @@ -0,0 +1,302 @@ +#![feature(try_blocks)] + +pub mod aot; +pub mod args; +pub mod classpath; +pub mod errors; +pub mod jni; +pub mod util; + +use crate::aot::{AotCacheAction, AotMeta, check_aot_opt, setup_auto_recording}; +use crate::args::split_args; +use crate::classpath::{repo_dir, setup_classpath}; +use crate::config::CONFIG; +use crate::errors::Error; +use crate::jni::check_java_version; +use crate::util::{JoinHandleRes, classpath_sep, copy_owned}; +use ::jni::objects::{JObjectArray, JString}; +use ::jni::strings::JNIString; +use ::jni::{AttachConfig, Env, InitArgsBuilder, JNIVersion, JavaVM, jni_sig, jni_str}; +use rust_embed::RustEmbed; +use std::ffi::OsString; +use std::sync::Arc; +use std::thread::JoinHandle; + +include!(concat!(env!("OUT_DIR"), "/patches.rs")); +include!(concat!(env!("OUT_DIR"), "/versions.rs")); +include!(concat!(env!("OUT_DIR"), "/libraries.rs")); +include!(concat!(env!("OUT_DIR"), "/config.rs")); + +#[derive(RustEmbed)] +#[folder = "$OUT_DIR/versions"] +pub struct VersionsAssets; +#[derive(RustEmbed)] +#[folder = "$OUT_DIR/libraries"] +pub struct LibrariesAssets; + +pub const ONLY_USE_AOT_FAILED_EXIT_CODE: i32 = 33; + +fn main() { + nyquest_preset::register(); + std::process::exit(run()); +} + +fn run() -> i32 { + let args: Vec = std::env::args().collect(); + let arg_opts = match split_args(&args) { + Ok(Some(arg_opts)) => arg_opts, + Ok(None) => return 0, + Err(Error::Exit(code)) => return code, + Err(e) => { + eprintln!("{e}"); + return 1; + } + }; + + let jvm_args = arg_opts.jvm_args; + let app_args = arg_opts.app_args; + + let repo_dir = repo_dir(); + + let java_home = match java_locator::locate_java_home() { + Ok(j) => j, + Err(e) => { + eprintln!("Failed to locate Java home: {}", e); + return 1; + } + }; + + match check_java_version(&java_home) { + Ok(()) => {} + Err(Error::Exit(code)) => return code, + Err(e) => { + eprintln!("{}", e); + return 1; + } + }; + + let classpath = match setup_classpath(&repo_dir) { + Ok(classpath) => classpath, + Err(e) => { + eprintln!("{}", Error::wrap("Failed to setup classpath", e)); + return 1; + } + }; + + // We either need to start the JVM with -XX:AOTCacheOutput= (record) or -XX:AOTCache= (use) + let aot_action = match check_aot_opt( + &repo_dir, + arg_opts.record, + &java_home, + &classpath, + &jvm_args, + &app_args, + ) { + Ok(a) => a, + Err(Error::Exit(code)) => return code, + Err(e) => { + eprintln!("{}", Error::wrap("Failed to check AOT cache", e)); + return 1; + } + }; + + if let AotCacheAction::Record { .. } = aot_action { + // If we're recording, we need to delete any existing AOT cache files + let meta_file = AotMeta::aot_meta_file(&repo_dir); + if meta_file.exists() { + std::fs::remove_file(&meta_file).unwrap(); + } + let cache_file = AotMeta::aot_cache_file(&repo_dir); + if cache_file.exists() { + std::fs::remove_file(&cache_file).unwrap(); + } + } + + let jvm_args = copy_owned(&jvm_args); + let app_args = copy_owned(&app_args); + let jvm_thread = std::thread::spawn(move || { + let jvm = match create_jvm(&jvm_args, &classpath, &aot_action) { + Ok(jvm) => jvm, + Err(Error::Exit(code)) => return code, + Err(e) => { + eprintln!("{}", Error::wrap("Failed to create JVM", e)); + return 1; + } + }; + let jvm = Arc::new(jvm); + + let server_thread = start_jvm_thread(jvm.clone(), &app_args); + let server_thread_res = server_thread.join_res(); + + let meta_thread = setup_auto_recording( + jvm.clone(), + &java_home, + &classpath, + &jvm_args, + &app_args, + arg_opts.record, + ); + let meta_thread_res = match meta_thread { + Some(h) => Some(h.join_res()), + None => None, + }; + + unsafe { + if let Err(e) = jvm.destroy() { + eprintln!("Error during JVM shutdown: {:?}", e); + } + } + drop(jvm); + + #[cfg(target_os = "macos")] + { + use core_foundation::runloop::{CFRunLoopGetMain, CFRunLoopStop}; + unsafe { + CFRunLoopStop(CFRunLoopGetMain()); + } + } + + if let Some(Err(e)) = meta_thread_res { + eprintln!("Error during AOT recording: {e}"); + } + + match server_thread_res { + Ok(_) => 0, + Err(e) => { + eprintln!("Error during server thread: {e}"); + 1 + } + } + }); + + // Run the native macOS event loop on the main thread + // This keeps the main thread unblocked and processes AWT window events + #[cfg(target_os = "macos")] + { + use core_foundation::runloop::CFRunLoopRun; + unsafe { + // This will block and process UI events until canceled + CFRunLoopRun(); + } + } + + jvm_thread.join().unwrap_or_else(|_| 1) +} + +fn start_jvm_thread(jvm: Arc, app_args: &[String]) -> JoinHandle> { + let app_args = app_args + .iter() + .map(|s| s.to_string()) + .collect::>(); + let handle = std::thread::spawn(move || { + let res = jvm.attach_current_thread_with_config( + || { + AttachConfig::default() + .scoped(true) + .thread_name(jni_str!("main")) + }, + None, + |env| exec_jvm(env, &app_args), + ); + + res + }); + + handle +} + +fn create_jvm( + jvm_args: &[String], + classpath: &[OsString], + aot_action: &AotCacheAction, +) -> Result { + // Exit if user has set `PAPERCLIP_PATCHONLY` env variable to `true` + if let Some(prop) = std::env::var_os("PAPERCLIP_PATCHONLY") { + if prop.eq_ignore_ascii_case("true") { + return Err(Error::Exit(0)); + } + } + + init_jvm(jvm_args, &classpath, &aot_action) +} + +fn init_jvm( + jvm_args: &[String], + classpath: &[OsString], + aot_action: &AotCacheAction, +) -> Result { + let mut init_args = InitArgsBuilder::new().version(JNIVersion::V21); + init_args = init_args + .option("--enable-native-access=ALL-UNNAMED") + .option("--sun-misc-unsafe-memory-access=allow"); + + match aot_action { + AotCacheAction::Use { aot_cache_file } | AotCacheAction::Record { aot_cache_file } => { + match aot_cache_file.to_str() { + Some(p) => match aot_action { + AotCacheAction::Use { .. } => { + init_args = init_args.option(format!("-XX:AOTCache={p}")) + } + AotCacheAction::Record { .. } => { + init_args = init_args.option(format!("-XX:AOTCacheOutput={p}",)) + } + AotCacheAction::None => unreachable!(), + }, + None => { + return generic!( + "Failed to convert AOT cache file path to string: {}", + aot_cache_file.display() + ); + } + }; + } + AotCacheAction::None => {} + } + + let classpath_text = classpath.join(&classpath_sep()); + let classpath_text = match classpath_text.into_string() { + Ok(t) => t, + Err(e) => { + return generic!("Failed to convert classpath to string: {}", e.display()); + } + }; + init_args = init_args.option(format!("-Djava.class.path={classpath_text}")); + + for arg in jvm_args { + init_args = init_args.option(arg); + } + + let init_args = err! { + init_args.build() + => "Failed to initialize JVM" + }?; + err! { + JavaVM::new(init_args) + => "Failed to start JVM" + } +} + +fn exec_jvm(env: &mut Env, args: &[String]) -> Result<(), Error> { + let args_array = l!(JObjectArray::::new( + env, + args.len(), + JString::null() + ))?; + for i in 0..args.len() { + let arg = l!(JString::new(env, args[i].clone()))?; + l!(args_array.set_element(env, i, arg))?; + } + + let class_name = JNIString::new(CONFIG.main_class.replace(".", "/")); + let psvm_name = jni_str!("main"); + let psvm_desc = jni_sig!("([Ljava/lang/String;)V"); + l!(env.call_static_method(class_name, psvm_name, psvm_desc, &[(&args_array).into()]))?; + + if env.exception_check() { + env.exception_describe(); // Prints the stack trace to stderr + env.exception_clear(); + // Don't return any error here, the error message has already been printed + } + + Ok(()) +} diff --git a/native/src/util.rs b/native/src/util.rs new file mode 100644 index 0000000..93cd522 --- /dev/null +++ b/native/src/util.rs @@ -0,0 +1,126 @@ +use crate::errors::{Error, ErrorLoc}; +use crate::{err, generic, l}; +use digest_io::IoWrapper; +use sha2::{Digest, Sha256}; +use std::ffi::OsString; +use std::fs::File; +use std::path::Path; +use std::thread::JoinHandle; +use zip::ZipArchive; + +pub fn copy_owned(slice: &[S]) -> Vec { + let mut res = Vec::with_capacity(slice.len()); + for item in slice { + res.push(item.to_string()); + } + res +} + +pub fn file_hash(path: &Path) -> Result<[u8; 32], Error> { + err! { + try { + let mut file = open_file(path).loc(l!())?; + let mut digest = IoWrapper(Sha256::new()); + + std::io::copy(&mut file, &mut digest).loc(l!())?; + let mut hash: [u8; 32] = [0u8; 32]; + hash.copy_from_slice(&digest.0.finalize().0); + Ok(hash) + } => format!("Failed to hash file {}", path.display()) + }? +} + +pub fn file_matches_hash(path: &Path, expected_hash: &[u8]) -> Result { + err! { + try { + let mut file = open_file(path).loc(l!())?; + let mut digest = IoWrapper(Sha256::new()); + + std::io::copy(&mut file, &mut digest).loc(l!())?; + let actual_hash = digest.0.finalize(); + + Ok(expected_hash == actual_hash.0) + } => "Failed to hash file" + }? +} + +pub fn bytes_matches_hash(data: &[u8], expected_hash: &[u8]) -> bool { + let mut digest = Sha256::new(); + digest.update(data); + + let actual_hash = digest.finalize(); + expected_hash == actual_hash.0 +} + +pub fn extract_zip_entry( + archive: &mut ZipArchive, + internal_path: &str, + destination: &Path, +) -> Result<(), Error> { + let mut zip_file = err! { + archive.by_name(internal_path) + => format!("Failed to find entry in zip: {}", internal_path) + }?; + + if zip_file.is_dir() { + create_directory(destination).loc(l!())?; + return Ok(()); + } + + if let Some(parent) = destination.parent() { + if !parent.exists() { + create_directory(parent).loc(l!())?; + } + } + + let mut out_file = create_file(destination).loc(l!())?; + err! { + std::io::copy(&mut zip_file, &mut out_file) + => format!("Failed to extract {} from zip to {}", internal_path, destination.display()) + }?; + + Ok(()) +} + +pub trait JoinHandleRes { + type Output; + fn join_res(self) -> Self::Output; +} + +impl JoinHandleRes for JoinHandle> { + type Output = Result; + + fn join_res(self) -> Self::Output { + self.join().unwrap_or_else(|_| generic!("Thread error")) + } +} + +pub fn create_directory(path: &Path) -> Result<(), Error> { + err! { + std::fs::create_dir_all(path) + => format!("Failed to create directory: {}", path.display()) + } +} + +pub fn create_file(path: &Path) -> Result { + err! { + File::create(path) + => format!("Failed to create file: {}", path.display()) + } +} + +pub fn open_file(path: &Path) -> Result { + err! { + File::open(path) + => format!("Failed to open file: {}", path.display()) + } +} + +#[cfg(not(target_os = "windows"))] +pub fn classpath_sep() -> OsString { + ":".into() +} +#[cfg(target_os = "windows")] +pub fn classpath_sep() -> OsString { + ";".into() +} From fe92bd702e387d80f1578508f8b684a3c6f792c2 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Mon, 27 Jul 2026 22:40:19 -0500 Subject: [PATCH 02/14] Do not bundle paperclip jar in binary --- native/Cargo.lock | 217 +++++-------------- native/Cargo.toml | 6 +- native/build.rs | 456 ++-------------------------------------- native/src/args.rs | 106 ++++------ native/src/classpath.rs | 306 +++++++++++++++++++-------- native/src/errors.rs | 4 + native/src/main.rs | 62 +++--- native/src/util.rs | 82 +++++++- 8 files changed, 439 insertions(+), 800 deletions(-) diff --git a/native/Cargo.lock b/native/Cargo.lock index ae0c44e..e3a68fb 100644 --- a/native/Cargo.lock +++ b/native/Cargo.lock @@ -19,6 +19,15 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "arc-swap" version = "1.9.2" @@ -123,6 +132,19 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chrono" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link 0.2.1", +] + [[package]] name = "cipher" version = "0.5.2" @@ -323,27 +345,6 @@ dependencies = [ "digest", ] -[[package]] -name = "dirs" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys", -] - [[package]] name = "dispatch2" version = "0.3.1" @@ -406,17 +407,6 @@ dependencies = [ "slab", ] -[[package]] -name = "getrandom" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "getrandom" version = "0.4.3" @@ -466,10 +456,10 @@ dependencies = [ ] [[package]] -name = "hex-literal" -version = "1.1.0" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" @@ -489,6 +479,30 @@ dependencies = [ "typenum", ] +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "indexmap" version = "2.14.0" @@ -517,12 +531,6 @@ dependencies = [ "hybrid-array", ] -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - [[package]] name = "java-locator" version = "0.1.9" @@ -589,7 +597,7 @@ version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.4.3", + "getrandom", "libc", ] @@ -626,15 +634,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "libredox" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" -dependencies = [ - "libc", -] - [[package]] name = "libz-sys" version = "1.1.29" @@ -677,22 +676,6 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.8.9" @@ -867,19 +850,14 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "paperclip" version = "0.1.0" dependencies = [ + "chrono", "core-foundation", "digest-io", - "hex-literal", + "hex", "indoc", "java-locator", "jni", @@ -889,9 +867,7 @@ dependencies = [ "pkg-config", "postcard", "qbsdiff", - "rust-embed", "serde", - "serde_json", "sha2", "thiserror", "zip", @@ -998,53 +974,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_users" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" -dependencies = [ - "getrandom 0.2.17", - "libredox", - "thiserror", -] - -[[package]] -name = "rust-embed" -version = "8.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e7760e252aaba7b09f4be00e36476cf585bdb68a53552ac954cdf504ab4bc9" -dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", -] - -[[package]] -name = "rust-embed-impl" -version = "8.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcfc4d6f53af43755f7a723e4b6b8794fcce052a178dd8c6c1dadc5f5343097" -dependencies = [ - "mime_guess", - "proc-macro2", - "quote", - "rust-embed-utils", - "shellexpand", - "syn 2.0.119", - "walkdir", -] - -[[package]] -name = "rust-embed-utils" -version = "8.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ffa149f6aa81b58a5b3011d01a857c4ed12c7a732d2c51947a4c7c692185f0" -dependencies = [ - "sha2", - "walkdir", -] - [[package]] name = "rustc_version" version = "0.4.1" @@ -1129,19 +1058,6 @@ dependencies = [ "syn 3.0.2", ] -[[package]] -name = "serde_json" -version = "1.0.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - [[package]] name = "sha1" version = "0.11.0" @@ -1164,15 +1080,6 @@ dependencies = [ "digest", ] -[[package]] -name = "shellexpand" -version = "3.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32824fab5e16e6c4d86dc1ba84489390419a39f97699852b66480bb87d297ed8" -dependencies = [ - "dirs", -] - [[package]] name = "shlex" version = "2.0.1" @@ -1315,12 +1222,6 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" -[[package]] -name = "unicase" -version = "2.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" - [[package]] name = "unicode-ident" version = "1.0.24" @@ -1343,12 +1244,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - [[package]] name = "wasm-bindgen" version = "0.2.126" @@ -1547,7 +1442,7 @@ dependencies = [ "crc32fast", "deflate64", "flate2", - "getrandom 0.4.3", + "getrandom", "hmac", "indexmap", "lzma-rust2", @@ -1568,12 +1463,6 @@ version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" - [[package]] name = "zopfli" version = "0.8.3" diff --git a/native/Cargo.toml b/native/Cargo.toml index d4b9a98..7c86c78 100644 --- a/native/Cargo.toml +++ b/native/Cargo.toml @@ -21,12 +21,11 @@ sha2 = "0.11.0" digest-io = "0.1.0" thiserror = "2.0.19" zip = "8.6.0" +hex = "0.4.3" serde = { version = "1.0.229", features = ["derive"] } postcard = "1.1.3" -hex-literal = "1.1.0" -rust-embed = { version = "8.12.0", features = ["interpolate-folder-path"] } indoc = "2.0.7" [target.'cfg(target_os = "linux")'.dependencies] @@ -36,8 +35,7 @@ nyquest-backend-curl = { version = "0.4.1", features = ["blocking-stream", "ssl" core-foundation = "0.10.1" [build-dependencies] -zip = "8.6.0" -serde_json = "1.0.151" +chrono = { version = "0.4.45", features = ["now"] } [target.'cfg(target_os = "linux")'.build-dependencies] pkg-config = "0.3.33" diff --git a/native/build.rs b/native/build.rs index e9a4617..092f93c 100644 --- a/native/build.rs +++ b/native/build.rs @@ -1,88 +1,27 @@ -use std::fs::{File, OpenOptions}; -use std::io::{Read, Write}; use std::path::Path; -use zip::ZipArchive; -use zip::result::ZipError; - -// Paperclip needs the following files from the Paperclip jar to execute (all in META-INF/): -// 1. patches.list -// 2. versions.list -// 3. libraries.list -// 4. download-context -// 5. main-class -// 6. versions/ (directory) -// 7. libraries/ (directory) -// This script looks for a `./paperclip.jar` file in the project and extracts those pieces from it if present. -// The result is an equivalent Paperclip executable, but as a native binary rather than a jar file. -// If there is no `./paperclip.jar` file available, this will generate empty stubs so the code will still resolve -// properly in an editor, but an error will also be inserted to prevent the project from successfully compiling +use std::process::Command; +use chrono::Utc; fn main() { - println!("cargo::rerun-if-changed=$CARGO_MANIFEST_DIR/paperclip.jar"); - configure_host(); - let out_dir = std::env::var_os("OUT_DIR").unwrap(); - let out_dir = Path::new(&out_dir); + let out_dir = std::env::var("OUT_DIR").unwrap(); + let path = Path::new(&out_dir).join("config.rs"); - let manifest_dir = std::env::var_os("CARGO_MANIFEST_DIR").unwrap(); - let manifest_dir = Path::new(&manifest_dir); - let jar = manifest_dir.join("paperclip.jar"); - if !jar.is_file() { - println!("cargo::warning=paperclip.jar not found"); - patches::write_empty_patches(&out_dir); - files::write_empty_entries(&out_dir, "versions"); - files::write_empty_entries(&out_dir, "libraries"); - config::write_empty_config(&out_dir); - extract::create_dir(&out_dir, "versions"); - extract::create_dir(&out_dir, "libraries"); - write_error(&out_dir); - return; - } + let base_version = std::env::var("CARGO_PKG_VERSION").unwrap(); - let jar = match File::open(jar) { - Ok(file) => file, - Err(e) => { - println!("cargo::error=Error opening paperclip.jar: {e}"); - return; - } - }; - let mut jar = match ZipArchive::new(jar) { - Ok(j) => j, - Err(e) => { - println!("cargo::error=Error reading paperclip.jar: {e}"); - return; - } - }; - - // Write config data - if patches::write_patch_file(&out_dir, &mut jar).is_err() { - return; - } - if files::write_entries_file(&out_dir, &mut jar, "versions").is_err() { - return; - } - if files::write_entries_file(&out_dir, &mut jar, "libraries").is_err() { - return; - } - if config::write_config_file(&out_dir, &mut jar).is_err() { - return; - } + let rev = Command::new("git") + .args(["rev-parse", "--short=8", "HEAD"]) + .output() + .unwrap() + .stdout; + let rev = String::from_utf8(rev).unwrap(); + let rev = rev.trim(); - // Extract files - if extract::extract_to_dir(&mut jar, "versions").is_err() { - return; - } - if extract::extract_to_dir(&mut jar, "libraries").is_err() { - return; - } + let timestamp = Utc::now().format("%+").to_string(); - // If we built from an invalid paperclip.jar, prevent compilation - let patches_text = std::fs::read_to_string(out_dir.join("patches.rs")).unwrap(); - let config_text = std::fs::read_to_string(out_dir.join("config.rs")).unwrap(); - if patches_text.contains("[crate::classpath::PatchEntry; 0]") && config_text.contains("None") { - write_error(&out_dir); - } + let version_text = format!("pub mod config {{ pub const VERSION: &str = \"{base_version} (commit: {rev}) (build: {timestamp})\"; }}\n"); + std::fs::write(path, &version_text).unwrap(); } #[cfg(not(target_os = "linux"))] @@ -101,368 +40,3 @@ fn configure_host() { .expect("System openssl development headers are required for Linux builds."); } } - -mod patches { - use super::*; - - pub struct PatchEntry<'a> { - location: &'a str, - original_hash: &'a str, - patch_hash: &'a str, - output_hash: &'a str, - original_path: &'a str, - patch_path: &'a str, - output_path: &'a str, - } - - pub fn write_patch_file(out_dir: &Path, jar: &mut ZipArchive) -> Result<(), ()> { - let mut patch_list = match jar.by_name("META-INF/patches.list") { - Ok(p) => p, - Err(ZipError::FileNotFound) => { - println!("cargo::warning=paperclip.jar does not include a patch list"); - write_empty_patches(&out_dir); - return Ok(()); - } - Err(e) => { - println!("cargo::error=Error reading paperclip.jar: {e}"); - return Err(()); - } - }; - - let mut patch_lines = String::new(); - if let Err(e) = patch_list.read_to_string(&mut patch_lines) { - println!("cargo::error=Error reading patch list in paperclip.jar: {e}"); - return Err(()); - } - - let mut patches = Vec::::new(); - for line in patch_lines.lines() { - let parts: Vec<&str> = line.split("\t").collect(); - if parts.len() != 7 { - println!( - "cargo::error=Patch list file in paperclip.jar contains an invalid line: {line}" - ); - return Err(()); - } - - let location = parts[0]; - let original_hash = parts[1]; - let patch_hash = parts[2]; - let output_hash = parts[3]; - let original_path = parts[4]; - let patch_path = parts[5]; - let output_path = parts[6]; - - patches.push(PatchEntry { - location, - original_hash, - patch_hash, - output_hash, - original_path, - patch_path, - output_path, - }); - } - - write_patches(&out_dir, &patches); - - Ok(()) - } - - #[rustfmt::skip] - fn write_patches(out_dir: &Path, patches: &[PatchEntry]) { - let mut file = File::create(out_dir.join("patches.rs")).unwrap(); - - write!(file, "pub mod patches {{\n").unwrap(); - write!(file, "{}pub const PATCHES: [crate::classpath::PatchEntry; {}] = [\n", ind(1), patches.len()).unwrap(); - - for entry in patches { - write!(file, "{}crate::classpath::PatchEntry {{\n", ind(2)).unwrap(); - write!(file, "{}location: \"{}\",\n", ind(3), entry.location).unwrap(); - write!(file,"{}original_hash: hex_literal::hex!(\"{}\"),\n",ind(3),entry.original_hash).unwrap(); - write!(file,"{}patch_hash: hex_literal::hex!(\"{}\"),\n",ind(3),entry.patch_hash).unwrap(); - write!(file,"{}output_hash: hex_literal::hex!(\"{}\"),\n",ind(3),entry.output_hash).unwrap(); - write!(file,"{}original_path: \"{}\",\n",ind(3),entry.original_path).unwrap(); - write!(file, "{}patch_path: \"{}\",\n", ind(3), entry.patch_path).unwrap(); - write!(file, "{}output_path: \"{}\",\n", ind(3), entry.output_path).unwrap(); - write!(file, "{}}},\n", ind(2)).unwrap(); - } - - write!(file, "{}];\n", ind(1)).unwrap(); - write!(file, "}}\n").unwrap(); - } - - #[rustfmt::skip] - pub fn write_empty_patches(out_dir: &Path) { - let mut file = File::create(out_dir.join("patches.rs")).unwrap(); - write!(file, "pub mod patches {{\n").unwrap(); - write!(file, "{}pub const PATCHES: [crate::classpath::PatchEntry; 0] = [];\n", ind(1)).unwrap(); - write!(file, "}}\n").unwrap(); - } -} - -mod files { - use super::*; - - pub struct FileEntry<'a> { - hash: &'a str, - id: &'a str, - path: &'a str, - } - - pub fn write_entries_file( - out_dir: &Path, - jar: &mut ZipArchive, - location: &str, - ) -> Result<(), ()> { - let mut entry_list = match jar.by_name(format!("META-INF/{location}.list").as_str()) { - Ok(p) => p, - Err(ZipError::FileNotFound) => { - println!("cargo::warning=paperclip.jar does not include a {location} list"); - write_empty_entries(&out_dir, location); - return Ok(()); - } - Err(e) => { - println!("cargo::error=Error reading paperclip.jar: {e}"); - return Err(()); - } - }; - - let mut entry_lines = String::new(); - if let Err(e) = entry_list.read_to_string(&mut entry_lines) { - println!("cargo::error=Error reading {location} list in paperclip.jar: {e}"); - return Err(()); - } - - let mut patches = Vec::::new(); - for line in entry_lines.lines() { - let parts: Vec<&str> = line.split("\t").collect(); - if parts.len() != 3 { - println!( - "cargo::error={location}.list file in paperclip.jar contains an invalid line: {line}" - ); - return Err(()); - } - - let hash = parts[0]; - let id = parts[1]; - let path = parts[2]; - - patches.push(FileEntry { hash, id, path }); - } - - write_entries(&out_dir, &patches, location); - - Ok(()) - } - - #[rustfmt::skip] - fn write_entries(out_dir: &Path, patches: &[FileEntry], location: &str) { - let mut file = File::create(out_dir.join(format!("{location}.rs"))).unwrap(); - - write!(file, "pub mod {location} {{\n").unwrap(); - write!(file, "{}pub const {}: [crate::classpath::FileEntry; {}] = [\n", ind(1), location.to_uppercase(), patches.len()).unwrap(); - - for entry in patches { - write!(file, "{}crate::classpath::FileEntry {{\n", ind(2)).unwrap(); - write!(file, "{}hash: hex_literal::hex!(\"{}\"),\n", ind(3), entry.hash).unwrap(); - write!(file,"{}id: \"{}\",\n", ind(3),entry.id).unwrap(); - write!(file,"{}path: \"{}\",\n", ind(3),entry.path).unwrap(); - write!(file, "{}}},\n", ind(2)).unwrap(); - } - - write!(file, "{}];\n", ind(1)).unwrap(); - write!(file, "}}\n").unwrap(); - } - - #[rustfmt::skip] - pub fn write_empty_entries(out_dir: &Path, location: &str) { - let mut file = File::create(out_dir.join(format!("{location}.rs"))).unwrap(); - write!(file, "pub mod {location} {{\n").unwrap(); - write!(file, "{}pub const {}: [crate::classpath::FileEntry; 0] = [];\n", ind(1), location.to_uppercase()).unwrap(); - write!(file, "}}\n").unwrap(); - } -} - -mod config { - use super::*; - - #[rustfmt::skip] - pub fn write_config_file(out_dir: &Path, jar: &mut ZipArchive) -> Result<(), ()> { - let mut context_line = String::new(); - { - let mut context_entry = match jar.by_name("META-INF/download-context") { - Ok(e) => e, - Err(ZipError::FileNotFound) => { - println!("cargo::warning=paperclip.jar does not include a download-context file"); - write_empty_config(&out_dir); - return Ok(()); - } - Err(e) => { - println!("cargo::error=Error reading download-context in paperclip.jar: {e}"); - return Err(()); - } - }; - context_entry.read_to_string(&mut context_line).unwrap(); - } - let context_split: Vec<&str> = context_line.split("\t").collect(); - if context_split.len() != 3 { - println!("cargo::error=download-context file in paperclip.jar is invalid: {context_line}"); - return Err(()); - } - - let mut main_class_line = String::new(); - { - let mut main_class_entry = match jar.by_name("META-INF/main-class") { - Ok(e) => e, - Err(ZipError::FileNotFound) => { - println!("cargo::warning=paperclip.jar does not include a main-class file"); - write_empty_config(&out_dir); - return Ok(()); - } - Err(e) => { - println!("cargo::error=Error reading main-class in paperclip.jar: {e}"); - return Err(()); - } - }; - main_class_entry - .read_to_string(&mut main_class_line) - .unwrap(); - } - - let mut version = String::new(); // TODO replace with paper-version - let version_json = match jar.by_name("version.json") { - Ok(mut version_json_entry) => { - let mut json_text = String::new(); - version_json_entry.read_to_string(&mut json_text).unwrap(); - let value = serde_json::from_str::(&json_text).unwrap(); - version.push_str(value.as_object().unwrap().get("id").unwrap().as_str().unwrap()); - serde_json::to_string(&value).unwrap() - } - _ => "".to_string(), - }; - - let mut file = File::create(out_dir.join("config.rs")).unwrap(); - - write!(file, "pub mod config {{\n").unwrap(); - write!(file,"{}pub const CONFIG: crate::classpath::Config = crate::classpath::Config {{\n",ind(1)).unwrap(); - write!(file, "{}download_context: Some(crate::classpath::DownloadContext {{\n", ind(2)).unwrap(); - write!(file, "{}hash: hex_literal::hex!(\"{}\"),\n", ind(3), context_split[0]).unwrap(); - write!(file, "{}url: \"{}\",\n", ind(3), context_split[1]).unwrap(); - write!(file, "{}file_name: \"{}\",\n", ind(3), context_split[2]).unwrap(); - write!(file, "{}}}),\n", ind(2)).unwrap(); - write!(file, "{}main_class: \"{}\",\n", ind(2), main_class_line).unwrap(); - write!(file, "{}version: \"{}\",\n", ind(2), version).unwrap(); - write!(file, "{}version_json: r#\"{}\"#,\n", ind(2), version_json).unwrap(); - write!(file, "{}}};\n", ind(1)).unwrap(); - write!(file, "}}\n").unwrap(); - - Ok(()) - } - - #[rustfmt::skip] - pub fn write_empty_config(out_dir: &Path) { - let mut file = File::create(out_dir.join("config.rs")).unwrap(); - - write!(file, "pub mod config {{\n").unwrap(); - write!(file,"{}pub const CONFIG: crate::classpath::Config = crate::classpath::Config {{\n",ind(1)).unwrap(); - write!(file,"{}download_context: None,\n",ind(2)).unwrap(); - write!(file, "{}main_class: \"\",\n", ind(2)).unwrap(); - write!(file, "{}version: \"\",\n", ind(2)).unwrap(); - write!(file, "{}version_json: \"\",\n", ind(2)).unwrap(); - write!(file, "{}}};\n", ind(1)).unwrap(); - write!(file, "}}\n").unwrap(); - } -} - -mod extract { - use super::*; - - pub fn create_dir(out_dir: &Path, target: &str) { - let target_dir = out_dir.join(target); - let _ = std::fs::remove_dir_all(&target_dir); - std::fs::create_dir_all(&target_dir).unwrap(); - } - - pub fn extract_to_dir(jar: &mut ZipArchive, target: &str) -> Result<(), ()> { - let prefix = format!("META-INF/{target}/"); - - let out_dir = std::env::var_os("OUT_DIR").unwrap(); - let target_dir = Path::new(&out_dir).join(target); - - for i in 0..jar.len() { - let mut entry = match jar.by_index(i) { - Ok(e) => e, - Err(e) => { - println!("cargo::error=Error extracting files from paperclip.jar: {e}"); - return Err(()); - } - }; - let name = entry.name().to_owned(); - - if !name.starts_with(&prefix) { - continue; - } - - // Strip the prefix to get the relative structure - let Some(relative_path) = name.strip_prefix(&prefix) else { - continue; - }; - - // Skip the root directory entry itself - if relative_path.is_empty() { - continue; - } - - let out_path = target_dir.join(relative_path); - if !out_path.starts_with(&target_dir) { - // Something went wrong - println!( - "cargo::error=Invalid zip entry path in paperclip.jar: {}", - out_path.display() - ); - return Err(()); - } - - if entry.is_dir() { - if let Err(e) = std::fs::create_dir_all(&out_path) { - println!("cargo::error=Error creating directory: {e}"); - return Err(()); - } - } else { - if let Some(parent) = out_path.parent() { - if let Err(e) = std::fs::create_dir_all(parent) { - println!("cargo::error=Error creating directory: {e}"); - return Err(()); - } - } - let mut out_file = match File::create(&out_path) { - Ok(f) => f, - Err(e) => { - println!("cargo::error=Error creating file: {e}"); - return Err(()); - } - }; - if let Err(e) = std::io::copy(&mut entry, &mut out_file) { - println!("cargo::error=Error copying file: {e}"); - return Err(()); - } - } - } - - Ok(()) - } -} - -fn write_error(out_dir: &Path) { - let mut file = OpenOptions::new() - .create(true) - .append(true) - .open(out_dir.join("config.rs")) - .unwrap(); - write!(file, "\nconst _: () = compile_error!(\"Paperclip cannot be built without a valid ./paperclip.jar present.\");\n").unwrap(); -} - -fn ind(c: usize) -> String { - " ".repeat(c) -} diff --git a/native/src/args.rs b/native/src/args.rs index b7514f4..8e6844a 100644 --- a/native/src/args.rs +++ b/native/src/args.rs @@ -1,10 +1,10 @@ use crate::ONLY_USE_AOT_FAILED_EXIT_CODE; -use crate::config::CONFIG; use crate::errors::Error; use indoc::indoc; #[derive(Debug, Clone, Eq, PartialEq)] pub struct ArgOptions<'a> { + pub jar: &'a str, pub jvm_args: Vec<&'a str>, pub app_args: Vec<&'a str>, pub record: RecordMode, @@ -30,37 +30,37 @@ pub fn split_args<'a>(args: &'a Vec) -> Result>, E // 2. jvm args // 3. app args // If a paperclip arg is found, it's handled and we immediately return. - // jvm args must strictly come before app args. We determine jvm args by looking for -D or -X. If it doesn't - // match, we assume it's an app arg. If we see another jvm arg after an app arg, we fail. + // jvm args come before -jar, and app args come after -jar. let mut record_preference = RecordMode::default(); + let mut jar: Option<&'a str> = None; let mut jvm_args = Vec::<&'a str>::new(); let mut app_args = Vec::<&'a str>::new(); - let mut partition_mark = false; - for arg in &args[1..] { + let args_iter = &mut args[1..].iter(); + loop { + let next = args_iter.next(); + if next.is_none() { + break; + } + let arg = next.unwrap(); + match arg.as_str() { "-h" | "--help" => { - if jvm_args.is_empty() && app_args.is_empty() { + if jvm_args.is_empty() && app_args.is_empty() && jar.is_none() { return print_help(args); } app_args.push(arg); } "-v" | "--version" => { - if jvm_args.is_empty() && app_args.is_empty() { + if jvm_args.is_empty() && app_args.is_empty() && jar.is_none() { return print_version(); } app_args.push(arg); } - "--version-json" => { - if jvm_args.is_empty() && app_args.is_empty() { - return print_vers_json(); - } - app_args.push(arg); - } "--check-aot" | "--only-use-aot" | "--no-record" | "--only-record" | "--force-record" | "--no-aot" => { - if jvm_args.is_empty() && app_args.is_empty() { + if jvm_args.is_empty() && app_args.is_empty() && jar.is_none() { if record_preference != RecordMode::Normal { eprintln!( "--check-aot, --only-use-aot, --no-record, --only-record, \ @@ -81,30 +81,22 @@ pub fn split_args<'a>(args: &'a Vec) -> Result>, E app_args.push(arg); } } - "--" => { - if partition_mark { - app_args.push(arg); - } else { - partition_mark = true; + "-jar" | "--jar" => { + if jar.is_some() { + eprintln!("-jar may only be specified once"); + return Err(Error::Exit(1)); + } + + let jar_file =args_iter.next(); + if jar_file.is_none() { + eprintln!("-jar requires a jar file argument"); + return Err(Error::Exit(1)); } + jar = Some(jar_file.unwrap()); } _ => { - if partition_mark { - app_args.push(arg); - } else if is_jvm_arg(arg) { - if !app_args.is_empty() { - eprintln!( - "JVM arguments must come before application arguments: `{}` comes after `{}`", - arg, - app_args.last().unwrap() - ); - return Err(Error::Exit(1)); - } - if arg.starts_with("-J") { - jvm_args.push(&arg[2..]); - } else { - jvm_args.push(arg); - } + if jar.is_none() { + jvm_args.push(arg); } else { app_args.push(arg); } @@ -112,17 +104,19 @@ pub fn split_args<'a>(args: &'a Vec) -> Result>, E } } + if jar.is_none() { + eprintln!("-jar argument must be provided"); + return Err(Error::Exit(1)); + } + Ok(Some(ArgOptions { + jar: jar.unwrap(), record: record_preference, jvm_args, app_args, })) } -fn is_jvm_arg(arg: &str) -> bool { - arg.starts_with("-D") || arg.starts_with("-X") || arg.starts_with("-J") -} - fn print_help(args: &Vec) -> Result>, Error> { println!( indoc! {" @@ -131,7 +125,7 @@ fn print_help(args: &Vec) -> Result>, Error> License: MIT - Usage: {} [aot args] [jvm args] [app args] + Usage: {} [aot args] [jvm args] -jar [app args] Description: Wrapper to launch the Paper server. Arguments are divided into JVM @@ -150,6 +144,9 @@ fn print_help(args: &Vec) -> Result>, Error> when selecting from multiple JREs. Otherwise, the location of the 'java' executable on the 'PATH' will be used. + -jar The path to the Paper server jar file. This argument is + required. The jar file must be a valid Paperclip jar. + AOT Arguments: Arguments that control how paperclip handles AOT recording and cache management. These must strictly come befre any JVM or app arguments, @@ -178,25 +175,13 @@ fn print_help(args: &Vec) -> Result>, Error> --no-aot Disable all AOT features completely. JVM Arguments: - Arguments passed to the JVM must match one of the following formats: - - -X Pass extended arguments to the JVM. - (e.g., -Xmx4G, -XX:+UseG1GC) - -D Pass system properties to the JVM. - (e.g., -Dcom.mojang.eula.agree=true) - -J Pass any other arbitrary argument to the JVM by - prefixing it with '-J'. (e.g., '-J--enable-preview' - will pass '--enable-preview' to the JVM) + Any argument that preceeds '-jar' after the AOT arguments is passed + directly into the JVM. This includes -Xmx, -XX:+UseG1GC, etc. as well + as others like -D for setting system properties. Application Arguments: - Any argument that does not start with -X, -D, or -J is automatically - assumed to be an Application argument and marks the beginning of the - [app args] section. - - Special Arguments: - -- Marks the end of JVM arguments. All arguments following - this separator will be treated strictly as Application - arguments, even if they start with -X, -D, or -J. + Any argument tha follows the jar file given to the '-jar' argument is + passed directly into the server. "}, args[0], ONLY_USE_AOT_FAILED_EXIT_CODE, ); @@ -205,11 +190,6 @@ fn print_help(args: &Vec) -> Result>, Error> } fn print_version() -> Result>, Error> { - println!("{}", CONFIG.version); - Ok(None) -} - -fn print_vers_json() -> Result>, Error> { - println!("{}", CONFIG.version_json); + println!("{}", crate::config::VERSION); Ok(None) } diff --git a/native/src/classpath.rs b/native/src/classpath.rs index 8345314..8efad72 100644 --- a/native/src/classpath.rs +++ b/native/src/classpath.rs @@ -1,12 +1,7 @@ -use crate::config::CONFIG; use crate::errors::{Error, ErrorLoc}; -use crate::libraries::LIBRARIES; -use crate::patches::PATCHES; -use crate::util::{bytes_matches_hash, create_file, extract_zip_entry, file_matches_hash}; -use crate::versions::VERSIONS; -use crate::{LibrariesAssets, VersionsAssets, err, generic, l}; +use crate::util::{bytes_matches_hash, create_file, extract_zip_entry, file_matches_hash, find_zip_entry, open_zip, parse_hex_named, read_zip_entry, read_zip_entry_text, require_zip_entry}; +use crate::{err, generic, l}; use qbsdiff::Bspatch; -use std::borrow::Cow; use std::ffi::OsString; use std::fmt::Debug; use std::fs::File; @@ -21,40 +16,106 @@ pub fn repo_dir() -> PathBuf { repo_dir.to_owned() } -pub fn setup_classpath(dir: &Path) -> Result, Error> { - // This _should_ be guarded at compile time by the code `build.rs` generates, - // so it should be impossible for this assertion to fail. - assert!( - PATCHES.len() == 0 || CONFIG.download_context.is_some(), - "patches found without a corresponding original-url" - ); - - let base_file = if let Some(download_context) = CONFIG.download_context { - Some(err! { download_context.download(&dir) => - "Failed to download file" +pub fn setup_classpath(dir: &Path, jar_file: &Path) -> Result<(Vec, PaperclipMeta), Error> { + let mut paperclip_jar = open_zip(jar_file)?; + let meta = extract_metadata(&mut paperclip_jar)?; + + if meta.patches.len() > 0 && meta.download_context.is_none() { + return generic!("Patches found without a corresponding original-url in {}", jar_file.display()); + } + + let base_file = if let Some(download_context) = &meta.download_context { + Some(err! { + download_context.download(dir) + => format!("Failed to download file: {}", download_context.file_name) }?) } else { None }; - let mut classpath = extract_and_apply_patches(&dir, base_file)?; + + let mut classpath = extract_and_apply_patches(&dir, &mut paperclip_jar, base_file, &meta)?; let mut res = Vec::with_capacity(classpath.versions.len() + classpath.libraries.len()); res.append(&mut classpath.versions); res.append(&mut classpath.libraries); - Ok(res) + Ok((res, meta)) +} + +pub struct PaperclipMeta { + pub patches: Vec, + pub versions: Vec, + pub libraries: Vec, + pub download_context: Option, + pub main_class: String, +} + +pub fn extract_metadata(jar: &mut ZipArchive) -> Result { + let patches_list = { + let entry = l!(find_zip_entry(jar, "META-INF/patches.list"))?; + if let Some(mut entry) = entry { + Some(l!(read_zip_entry_text(&mut entry))?) + } else { + None + } + }; + let versions_list = { + let mut entry = require_zip_entry(jar, "META-INF/versions.list")?; + l!(read_zip_entry_text(&mut entry))? + }; + let libraries_list = { + let mut entry = require_zip_entry(jar, "META-INF/libraries.list")?; + l!(read_zip_entry_text(&mut entry))? + }; + let download_context = { + let entry = l!(find_zip_entry(jar, "META-INF/download-context"))?; + if let Some(mut entry) = entry { + Some(l!(read_zip_entry_text(&mut entry))?) + } else { + None + } + }; + let main_class = { + let mut entry = require_zip_entry(jar, "META-INF/main-class")?; + l!(read_zip_entry_text(&mut entry))? + }; + + let patches_list = if let Some(patches_list) = patches_list { + Some(l!(PatchEntry::parse(&patches_list))?) + } else { + None + }; + + let versions_list = l!(FileEntry::parse("versions.list", &versions_list))?; + let libraries_list = l!(FileEntry::parse("libraries.list", &libraries_list))?; + + let download_context = if let Some(download_context) = download_context { + Some(l!(DownloadContext::parse(&download_context))?) + } else { + None + }; + + Ok(PaperclipMeta { + patches: patches_list.unwrap_or_default(), + versions: versions_list, + libraries: libraries_list, + download_context, + main_class, + }) } fn extract_and_apply_patches + Debug>( dir: &Path, - original_jar: Option

, + paperlcip_jar: &mut ZipArchive, + original_jar_file: Option

, + meta: &PaperclipMeta, ) -> Result { - let mut jar = err! { + let mut original_jar = err! { try { - original_jar + original_jar_file .as_ref() .map(|j| ZipArchive::new(File::open(j)?) ) .transpose().loc(l!())? - } => format!("Failed to open jar: {:?}", original_jar) + } => format!("Failed to open jar: {:?}", original_jar_file) }?; let mut classpath = Classpath { @@ -64,10 +125,12 @@ fn extract_and_apply_patches + Debug>( err! { try { extract_files( + meta, Location::Versions, dir, - &mut jar, - &VERSIONS, + paperlcip_jar, + &mut original_jar, + &meta.versions, &mut classpath, )? } => "Failed to extract versions" @@ -75,16 +138,18 @@ fn extract_and_apply_patches + Debug>( err! { try { extract_files( + meta, Location::Libraries, dir, - &mut jar, - &LIBRARIES, + paperlcip_jar, + &mut original_jar, + &meta.libraries, &mut classpath, )? } => "Failed to extract libraries" }?; - err! { apply_patches(dir, &mut jar, &mut classpath) => + err! { apply_patches(meta, dir, paperlcip_jar, &mut original_jar, &mut classpath) => "Failed to apply patches" }?; @@ -92,8 +157,10 @@ fn extract_and_apply_patches + Debug>( } fn extract_files( + meta: &PaperclipMeta, location: Location, dir: &Path, + paperclip_jar: &mut ZipArchive, original_jar: &mut Option>, entries: &[FileEntry], classpath: &mut Classpath, @@ -105,7 +172,7 @@ fn extract_files( let jar_path = format!("META-INF/{}", location.name()); let target_path = dir.join(location.name()); for entry in entries { - err! { entry.extract(location, &target_path, original_jar, &jar_path, classpath) => + err! { entry.extract(meta, location, &target_path, paperclip_jar, original_jar, &jar_path, classpath) => format!("Failed to extract files from {}/{}: {}/{}", jar_path, entry.path, target_path.display(), entry.path) }?; } @@ -114,11 +181,13 @@ fn extract_files( } fn apply_patches( + meta: &PaperclipMeta, dir: &Path, + paperclip_jar: &mut ZipArchive, original_jar: &mut Option>, classpath: &mut Classpath, ) -> Result<(), Error> { - if PATCHES.is_empty() { + if meta.patches.is_empty() { return Ok(()); } if original_jar.is_none() { @@ -127,10 +196,10 @@ fn apply_patches( let original_jar = original_jar.as_mut().unwrap(); let mut announced = false; - for patch_entry in PATCHES { + for patch_entry in &meta.patches { err! { try { - announced |= patch_entry.apply_patch(dir, original_jar, announced, classpath)? + announced |= patch_entry.apply_patch(dir, paperclip_jar, original_jar, announced, classpath)? } => format!("Failed to apply patch: {}/{}", patch_entry.location, patch_entry.patch_path) }?; } @@ -159,76 +228,65 @@ impl Location { Self::Libraries => "libraries", } } - - fn resolve(&self, file: &str) -> Option> { - match self { - Self::Versions => VersionsAssets::get(file).map(|f| f.data), - Self::Libraries => LibrariesAssets::get(file).map(|f| f.data), - } - } } #[derive(Debug)] pub struct FileEntry { pub hash: [u8; 32], - pub id: &'static str, - pub path: &'static str, + pub id: String, + pub path: String, } impl FileEntry { fn extract( &self, + meta: &PaperclipMeta, location: Location, target_base_path: &Path, + paperclip_jar: &mut ZipArchive, original_jar: &mut Option>, jar_base_path: &str, classpath: &mut Classpath, ) -> Result<(), Error> { - for patch in PATCHES { + for patch in &meta.patches { if patch.location == location.name() && patch.output_path == self.path { // This file will be created from a patch return Ok(()); } } - let output_path = target_base_path.join(self.path); + let output_path = target_base_path.join(&self.path); if output_path.exists() && file_matches_hash(&output_path, &self.hash)? { classpath.push(location, output_path.into_os_string()); return Ok(()); } - match location.resolve(self.path) { - Some(d) => { - if let Some(parent) = output_path.parent() { + // The file may either be in the paperclip jar, or the original jar + let entry_path = format!("{}/{}", jar_base_path, self.path); + + if let Some(mut entry) = find_zip_entry(paperclip_jar, &entry_path)? { + err! { + extract_zip_entry(&mut entry, &entry_path, &output_path) + => format!("Failed to extract file from paperclip jar: {}/{}", jar_base_path, self.path) + }? + } else { + if let Some(original_jar) = original_jar { + if let Some(mut entry) = find_zip_entry(original_jar, &entry_path)? { err! { - std::fs::create_dir_all(parent) - => format!("Failed to create directory: {}", parent.display()) - }?; + extract_zip_entry(&mut entry, &entry_path, &output_path) + => format!("Failed to extract file from original jar: {}/{}", jar_base_path, self.path) + }? + } else { + return generic!( + "{} not found in either paperclip jar or original jar", + self.path + ); } - err! { - std::fs::write(&output_path, &d) - => format!("Failed to write file: {}", output_path.display()) - }? - } - None => { - // This file is not in our binary, but may be in the original jar - let original_jar = match original_jar { - Some(original_jar) => original_jar, - None => { - // no original jar was provided (we are not running in patcher mode) - // This is an invalid situation - return generic!( - "{} not found in our binary, and no original jar provided", - self.path - ); - } - }; - - let entry_path = format!("{}/{}", jar_base_path, self.path); - err! { - extract_zip_entry(original_jar, entry_path.as_str(), &output_path) - => format!("Failed to extract file from original jar: {entry_path}") - }?; + } else { + return generic!( + "{} not found in paperclip jar, and no original jar provided", + self.path + ); } } @@ -239,30 +297,53 @@ impl FileEntry { classpath.push(location, output_path.into_os_string()); Ok(()) } + + pub fn parse(file: &str, text: &str) -> Result, Error> { + let mut entries = Vec::::new(); + for line in text.lines() { + let parts: Vec<&str> = line.split("\t").collect(); + if parts.len() != 3 { + return generic!("Invalid line in {file}: {line}"); + } + + let hash = l!(parse_hex_named("hash", parts[0]))?; + let id = parts[1]; + let path = parts[2]; + + entries.push(FileEntry { + hash, + id: id.to_string(), + path: path.to_string(), + }); + } + + Ok(entries) + } } #[derive(Debug)] pub struct PatchEntry { - pub location: &'static str, + pub location: String, pub original_hash: [u8; 32], pub patch_hash: [u8; 32], pub output_hash: [u8; 32], - pub original_path: &'static str, - pub patch_path: &'static str, - pub output_path: &'static str, + pub original_path: String, + pub patch_path: String, + pub output_path: String, } impl PatchEntry { fn apply_patch( &self, repo_dir: &Path, + paperclip_jar: &mut ZipArchive, original_jar: &mut ZipArchive, announced: bool, classpath: &mut Classpath, ) -> Result { - let location = Location::from_name(self.location); + let location = Location::from_name(&self.location); let jar_path = format!("META-INF/{}/{}", self.location, self.original_path); - let output_file = repo_dir.join(&self.location).join(self.output_path); + let output_file = repo_dir.join(&self.location).join(&self.output_path); // Short-cut if the patch is already applied if output_file.exists() && file_matches_hash(&output_file, &self.output_hash).loc(l!())? { @@ -289,12 +370,14 @@ impl PatchEntry { return generic!("Hash check of input file failed for {jar_path}"); } - // Get and verity patch data is correct - let patch_data = location.resolve(self.patch_path); - if patch_data.is_none() { - return generic!("Patch file not found: {}", self.patch_path); - } - let patch_data = patch_data.unwrap(); + // Get and verify patch data is correct + let mut patch_entry = match find_zip_entry(paperclip_jar, &self.patch_path)? { + Some(entry) => entry, + None => { + return generic!("Patch file not found in paperclip jar: {}", &self.patch_path); + } + }; + let patch_data = l!(read_zip_entry(&mut patch_entry))?; if !bytes_matches_hash(&patch_data, &self.patch_hash) { return generic!("Hash check of patch file failed for {}", self.patch_path); @@ -322,6 +405,36 @@ impl PatchEntry { classpath.push(location, output_file.into_os_string()); Ok(true) } + + fn parse(text: &str) -> Result, Error> { + let mut patches = Vec::::new(); + for line in text.lines() { + let parts: Vec<&str> = line.split("\t").collect(); + if parts.len() != 7 { + return generic!("Invalid line in patches.list: {}", line); + } + + let location = parts[0]; + let original_hash = l!(parse_hex_named("original_hash", parts[1]))?; + let patch_hash = l!(parse_hex_named("patch_hash", parts[2]))?; + let output_hash = l!(parse_hex_named("output_hash", parts[3]))?; + let original_path = parts[4]; + let patch_path = parts[5]; + let output_path = parts[6]; + + patches.push(PatchEntry { + location: location.to_string(), + original_hash, + patch_hash, + output_hash, + original_path: original_path.to_string(), + patch_path: patch_path.to_string(), + output_path: output_path.to_string(), + }); + } + + Ok(patches) + } } #[derive(Debug)] @@ -335,8 +448,8 @@ pub struct Config { #[derive(Debug)] pub struct DownloadContext { pub hash: [u8; 32], - pub url: &'static str, - pub file_name: &'static str, + pub url: String, + pub file_name: String, } impl DownloadContext { @@ -353,7 +466,7 @@ impl DownloadContext { let mut output_file = create_file(&target_file).loc(l!())?; err! { try { - let mut downloader = nyquest::blocking::get(self.url)?.into_read(); + let mut downloader = nyquest::blocking::get(self.url.to_string())?.into_read(); std::io::copy(&mut downloader, &mut output_file).map_err(Into::into)? } => format!("Failed to download: {}", self.file_name) }?; @@ -369,7 +482,7 @@ impl DownloadContext { } fn create_output_target(&self, repo_dir: &Path) -> Result { - let target_path = repo_dir.join(".paper").join("cache").join(self.file_name); + let target_path = repo_dir.join(".paper").join("cache").join(&self.file_name); if let Some(parent) = target_path.parent() { err! { std::fs::create_dir_all(parent) => format!("Failed to create output directory {}", parent.display()) @@ -377,6 +490,19 @@ impl DownloadContext { } Ok(target_path) } + + fn parse(text: &str) -> Result { + let parts: Vec<&str> = text.split("\t").collect(); + if parts.len() != 3 { + return generic!("Invalid download-context: {}", text); + } + + let hash = l!(parse_hex_named("hash", parts[0]))?; + let url = parts[1]; + let file_name = parts[2]; + + Ok(DownloadContext { hash, url: url.to_string(), file_name: file_name.to_string() }) + } } #[derive(Debug)] diff --git a/native/src/errors.rs b/native/src/errors.rs index dd3a769..9f87cad 100644 --- a/native/src/errors.rs +++ b/native/src/errors.rs @@ -18,6 +18,10 @@ pub enum Error { Net(#[from] nyquest::Error), #[error("Zip error: {0:?}")] Zip(#[from] zip::result::ZipError), + #[error("UTF-8 error: {0:?}")] + Utf(#[from] std::string::FromUtf8Error), + #[error("Hex error: {0:?}")] + Hex(#[from] hex::FromHexError), #[error("Parse error: {0:?}")] Int(#[from] std::num::ParseIntError), #[error("Serialization error: {0:?}")] diff --git a/native/src/main.rs b/native/src/main.rs index 47dde41..771194b 100644 --- a/native/src/main.rs +++ b/native/src/main.rs @@ -10,30 +10,19 @@ pub mod util; use crate::aot::{AotCacheAction, AotMeta, check_aot_opt, setup_auto_recording}; use crate::args::split_args; use crate::classpath::{repo_dir, setup_classpath}; -use crate::config::CONFIG; use crate::errors::Error; use crate::jni::check_java_version; -use crate::util::{JoinHandleRes, classpath_sep, copy_owned}; +use crate::util::{classpath_sep, copy_owned, JoinHandleRes}; use ::jni::objects::{JObjectArray, JString}; use ::jni::strings::JNIString; use ::jni::{AttachConfig, Env, InitArgsBuilder, JNIVersion, JavaVM, jni_sig, jni_str}; -use rust_embed::RustEmbed; use std::ffi::OsString; +use std::path::Path; use std::sync::Arc; use std::thread::JoinHandle; -include!(concat!(env!("OUT_DIR"), "/patches.rs")); -include!(concat!(env!("OUT_DIR"), "/versions.rs")); -include!(concat!(env!("OUT_DIR"), "/libraries.rs")); include!(concat!(env!("OUT_DIR"), "/config.rs")); -#[derive(RustEmbed)] -#[folder = "$OUT_DIR/versions"] -pub struct VersionsAssets; -#[derive(RustEmbed)] -#[folder = "$OUT_DIR/libraries"] -pub struct LibrariesAssets; - pub const ONLY_USE_AOT_FAILED_EXIT_CODE: i32 = 33; fn main() { @@ -53,10 +42,15 @@ fn run() -> i32 { } }; - let jvm_args = arg_opts.jvm_args; - let app_args = arg_opts.app_args; + let jar = Path::new(&arg_opts.jar); + if !jar.exists() { + eprintln!("Jar file does not exist: {}", jar.display()); + return 1; + } let repo_dir = repo_dir(); + let jvm_args = arg_opts.jvm_args; + let app_args = arg_opts.app_args; let java_home = match java_locator::locate_java_home() { Ok(j) => j, @@ -75,8 +69,8 @@ fn run() -> i32 { } }; - let classpath = match setup_classpath(&repo_dir) { - Ok(classpath) => classpath, + let (classpath, meta) = match setup_classpath(&repo_dir, jar) { + Ok(r) => r, Err(e) => { eprintln!("{}", Error::wrap("Failed to setup classpath", e)); return 1; @@ -115,6 +109,8 @@ fn run() -> i32 { let jvm_args = copy_owned(&jvm_args); let app_args = copy_owned(&app_args); let jvm_thread = std::thread::spawn(move || { + let _hold = JvmThreadDrop; // Run drop() on this whenever this thread finishes + let jvm = match create_jvm(&jvm_args, &classpath, &aot_action) { Ok(jvm) => jvm, Err(Error::Exit(code)) => return code, @@ -125,7 +121,7 @@ fn run() -> i32 { }; let jvm = Arc::new(jvm); - let server_thread = start_jvm_thread(jvm.clone(), &app_args); + let server_thread = start_jvm_thread(jvm.clone(), &meta.main_class, &app_args); let server_thread_res = server_thread.join_res(); let meta_thread = setup_auto_recording( @@ -148,14 +144,6 @@ fn run() -> i32 { } drop(jvm); - #[cfg(target_os = "macos")] - { - use core_foundation::runloop::{CFRunLoopGetMain, CFRunLoopStop}; - unsafe { - CFRunLoopStop(CFRunLoopGetMain()); - } - } - if let Some(Err(e)) = meta_thread_res { eprintln!("Error during AOT recording: {e}"); } @@ -183,11 +171,25 @@ fn run() -> i32 { jvm_thread.join().unwrap_or_else(|_| 1) } -fn start_jvm_thread(jvm: Arc, app_args: &[String]) -> JoinHandle> { +struct JvmThreadDrop; +impl Drop for JvmThreadDrop { + fn drop(&mut self) { + #[cfg(target_os = "macos")] + { + use core_foundation::runloop::{CFRunLoopGetMain, CFRunLoopStop}; + unsafe { + CFRunLoopStop(CFRunLoopGetMain()); + } + } + } +} + +fn start_jvm_thread(jvm: Arc, main_class: &str, app_args: &[String]) -> JoinHandle> { let app_args = app_args .iter() .map(|s| s.to_string()) .collect::>(); + let main_class = main_class.to_string(); let handle = std::thread::spawn(move || { let res = jvm.attach_current_thread_with_config( || { @@ -196,7 +198,7 @@ fn start_jvm_thread(jvm: Arc, app_args: &[String]) -> JoinHandle Result<(), Error> { +fn exec_jvm(env: &mut Env, main_class: &str, args: &[String]) -> Result<(), Error> { let args_array = l!(JObjectArray::::new( env, args.len(), @@ -287,7 +289,7 @@ fn exec_jvm(env: &mut Env, args: &[String]) -> Result<(), Error> { l!(args_array.set_element(env, i, arg))?; } - let class_name = JNIString::new(CONFIG.main_class.replace(".", "/")); + let class_name = JNIString::new(main_class.replace(".", "/")); let psvm_name = jni_str!("main"); let psvm_desc = jni_sig!("([Ljava/lang/String;)V"); l!(env.call_static_method(class_name, psvm_name, psvm_desc, &[(&args_array).into()]))?; diff --git a/native/src/util.rs b/native/src/util.rs index 93cd522..004e939 100644 --- a/native/src/util.rs +++ b/native/src/util.rs @@ -1,3 +1,4 @@ +use std::io::Read; use crate::errors::{Error, ErrorLoc}; use crate::{err, generic, l}; use digest_io::IoWrapper; @@ -6,6 +7,8 @@ use std::ffi::OsString; use std::fs::File; use std::path::Path; use std::thread::JoinHandle; +use zip::read::ZipFile; +use zip::result::ZipError; use zip::ZipArchive; pub fn copy_owned(slice: &[S]) -> Vec { @@ -16,6 +19,23 @@ pub fn copy_owned(slice: &[S]) -> Vec { res } +pub fn parse_hex(s: &str) -> Result<[u8; 32], Error> { + let decoded = l!(hex::decode(s))?; + if decoded.len() != 32 { + return generic!("Invalid hex string (not 32 bytes long): {s}"); + } + let mut res = [0u8; 32]; + res.copy_from_slice(&decoded); + Ok(res) +} + +pub fn parse_hex_named(name: &str, s: &str) -> Result<[u8; 32], Error> { + err! { + parse_hex(s) + => format!("Failed to parse hex string '{name}': {s}") + } +} + pub fn file_hash(path: &Path) -> Result<[u8; 32], Error> { err! { try { @@ -53,16 +73,11 @@ pub fn bytes_matches_hash(data: &[u8], expected_hash: &[u8]) -> bool { } pub fn extract_zip_entry( - archive: &mut ZipArchive, + entry: &mut ZipFile, internal_path: &str, destination: &Path, ) -> Result<(), Error> { - let mut zip_file = err! { - archive.by_name(internal_path) - => format!("Failed to find entry in zip: {}", internal_path) - }?; - - if zip_file.is_dir() { + if entry.is_dir() { create_directory(destination).loc(l!())?; return Ok(()); } @@ -75,7 +90,7 @@ pub fn extract_zip_entry( let mut out_file = create_file(destination).loc(l!())?; err! { - std::io::copy(&mut zip_file, &mut out_file) + std::io::copy(entry, &mut out_file) => format!("Failed to extract {} from zip to {}", internal_path, destination.display()) }?; @@ -102,6 +117,13 @@ pub fn create_directory(path: &Path) -> Result<(), Error> { } } +pub fn write_file(path: &Path, data: &[u8]) -> Result<(), Error> { + err! { + std::fs::write(&path, data) + => format!("Failed to write file: {}", path.display()) + } +} + pub fn create_file(path: &Path) -> Result { err! { File::create(path) @@ -116,6 +138,50 @@ pub fn open_file(path: &Path) -> Result { } } +pub fn open_zip(path: &Path) -> Result, Error> { + err! { + ZipArchive::new(open_file(path).loc(l!())?) + => format!("Failed to open zip: {}", path.display()) + } +} + +pub fn find_zip_entry<'a>(archive: &'a mut ZipArchive, name: &str) -> Result>, Error> { + let entry = archive.by_name(name); + err! { + match entry { + Ok(entry) => Ok::>, Error>(Some(entry)), + Err(ZipError::FileNotFound) => Ok(None), + Err(e) => return l!(Err(Error::from(e))), + } + => format!("Failed to find entry in zip: {}", name) + } +} + +pub fn require_zip_entry<'a>(archive: &'a mut ZipArchive, name: &str) -> Result, Error> { + match find_zip_entry(archive, name)? { + Some(entry) => Ok(entry), + None => generic!("Failed to find entry in zip: {name}"), + } +} + +pub fn read_zip_entry(entry: &mut ZipFile) -> Result, Error> { + let mut data = Vec::new(); + err! { + entry.read_to_end(&mut data) + => format!("Failed to read entry: {}", entry.name()) + }?; + Ok(data) +} + + +pub fn read_zip_entry_text(entry: &mut ZipFile) -> Result { + let data = l!(read_zip_entry(entry))?; + return err! { + String::from_utf8(data) + => format!("Invalid UTF-8 in {}", entry.name()) + }; +} + #[cfg(not(target_os = "windows"))] pub fn classpath_sep() -> OsString { ":".into() From a8bc938663f8c49687b19959d538cd502f49381e Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Mon, 27 Jul 2026 23:09:45 -0500 Subject: [PATCH 03/14] GitHub Actions workflow --- .github/workflows/native_build.yml | 22 +++++++++++++--------- native/build.rs | 9 +++++++-- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index d584eac..95c5876 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -1,13 +1,16 @@ name: Build Release on: workflow_dispatch: - inputs: - jar_url: - description: 'Direct download URL for the input JAR' - required: true - type: string jobs: + prepare: + runs-on: ubuntu-latest + outputs: + build_date: ${{ steps.get_date.outputs.date }} + steps: + - name: Generate build date + id: get_date + run: echo "date=$(date +%s)" >> "$GITHUB_OUTPUT" build: name: Build ${{ matrix.target }} runs-on: ${{ matrix.os }} @@ -48,9 +51,6 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v7 - - name: Download Input JAR - shell: bash - run: curl -fL -o paperclip.jar "${{ inputs.jar_url }}" - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable with: @@ -62,11 +62,15 @@ jobs: - name: Build with cross if: matrix.use_cross run: cross build --release --target ${{ matrix.target }} + env: + CI_BUILD_DATE: ${{ needs.prepare.outputs.build_date }} - name: Build with cargo if: ${{ !matrix.use_cross }} run: cargo build --release --target ${{ matrix.target }} + env: + CI_BUILD_DATE: ${{ needs.prepare.outputs.build_date }} - name: Upload binary artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: paperclip-${{ matrix.target }} path: target/${{ matrix.target }}/release/paperclip${{ matrix.extension }} diff --git a/native/build.rs b/native/build.rs index 092f93c..6b2adbd 100644 --- a/native/build.rs +++ b/native/build.rs @@ -1,8 +1,10 @@ use std::path::Path; use std::process::Command; -use chrono::Utc; +use chrono::{DateTime, SubsecRound, Utc}; fn main() { + println!("cargo::rerun-if-env-changed=CI_BUILD_DATE"); + configure_host(); let out_dir = std::env::var("OUT_DIR").unwrap(); @@ -18,7 +20,10 @@ fn main() { let rev = String::from_utf8(rev).unwrap(); let rev = rev.trim(); - let timestamp = Utc::now().format("%+").to_string(); + let timestamp = std::env::var("CI_BUILD_DATE") + .map(|d| DateTime::from_timestamp(d.parse().unwrap(), 0).unwrap()) + .unwrap_or(Utc::now()); + let timestamp = timestamp.trunc_subsecs(0).format("%+").to_string(); let version_text = format!("pub mod config {{ pub const VERSION: &str = \"{base_version} (commit: {rev}) (build: {timestamp})\"; }}\n"); std::fs::write(path, &version_text).unwrap(); From 9c4dfc4bea46834886c402045ad22a030842478d Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 01:48:34 -0500 Subject: [PATCH 04/14] Working builds --- .github/workflows/native_build.yml | 70 +++++++++++++++++++++--------- native/Cargo.toml | 3 ++ native/src/classpath.rs | 27 +++++++++--- 3 files changed, 73 insertions(+), 27 deletions(-) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index 95c5876..9afcc53 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -13,62 +13,92 @@ jobs: run: echo "date=$(date +%s)" >> "$GITHUB_OUTPUT" build: name: Build ${{ matrix.target }} + needs: prepare runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ./native strategy: fail-fast: false matrix: include: # Linux (x86_64) - os: ubuntu-latest - target: x86_64-unknown-linux-musl - use_cross: true + target: x86_64-unknown-linux-gnu extension: "" # Linux (aarch64) - os: ubuntu-latest - target: aarch64-unknown-linux-musl - use_cross: true + target: aarch64-unknown-linux-gnu extension: "" # macOS (x86_64) - os: macos-latest target: x86_64-apple-darwin - use_cross: false extension: "" # macOS (aarch64) - os: macos-latest target: aarch64-apple-darwin - use_cross: false extension: "" # Windows (x86_64) - os: windows-latest target: x86_64-pc-windows-msvc - use_cross: false extension: ".exe" # Windows (aarch64) - os: windows-latest target: aarch64-pc-windows-msvc - use_cross: false extension: ".exe" + env: + CI_BUILD_DATE: ${{ needs.prepare.outputs.build_date }} steps: - name: Checkout repository uses: actions/checkout@v7 + + - name: Install dependencies + if: matrix.os == 'ubuntu-latest' && matrix.target == 'x86_64-unknown-linux-gnu' + run: sudo apt-get install -y libcurl4-openssl-dev libssl-dev + + - name: Install arm64 dependencies + if: matrix.os == 'ubuntu-latest' && matrix.target == 'aarch64-unknown-linux-gnu' + run: | + sudo sed -i 's/^Types: deb/Types: deb\nArchitectures: amd64/' /etc/apt/sources.list.d/ubuntu.sources + + sudo cat < PathBuf { repo_dir.to_owned() } -pub fn setup_classpath(dir: &Path, jar_file: &Path) -> Result<(Vec, PaperclipMeta), Error> { +pub fn setup_classpath( + dir: &Path, + jar_file: &Path, +) -> Result<(Vec, PaperclipMeta), Error> { let mut paperclip_jar = open_zip(jar_file)?; let meta = extract_metadata(&mut paperclip_jar)?; if meta.patches.len() > 0 && meta.download_context.is_none() { - return generic!("Patches found without a corresponding original-url in {}", jar_file.display()); + return generic!( + "Patches found without a corresponding original-url in {}", + jar_file.display() + ); } let base_file = if let Some(download_context) = &meta.download_context { @@ -33,7 +42,6 @@ pub fn setup_classpath(dir: &Path, jar_file: &Path) -> Result<(Vec, Pa None }; - let mut classpath = extract_and_apply_patches(&dir, &mut paperclip_jar, base_file, &meta)?; let mut res = Vec::with_capacity(classpath.versions.len() + classpath.libraries.len()); res.append(&mut classpath.versions); @@ -371,10 +379,11 @@ impl PatchEntry { } // Get and verify patch data is correct - let mut patch_entry = match find_zip_entry(paperclip_jar, &self.patch_path)? { + let patch_jar_path = format!("META-INF/{}/{}", self.location, self.patch_path); + let mut patch_entry = match find_zip_entry(paperclip_jar, &patch_jar_path)? { Some(entry) => entry, None => { - return generic!("Patch file not found in paperclip jar: {}", &self.patch_path); + return generic!("Patch file not found in paperclip jar: {}", &patch_jar_path); } }; let patch_data = l!(read_zip_entry(&mut patch_entry))?; @@ -501,7 +510,11 @@ impl DownloadContext { let url = parts[1]; let file_name = parts[2]; - Ok(DownloadContext { hash, url: url.to_string(), file_name: file_name.to_string() }) + Ok(DownloadContext { + hash, + url: url.to_string(), + file_name: file_name.to_string(), + }) } } From 3540ec6ac1b2ac68cabcab08eb2fe78201b439f3 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 01:50:50 -0500 Subject: [PATCH 05/14] Rename workflow --- .github/workflows/native_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index 9afcc53..45d3e4d 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -1,4 +1,4 @@ -name: Build Release +name: Build Native on: workflow_dispatch: From 259c06de1af521bff912bfcd58116f5be0b9ad7c Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 01:52:00 -0500 Subject: [PATCH 06/14] Register workflow --- .github/workflows/native_build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index 45d3e4d..bb37376 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -1,6 +1,7 @@ name: Build Native on: workflow_dispatch: + pull_request: jobs: prepare: From 419267a8850685642a0d43534a254eb8d96b5a30 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 01:57:31 -0500 Subject: [PATCH 07/14] Artifact path --- .github/workflows/native_build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index bb37376..42ebc5b 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -104,4 +104,4 @@ jobs: uses: actions/upload-artifact@v7 with: name: paperclip-${{ matrix.target }} - path: target/${{ matrix.target }}/release/paperclip${{ matrix.extension }} + path: native/target/${{ matrix.target }}/release/paperclip${{ matrix.extension }} From 44713a336744da81ecf5474ee3eaffd325923b59 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 01:58:15 -0500 Subject: [PATCH 08/14] Unregister --- .github/workflows/native_build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index 42ebc5b..9eda5ad 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -1,7 +1,6 @@ name: Build Native on: workflow_dispatch: - pull_request: jobs: prepare: From 0ad8d3d6b56f07c20f79ae4f5a2976c5757ed112 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 01:59:35 -0500 Subject: [PATCH 09/14] Remove dockerfile line --- native/Cargo.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/native/Cargo.toml b/native/Cargo.toml index 9eac9bf..7c86c78 100644 --- a/native/Cargo.toml +++ b/native/Cargo.toml @@ -10,9 +10,6 @@ opt-level = 3 lto = true codegen-units = 1 -[target.aarch64-unknown-linux-gnu] -dockerfile = "cross/aarch64-linux-unknown-musl.Dockerfile" - [dependencies] jni = { version = "0.22.4", features = ["invocation"] } java-locator = "0.1.9" From e3ca4fa3b01fb553d920adde37cc5d990ca7b6ab Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Tue, 28 Jul 2026 02:02:53 -0500 Subject: [PATCH 10/14] Don't hardcode codename --- .github/workflows/native_build.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/native_build.yml b/.github/workflows/native_build.yml index 9eda5ad..601e727 100644 --- a/.github/workflows/native_build.yml +++ b/.github/workflows/native_build.yml @@ -61,11 +61,12 @@ jobs: run: | sudo sed -i 's/^Types: deb/Types: deb\nArchitectures: amd64/' /etc/apt/sources.list.d/ubuntu.sources + UBUNTU_CODENAME=$(lsb_release -cs) sudo cat < Date: Tue, 28 Jul 2026 02:52:47 -0500 Subject: [PATCH 11/14] Always create cache directory when using AOT --- native/src/aot.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/native/src/aot.rs b/native/src/aot.rs index ce42950..a0c1aca 100644 --- a/native/src/aot.rs +++ b/native/src/aot.rs @@ -170,6 +170,9 @@ pub fn check_aot_opt<'a>( } let (aot_cache_file, aot_meta_file) = AotMeta::aot_files(&repo_dir); + if let Some(parent) = aot_cache_file.parent() { + create_directory(parent)?; + } if !aot_cache_file.exists() || !aot_meta_file.exists() { return match mode { From 63dd0f534d2792600318a1ef61b94a7347c75db5 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Wed, 29 Jul 2026 01:43:08 -0500 Subject: [PATCH 12/14] Support @file args and other stuff --- native/src/aot.rs | 105 +++++++- native/src/args.rs | 521 ++++++++++++++++++++++++++++++++++++++-- native/src/classpath.rs | 62 +++-- native/src/jni.rs | 2 +- native/src/main.rs | 57 +++-- native/src/util.rs | 64 ++++- 6 files changed, 724 insertions(+), 87 deletions(-) diff --git a/native/src/aot.rs b/native/src/aot.rs index a0c1aca..bbced98 100644 --- a/native/src/aot.rs +++ b/native/src/aot.rs @@ -4,7 +4,7 @@ use crate::jni::{java_bin, jni_attach_thread}; use crate::util::{copy_owned, create_directory, file_hash}; use crate::{ONLY_USE_AOT_FAILED_EXIT_CODE, err, generic, l, null}; use jni::objects::{JObject, JObjectArray, JString}; -use jni::{Env, JValue, JavaVM, ScopeToken, jni_sig, jni_str}; +use jni::{AttachConfig, Env, JValue, JavaVM, ScopeToken, jni_sig, jni_str}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::ffi::OsString; @@ -157,19 +157,19 @@ impl AotCacheAction { } } -pub fn check_aot_opt<'a>( +pub fn check_aot_opt( repo_dir: &Path, mode: RecordMode, java_home: &str, classpath: &[OsString], - jvm_args: &[&str], - app_args: &[&str], + jvm_args: &[String], + app_args: &[String], ) -> Result { if mode == RecordMode::NoAot { return Ok(AotCacheAction::none()); } - let (aot_cache_file, aot_meta_file) = AotMeta::aot_files(&repo_dir); + let (aot_cache_file, aot_meta_file) = AotMeta::aot_files(repo_dir); if let Some(parent) = aot_cache_file.parent() { create_directory(parent)?; } @@ -192,7 +192,7 @@ pub fn check_aot_opt<'a>( let jvm_args = copy_owned(jvm_args); let app_args = copy_owned(app_args); let current_meta = l!(AotMeta::build( - &java_home, + java_home, classpath, &jvm_args, &app_args, @@ -260,7 +260,7 @@ pub fn setup_auto_recording( // Make copies to pass to the other thread let jvm_cache_checker = jvm.clone(); let java_home = java_home.to_string(); - let classpath = classpath.iter().cloned().collect::>(); + let classpath = classpath.to_vec(); let jvm_args = copy_owned(jvm_args); let app_args = copy_owned(app_args); @@ -289,14 +289,14 @@ pub fn setup_auto_recording( } let has_started = env - .get_static_field(&watchdog_thread, &has_started_field, &has_started_sig) + .get_static_field(watchdog_thread, has_started_field, &has_started_sig) .loc(l!())? .z(); match has_started { Ok(true) => break, Ok(false) => continue, Err(jni::errors::Error::JavaException) => { - let _ = env.exception_clear(); // ignore it + env.exception_clear(); // ignore it continue; } Err(e) => return l!(Err(Error::from(e))), @@ -336,6 +336,35 @@ pub fn setup_auto_recording( if let Err(e) = meta.write(&aot_meta_file) { return l!(Err(Error::wrap("Failed to write AOT cache meta", e))); }; + + let res: Result<(), Error> = jvm_cache_checker.attach_current_thread_with_config( + || { + AttachConfig::default() + .scoped(true) + .thread_name(jni_str!("aot-cache-checker")) + }, + None, + |env| { + let logger = err! { + get_logger(env) + => "Failed to get logger" + }?; + + let message = l!(env.new_string("AOT cache meta written successfully."))?; + env.call_method( + &logger, + jni_str!("info"), + jni_sig!("(Ljava/lang/String;)V"), + &[JValue::Object(&message)], + ) + .loc(l!())?; + + Ok(()) + }, + ); + if let Err(e) = res { + eprintln!("Error logging message: {e}"); + } } // For only record, stop the server @@ -381,6 +410,27 @@ fn end_aot_recording(jvm: &JavaVM) -> Result { ))?; let env = guard.borrow_env_mut(); + let logger = try { + let logger = err! { + get_logger(env) + => "Failed to get logger" + }?; + + let message = l!(env.new_string("AOT cache recording ended. Writing AOT file..."))?; + env.call_method( + &logger, + jni_str!("info"), + jni_sig!("(Ljava/lang/String;)V"), + &[JValue::Object(&message)], + ) + .loc(l!())?; + + logger + }; + if let Err(ref e) = logger { + eprintln!("Failed to get logger: {e}"); + } + let aot_cache_bean_class = l!(env.find_class(jni_str!("jdk/management/HotSpotAOTCacheMXBean")))?; // Trigger record @@ -408,9 +458,46 @@ fn end_aot_recording(jvm: &JavaVM) -> Result { .loc(l!())? .z() .loc(l!())?; + + if let Ok(logger) = logger { + // Ignore errors here, it's just logging. + let _ = try { + if ended { + let message = l!(env.new_string("AOT cache file written successfully."))?; + env.call_method( + &logger, + jni_str!("info"), + jni_sig!("(Ljava/lang/String;)V"), + &[JValue::Object(&message)], + ) + } else { + let message = l!(env.new_string("AOT cache file writing failed."))?; + env.call_method( + &logger, + jni_str!("error"), + jni_sig!("(Ljava/lang/String;)V"), + &[JValue::Object(&message)], + ) + } + }; + } + Ok(ended) } +fn get_logger<'a>(env: &mut Env<'a>) -> Result, Error> { + let logger_name = l!(env.new_string("AOT"))?; + env.call_static_method( + jni_str!("org/slf4j/LoggerFactory"), + jni_str!("getLogger"), + jni_sig!("(Ljava/lang/String;)Lorg/slf4j/Logger;"), + &[JValue::Object(&logger_name)], + ) + .loc(l!())? + .into_object() + .loc(l!()) +} + // Threading fn check_threads_are_running(env: &mut Env) -> Result { diff --git a/native/src/args.rs b/native/src/args.rs index 8e6844a..c003d5d 100644 --- a/native/src/args.rs +++ b/native/src/args.rs @@ -1,12 +1,15 @@ use crate::ONLY_USE_AOT_FAILED_EXIT_CODE; use crate::errors::Error; +use crate::util::ComposingIterator; use indoc::indoc; +use std::fs::File; +use std::io::{BufRead, BufReader}; #[derive(Debug, Clone, Eq, PartialEq)] -pub struct ArgOptions<'a> { - pub jar: &'a str, - pub jvm_args: Vec<&'a str>, - pub app_args: Vec<&'a str>, +pub struct ArgOptions { + pub jar: String, + pub jvm_args: Vec, + pub app_args: Vec, pub record: RecordMode, } @@ -24,7 +27,7 @@ pub enum RecordMode { // Split args into (jvm_args, app_args) // This function handles --version, --help, and other cases -pub fn split_args<'a>(args: &'a Vec) -> Result>, Error> { +pub fn split_args(args: Vec) -> Result, Error> { // There are 3 categories of args, which this function tries to split organically: // 1. paperclip args // 2. jvm args @@ -33,22 +36,33 @@ pub fn split_args<'a>(args: &'a Vec) -> Result>, E // jvm args come before -jar, and app args come after -jar. let mut record_preference = RecordMode::default(); - let mut jar: Option<&'a str> = None; - let mut jvm_args = Vec::<&'a str>::new(); - let mut app_args = Vec::<&'a str>::new(); + let mut jar: Option = None; + let mut jvm_args = Vec::::new(); + let mut app_args = Vec::::new(); + + let mut args_iter = ComposingIterator::new(Box::new(args.into_iter())); + let first_arg = args_iter.next().unwrap(); + + let mut disable_at_files = false; - let args_iter = &mut args[1..].iter(); loop { let next = args_iter.next(); if next.is_none() { break; } - let arg = next.unwrap(); + let arg: String = next.unwrap(); + + if !disable_at_files && !args_iter.is_nested() && arg.starts_with('@') { + let mut nested = Vec::::new(); + args_file(&arg, &mut nested)?; + args_iter.push_layer(Box::new(nested.into_iter())); + continue; + } match arg.as_str() { "-h" | "--help" => { if jvm_args.is_empty() && app_args.is_empty() && jar.is_none() { - return print_help(args); + return print_help(first_arg); } app_args.push(arg); } @@ -87,13 +101,14 @@ pub fn split_args<'a>(args: &'a Vec) -> Result>, E return Err(Error::Exit(1)); } - let jar_file =args_iter.next(); + let jar_file = args_iter.next(); if jar_file.is_none() { eprintln!("-jar requires a jar file argument"); return Err(Error::Exit(1)); } jar = Some(jar_file.unwrap()); } + "--disable-@files" => disable_at_files = true, _ => { if jar.is_none() { jvm_args.push(arg); @@ -117,7 +132,276 @@ pub fn split_args<'a>(args: &'a Vec) -> Result>, E })) } -fn print_help(args: &Vec) -> Result>, Error> { +fn args_file(arg: &str, target: &mut Vec) -> Result<(), Error> { + if !arg.starts_with('@') { + return Ok(()); + } + + if arg.starts_with("@@") { + target.push(arg[1..].to_string()); + return Ok(()); + } + + let filepath = &arg[1..]; + let file = File::open(filepath)?; + let metadata = file.metadata()?; + if metadata.len() > 2_147_483_647 { + return Err(Error::Generic(format!( + "Argument file {} exceeds maximum size of 2147483647 bytes", + filepath + ))); + } + + let reader = BufReader::new(file); + let stream = CharStream::new(reader); + parse_args_file_stream(stream, target)?; + + Ok(()) +} + +struct CharStream { + reader: R, + peeked: Vec, + bytes_read: u64, +} + +impl CharStream { + fn new(reader: R) -> Self { + Self { + reader, + peeked: Vec::with_capacity(4), + bytes_read: 0, + } + } + + fn read_one_char(&mut self) -> Result, std::io::Error> { + let mut first_byte = [0u8; 1]; + if self.reader.read(&mut first_byte)? == 0 { + return Ok(None); + } + self.bytes_read += 1; + if self.bytes_read > 2_147_483_647 { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Argument file exceeds maximum size of 2147483647 bytes", + )); + } + + let b = first_byte[0]; + if b < 0x80 { + return Ok(Some(b as char)); + } + + let len = if b & 0xE0 == 0xC0 { + 2 + } else if b & 0xF0 == 0xE0 { + 3 + } else if b & 0xF8 == 0xF0 { + 4 + } else { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidData, + "Invalid UTF-8 sequence", + )); + }; + + let mut buf = vec![0u8; len]; + buf[0] = b; + self.reader.read_exact(&mut buf[1..])?; + self.bytes_read += (len - 1) as u64; + + let s = std::str::from_utf8(&buf) + .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?; + + Ok(s.chars().next()) + } + + fn peek(&mut self, offset: usize) -> Result, std::io::Error> { + while self.peeked.len() <= offset { + match self.read_one_char()? { + Some(c) => self.peeked.push(c), + None => return Ok(None), + } + } + Ok(Some(self.peeked[offset])) + } + + fn next(&mut self) -> Result, std::io::Error> { + if !self.peeked.is_empty() { + return Ok(Some(self.peeked.remove(0))); + } + self.read_one_char() + } +} + +fn parse_args_file_stream( + mut stream: CharStream, + target: &mut Vec, +) -> Result<(), Error> { + let mut current_arg = String::new(); + let mut in_token = false; + let mut quote_char: Option = None; + + while let Some(ch) = stream.peek(0)? { + // Line Continuation ('\' followed by EOL) + if ch == '\\' { + let next1 = stream.peek(1)?; + let mut eol_len = 0; + if next1 == Some('\n') { + eol_len = 1; + } else if next1 == Some('\r') { + let next2 = stream.peek(2)?; + if next2 == Some('\n') { + eol_len = 2; + } else { + eol_len = 1; + } + } + + if eol_len > 0 { + stream.next()?; // consume '\' + for _ in 0..eol_len { + stream.next()?; + } + in_token = true; + + // Check if the first character on the new line is '\' + if stream.peek(0)? == Some('\\') { + // Continuation character ('\') at column 1 prevents trimming leading whitespace + stream.next()?; + } else { + // Trim leading whitespace on the new line + while let Some(c) = stream.peek(0)? { + if c == ' ' || c == '\t' || c == '\u{000C}' { + stream.next()?; + } else { + break; + } + } + } + continue; + } + } + + // Escape Sequence ('\' NOT followed by EOL) + if ch == '\\' { + stream.next()?; // consume '\' + if let Some(next_c) = stream.next()? { + match next_c { + 'n' => current_arg.push('\n'), + 'r' => current_arg.push('\r'), + 't' => current_arg.push('\t'), + 'f' => current_arg.push('\u{000C}'), + '\\' => current_arg.push('\\'), + '"' => current_arg.push('"'), + '\'' => current_arg.push('\''), + '#' => current_arg.push('#'), + c => { + current_arg.push('\\'); + current_arg.push(c); + } + } + in_token = true; + } else { + current_arg.push('\\'); + in_token = true; + } + continue; + } + + // Quotes ('"' or '\'') + if ch == '"' || ch == '\'' { + stream.next()?; // consume quote char + if let Some(open_q) = quote_char { + if open_q == ch { + quote_char = None; + } else { + current_arg.push(ch); + } + } else { + quote_char = Some(ch); + } + in_token = true; + continue; + } + + // EOL ('\n' or '\r') + if ch == '\n' || ch == '\r' { + if quote_char.is_some() { + // Inside open quote, EOL without '\' continuation is discarded + stream.next()?; + if ch == '\r' && stream.peek(0)? == Some('\n') { + stream.next()?; + } + } else { + if in_token { + push_token(current_arg, target); + current_arg = String::new(); + in_token = false; + } + stream.next()?; + if ch == '\r' && stream.peek(0)? == Some('\n') { + stream.next()?; + } + } + continue; + } + + // Comment ('#') + if ch == '#' && quote_char.is_none() { + if in_token { + push_token(current_arg, target); + current_arg = String::new(); + in_token = false; + } + while let Some(c) = stream.peek(0)? { + if c == '\n' || c == '\r' { + break; + } + stream.next()?; + } + continue; + } + + // Whitespace (' ', '\t', '\f') + if ch == ' ' || ch == '\t' || ch == '\u{000C}' { + stream.next()?; + if quote_char.is_some() { + current_arg.push(ch); + in_token = true; + } else { + if in_token { + push_token(current_arg, target); + current_arg = String::new(); + in_token = false; + } + } + continue; + } + + // Regular character + stream.next()?; + current_arg.push(ch); + in_token = true; + } + + if in_token { + push_token(current_arg, target); + } + + Ok(()) +} + +fn push_token(token: String, target: &mut Vec) { + let processed = if token.starts_with("@@") { + token[1..].to_string() + } else { + token + }; + target.push(processed); +} + +fn print_help(first_arg: String) -> Result, Error> { println!( indoc! {" paperclip - Execute the Paper server with Project Leyden AOT @@ -183,13 +467,220 @@ fn print_help(args: &Vec) -> Result>, Error> Any argument tha follows the jar file given to the '-jar' argument is passed directly into the server. "}, - args[0], ONLY_USE_AOT_FAILED_EXIT_CODE, + first_arg, ONLY_USE_AOT_FAILED_EXIT_CODE, ); Ok(None) } -fn print_version() -> Result>, Error> { +fn print_version() -> Result, Error> { println!("{}", crate::config::VERSION); Ok(None) } + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Write; + + fn create_temp_arg_file( + prefix: &str, + content: &str, + ) -> (std::path::PathBuf, tempfile_cleanup::Cleanup) { + let mut path = std::env::temp_dir(); + let filename = format!( + "paperclip_test_args_{}_{}_{}.txt", + prefix, + std::process::id(), + std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .as_nanos() + ); + path.push(filename); + let mut file = File::create(&path).unwrap(); + file.write_all(content.as_bytes()).unwrap(); + let cleanup_path = path.clone(); + (path, tempfile_cleanup::Cleanup(cleanup_path)) + } + + mod tempfile_cleanup { + pub struct Cleanup(pub std::path::PathBuf); + impl Drop for Cleanup { + fn drop(&mut self) { + let _ = std::fs::remove_file(&self.0); + } + } + } + + #[test] + fn test_non_at_arg() { + let mut target = Vec::new(); + args_file("foo", &mut target).unwrap(); + assert!(target.is_empty()); + } + + #[test] + fn test_escaped_at_arg() { + let mut target = Vec::new(); + args_file("@@foo", &mut target).unwrap(); + assert_eq!(target, vec!["@foo"]); + } + + #[test] + fn test_open_quote_example1() { + let content = "-cp \"lib/\ncool/\napp/\njars"; + let (path, _cleanup) = create_temp_arg_file("ex1", content); + let arg_str = format!("@{}", path.to_str().unwrap()); + let mut target = Vec::new(); + args_file(&arg_str, &mut target).unwrap(); + assert_eq!(target, vec!["-cp", "lib/cool/app/jars"]); + } + + #[test] + fn test_escaped_backslash_example2() { + let content = "-cp \"c:\\\\Program Files (x86)\\\\Java\\\\jre\\\\lib\\\\ext;c:\\\\Program Files\\\\Java\\\\jre9\\\\lib\\\\ext\""; + let (path, _cleanup) = create_temp_arg_file("ex2", content); + let arg_str = format!("@{}", path.to_str().unwrap()); + let mut target = Vec::new(); + args_file(&arg_str, &mut target).unwrap(); + assert_eq!( + target, + vec![ + "-cp", + "c:\\Program Files (x86)\\Java\\jre\\lib\\ext;c:\\Program Files\\Java\\jre9\\lib\\ext" + ] + ); + } + + #[test] + fn test_line_continuation_example3() { + let content = "-cp \"/lib/cool app/jars:\\\n/lib/another app/jars\""; + let (path, _cleanup) = create_temp_arg_file("ex3", content); + let arg_str = format!("@{}", path.to_str().unwrap()); + let mut target = Vec::new(); + args_file(&arg_str, &mut target).unwrap(); + assert_eq!( + target, + vec!["-cp", "/lib/cool app/jars:/lib/another app/jars"] + ); + } + + #[test] + fn test_line_continuation_column1_example4() { + let content = "-cp \"/lib/cool\\\n\\ app/jars\""; + let (path, _cleanup) = create_temp_arg_file("ex4", content); + let arg_str = format!("@{}", path.to_str().unwrap()); + let mut target = Vec::new(); + args_file(&arg_str, &mut target).unwrap(); + assert_eq!(target, vec!["-cp", "/lib/cool app/jars"]); + } + + #[test] + fn test_comments_and_disable_at_files() { + let content = "-Xmx1g\n# This is a comment\n--disable-@files\n-Xmx2g\n@another.txt"; + let (path, _cleanup) = create_temp_arg_file("ex5", content); + let arg_str = format!("@{}", path.to_str().unwrap()); + let mut target = Vec::new(); + args_file(&arg_str, &mut target).unwrap(); + assert_eq!( + target, + vec!["-Xmx1g", "--disable-@files", "-Xmx2g", "@another.txt"] + ); + } + + #[test] + fn test_single_backslash_path() { + // Spec line 21: c:\Program" "Files should evaluate to c:\Program Files + let content = "c:\\Program\" \"Files"; + let (path, _cleanup) = create_temp_arg_file("def1", content); + let arg_str = format!("@{}", path.to_str().unwrap()); + let mut target = Vec::new(); + args_file(&arg_str, &mut target).unwrap(); + assert_eq!(target, vec!["c:\\Program Files"]); + } + + #[test] + fn test_split_args_basic() { + let args = vec![ + "paperclip".to_string(), + "-Xmx2G".to_string(), + "-jar".to_string(), + "paper.jar".to_string(), + "--nogui".to_string(), + ]; + let res = split_args(args).unwrap().unwrap(); + assert_eq!(res.jar, "paper.jar"); + assert_eq!(res.record, RecordMode::Normal); + assert_eq!(res.jvm_args, vec!["-Xmx2G"]); + assert_eq!(res.app_args, vec!["--nogui"]); + } + + #[test] + fn test_split_args_aot_flag() { + let args = vec![ + "paperclip".to_string(), + "--only-use-aot".to_string(), + "-Xmx1G".to_string(), + "-jar".to_string(), + "server.jar".to_string(), + ]; + let res = split_args(args).unwrap().unwrap(); + assert_eq!(res.jar, "server.jar"); + assert_eq!(res.record, RecordMode::OnlyUse); + assert_eq!(res.jvm_args, vec!["-Xmx1G"]); + assert!(res.app_args.is_empty()); + } + + #[test] + fn test_split_args_with_at_file() { + let content = "-Xmx4g\n-Dfoo=bar\n-jar\npaper.jar\n--port\n25565"; + let (path, _cleanup) = create_temp_arg_file("split_at", content); + let args = vec!["paperclip".to_string(), format!("@{}", path.to_str().unwrap())]; + let res = split_args(args).unwrap().unwrap(); + assert_eq!(res.jar, "paper.jar"); + assert_eq!(res.jvm_args, vec!["-Xmx4g", "-Dfoo=bar"]); + assert_eq!(res.app_args, vec!["--port", "25565"]); + } + + #[test] + fn test_split_args_disable_at_files() { + let content1 = "-Xmx1g"; + let content2 = "-Xmx2g"; + let (path1, _c1) = create_temp_arg_file("dis_at1", content1); + let (path2, _c2) = create_temp_arg_file("dis_at2", content2); + let arg2_str = format!("@{}", path2.to_str().unwrap()); + + let args = vec![ + "paperclip".to_string(), + format!("@{}", path1.to_str().unwrap()), + "--disable-@files".to_string(), + arg2_str.clone(), + "-jar".to_string(), + "paper.jar".to_string(), + ]; + let res = split_args(args).unwrap().unwrap(); + assert_eq!(res.jar, "paper.jar"); + assert_eq!(res.jvm_args, vec!["-Xmx1g".to_string(), arg2_str]); + } + + + #[test] + fn test_split_args_no_jar_error() { + let args = vec!["paperclip".to_string(), "-Xmx1g".to_string()]; + assert!(split_args(args).is_err()); + } + + #[test] + fn test_split_args_duplicate_jar_error() { + let args = vec![ + "paperclip".to_string(), + "-jar".to_string(), + "a.jar".to_string(), + "-jar".to_string(), + "b.jar".to_string(), + ]; + assert!(split_args(args).is_err()); + } +} + diff --git a/native/src/classpath.rs b/native/src/classpath.rs index bfd7375..43d38cb 100644 --- a/native/src/classpath.rs +++ b/native/src/classpath.rs @@ -26,7 +26,7 @@ pub fn setup_classpath( let mut paperclip_jar = open_zip(jar_file)?; let meta = extract_metadata(&mut paperclip_jar)?; - if meta.patches.len() > 0 && meta.download_context.is_none() { + if !meta.patches.is_empty() && meta.download_context.is_none() { return generic!( "Patches found without a corresponding original-url in {}", jar_file.display() @@ -42,7 +42,7 @@ pub fn setup_classpath( None }; - let mut classpath = extract_and_apply_patches(&dir, &mut paperclip_jar, base_file, &meta)?; + let mut classpath = extract_and_apply_patches(dir, &mut paperclip_jar, base_file, &meta)?; let mut res = Vec::with_capacity(classpath.versions.len() + classpath.libraries.len()); res.append(&mut classpath.versions); res.append(&mut classpath.libraries); @@ -180,8 +180,17 @@ fn extract_files( let jar_path = format!("META-INF/{}", location.name()); let target_path = dir.join(location.name()); for entry in entries { - err! { entry.extract(meta, location, &target_path, paperclip_jar, original_jar, &jar_path, classpath) => - format!("Failed to extract files from {}/{}: {}/{}", jar_path, entry.path, target_path.display(), entry.path) + err! { + entry.extract(FileEntryArgs { + meta, + location, + target_base_path: &target_path, + paperclip_jar, + original_jar, + jar_base_path: &jar_path, + classpath + }) + => format!("Failed to extract files from {}/{}: {}/{}", jar_path, entry.path, target_path.display(), entry.path) }?; } @@ -245,44 +254,46 @@ pub struct FileEntry { pub path: String, } +struct FileEntryArgs<'a> { + meta: &'a PaperclipMeta, + location: Location, + target_base_path: &'a Path, + paperclip_jar: &'a mut ZipArchive, + original_jar: &'a mut Option>, + jar_base_path: &'a str, + classpath: &'a mut Classpath, +} + impl FileEntry { - fn extract( - &self, - meta: &PaperclipMeta, - location: Location, - target_base_path: &Path, - paperclip_jar: &mut ZipArchive, - original_jar: &mut Option>, - jar_base_path: &str, - classpath: &mut Classpath, - ) -> Result<(), Error> { - for patch in &meta.patches { - if patch.location == location.name() && patch.output_path == self.path { + fn extract(&self, args: FileEntryArgs) -> Result<(), Error> { + for patch in &args.meta.patches { + if patch.location == args.location.name() && patch.output_path == self.path { // This file will be created from a patch return Ok(()); } } - let output_path = target_base_path.join(&self.path); + let output_path = args.target_base_path.join(&self.path); if output_path.exists() && file_matches_hash(&output_path, &self.hash)? { - classpath.push(location, output_path.into_os_string()); + args.classpath + .push(args.location, output_path.into_os_string()); return Ok(()); } // The file may either be in the paperclip jar, or the original jar - let entry_path = format!("{}/{}", jar_base_path, self.path); + let entry_path = format!("{}/{}", args.jar_base_path, self.path); - if let Some(mut entry) = find_zip_entry(paperclip_jar, &entry_path)? { + if let Some(mut entry) = find_zip_entry(args.paperclip_jar, &entry_path)? { err! { extract_zip_entry(&mut entry, &entry_path, &output_path) - => format!("Failed to extract file from paperclip jar: {}/{}", jar_base_path, self.path) + => format!("Failed to extract file from paperclip jar: {}/{}", args.jar_base_path, self.path) }? } else { - if let Some(original_jar) = original_jar { + if let Some(original_jar) = args.original_jar { if let Some(mut entry) = find_zip_entry(original_jar, &entry_path)? { err! { extract_zip_entry(&mut entry, &entry_path, &output_path) - => format!("Failed to extract file from original jar: {}/{}", jar_base_path, self.path) + => format!("Failed to extract file from original jar: {}/{}", args.jar_base_path, self.path) }? } else { return generic!( @@ -302,7 +313,8 @@ impl FileEntry { return generic!("Hash check failed for extracted file {}", self.path); } - classpath.push(location, output_path.into_os_string()); + args.classpath + .push(args.location, output_path.into_os_string()); Ok(()) } @@ -463,7 +475,7 @@ pub struct DownloadContext { impl DownloadContext { pub fn download(&self, repo_dir: &Path) -> Result { - let target_file = err! { self.create_output_target(&repo_dir) => + let target_file = err! { self.create_output_target(repo_dir) => format!("Failed to create directory: {}", repo_dir.display()) }?; if target_file.exists() && file_matches_hash(&target_file, &self.hash)? { diff --git a/native/src/jni.rs b/native/src/jni.rs index 4f3dcd2..ad0d1db 100644 --- a/native/src/jni.rs +++ b/native/src/jni.rs @@ -28,7 +28,7 @@ pub fn as_primitive_array<'a: 'b, 'b, T: TypeArray>( array: &[T], ) -> Result, Error> { let java_array = l!(JPrimitiveArray::::new(env, array.len()))?; - l!(java_array.set_region(env, 0, &array))?; + l!(java_array.set_region(env, 0, array))?; Ok(java_array) } diff --git a/native/src/main.rs b/native/src/main.rs index 771194b..5af361c 100644 --- a/native/src/main.rs +++ b/native/src/main.rs @@ -12,7 +12,7 @@ use crate::args::split_args; use crate::classpath::{repo_dir, setup_classpath}; use crate::errors::Error; use crate::jni::check_java_version; -use crate::util::{classpath_sep, copy_owned, JoinHandleRes}; +use crate::util::{JoinHandleRes, classpath_sep, copy_owned}; use ::jni::objects::{JObjectArray, JString}; use ::jni::strings::JNIString; use ::jni::{AttachConfig, Env, InitArgsBuilder, JNIVersion, JavaVM, jni_sig, jni_str}; @@ -32,7 +32,7 @@ fn main() { fn run() -> i32 { let args: Vec = std::env::args().collect(); - let arg_opts = match split_args(&args) { + let arg_opts = match split_args(args) { Ok(Some(arg_opts)) => arg_opts, Ok(None) => return 0, Err(Error::Exit(code)) => return code, @@ -121,6 +121,11 @@ fn run() -> i32 { }; let jvm = Arc::new(jvm); + if let AotCacheAction::Record { .. } = aot_action { + println!( + "Beginning AOT cache recording (This may cause slowdowns while the JVM is recording)..." + ); + } let server_thread = start_jvm_thread(jvm.clone(), &meta.main_class, &app_args); let server_thread_res = server_thread.join_res(); @@ -132,10 +137,7 @@ fn run() -> i32 { &app_args, arg_opts.record, ); - let meta_thread_res = match meta_thread { - Some(h) => Some(h.join_res()), - None => None, - }; + let meta_thread_res = meta_thread.map(|h| h.join_res()); unsafe { if let Err(e) = jvm.destroy() { @@ -168,7 +170,7 @@ fn run() -> i32 { } } - jvm_thread.join().unwrap_or_else(|_| 1) + jvm_thread.join().unwrap_or(1) } struct JvmThreadDrop; @@ -184,14 +186,19 @@ impl Drop for JvmThreadDrop { } } -fn start_jvm_thread(jvm: Arc, main_class: &str, app_args: &[String]) -> JoinHandle> { +fn start_jvm_thread( + jvm: Arc, + main_class: &str, + app_args: &[String], +) -> JoinHandle> { let app_args = app_args .iter() .map(|s| s.to_string()) .collect::>(); let main_class = main_class.to_string(); - let handle = std::thread::spawn(move || { - let res = jvm.attach_current_thread_with_config( + + std::thread::spawn(move || { + jvm.attach_current_thread_with_config( || { AttachConfig::default() .scoped(true) @@ -199,12 +206,8 @@ fn start_jvm_thread(jvm: Arc, main_class: &str, app_args: &[String]) -> }, None, |env| exec_jvm(env, &main_class, &app_args), - ); - - res - }); - - handle + ) + }) } fn create_jvm( @@ -213,13 +216,13 @@ fn create_jvm( aot_action: &AotCacheAction, ) -> Result { // Exit if user has set `PAPERCLIP_PATCHONLY` env variable to `true` - if let Some(prop) = std::env::var_os("PAPERCLIP_PATCHONLY") { - if prop.eq_ignore_ascii_case("true") { - return Err(Error::Exit(0)); - } + if let Some(prop) = std::env::var_os("PAPERCLIP_PATCHONLY") + && prop.eq_ignore_ascii_case("true") + { + return Err(Error::Exit(0)); } - init_jvm(jvm_args, &classpath, &aot_action) + init_jvm(jvm_args, classpath, aot_action) } fn init_jvm( @@ -237,10 +240,14 @@ fn init_jvm( match aot_cache_file.to_str() { Some(p) => match aot_action { AotCacheAction::Use { .. } => { - init_args = init_args.option(format!("-XX:AOTCache={p}")) + init_args = init_args + .option(format!("-XX:AOTCache={p}")) + .option("-Xlog:aot*=error") } AotCacheAction::Record { .. } => { - init_args = init_args.option(format!("-XX:AOTCacheOutput={p}",)) + init_args = init_args + .option(format!("-XX:AOTCacheOutput={p}",)) + .option("-Xlog:aot*=error") } AotCacheAction::None => unreachable!(), }, @@ -284,8 +291,8 @@ fn exec_jvm(env: &mut Env, main_class: &str, args: &[String]) -> Result<(), Erro args.len(), JString::null() ))?; - for i in 0..args.len() { - let arg = l!(JString::new(env, args[i].clone()))?; + for (i, arg) in args.iter().enumerate() { + let arg = l!(JString::new(env, arg.clone()))?; l!(args_array.set_element(env, i, arg))?; } diff --git a/native/src/util.rs b/native/src/util.rs index 004e939..e1e03fa 100644 --- a/native/src/util.rs +++ b/native/src/util.rs @@ -1,15 +1,15 @@ -use std::io::Read; use crate::errors::{Error, ErrorLoc}; use crate::{err, generic, l}; use digest_io::IoWrapper; use sha2::{Digest, Sha256}; use std::ffi::OsString; use std::fs::File; +use std::io::Read; use std::path::Path; use std::thread::JoinHandle; +use zip::ZipArchive; use zip::read::ZipFile; use zip::result::ZipError; -use zip::ZipArchive; pub fn copy_owned(slice: &[S]) -> Vec { let mut res = Vec::with_capacity(slice.len()); @@ -82,10 +82,10 @@ pub fn extract_zip_entry( return Ok(()); } - if let Some(parent) = destination.parent() { - if !parent.exists() { - create_directory(parent).loc(l!())?; - } + if let Some(parent) = destination.parent() + && !parent.exists() + { + create_directory(parent).loc(l!())?; } let mut out_file = create_file(destination).loc(l!())?; @@ -110,6 +110,41 @@ impl JoinHandleRes for JoinHandle> { } } +pub struct ComposingIterator { + base: Box>, + layer: Option>>, +} + +impl ComposingIterator { + pub fn new(base: Box>) -> Self { + Self { base, layer: None } + } + + pub fn push_layer(&mut self, layer: Box>) { + self.layer = Some(layer); + } + + pub fn is_nested(&self) -> bool { + self.layer.is_some() + } +} + +impl Iterator for ComposingIterator { + type Item = I; + + fn next(&mut self) -> Option { + if let Some(layer) = &mut self.layer { + match layer.next() { + Some(n) => return Some(n), + None => self.layer = None, + } + } + self.base.next() + } +} + +// File operations + pub fn create_directory(path: &Path) -> Result<(), Error> { err! { std::fs::create_dir_all(path) @@ -119,7 +154,7 @@ pub fn create_directory(path: &Path) -> Result<(), Error> { pub fn write_file(path: &Path, data: &[u8]) -> Result<(), Error> { err! { - std::fs::write(&path, data) + std::fs::write(path, data) => format!("Failed to write file: {}", path.display()) } } @@ -145,7 +180,10 @@ pub fn open_zip(path: &Path) -> Result, Error> { } } -pub fn find_zip_entry<'a>(archive: &'a mut ZipArchive, name: &str) -> Result>, Error> { +pub fn find_zip_entry<'a>( + archive: &'a mut ZipArchive, + name: &str, +) -> Result>, Error> { let entry = archive.by_name(name); err! { match entry { @@ -157,7 +195,10 @@ pub fn find_zip_entry<'a>(archive: &'a mut ZipArchive, name: &str) -> Resu } } -pub fn require_zip_entry<'a>(archive: &'a mut ZipArchive, name: &str) -> Result, Error> { +pub fn require_zip_entry<'a>( + archive: &'a mut ZipArchive, + name: &str, +) -> Result, Error> { match find_zip_entry(archive, name)? { Some(entry) => Ok(entry), None => generic!("Failed to find entry in zip: {name}"), @@ -173,13 +214,12 @@ pub fn read_zip_entry(entry: &mut ZipFile) -> Result, Error> { Ok(data) } - pub fn read_zip_entry_text(entry: &mut ZipFile) -> Result { let data = l!(read_zip_entry(entry))?; - return err! { + err! { String::from_utf8(data) => format!("Invalid UTF-8 in {}", entry.name()) - }; + } } #[cfg(not(target_os = "windows"))] From 078675741200ac2e06edbbae3f8022014ffd67b1 Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Wed, 29 Jul 2026 21:19:44 -0500 Subject: [PATCH 13/14] Docs --- native/doc/aot_profile_cpu_util.png | Bin 0 -> 189810 bytes native/doc/aot_profile_jit_intensity.png | Bin 0 -> 296495 bytes native/doc/aot_profile_thread_time_cost.png | Bin 0 -> 115268 bytes readme.md | 167 +++++++++++++++++++- 4 files changed, 160 insertions(+), 7 deletions(-) create mode 100644 native/doc/aot_profile_cpu_util.png create mode 100644 native/doc/aot_profile_jit_intensity.png create mode 100644 native/doc/aot_profile_thread_time_cost.png diff --git a/native/doc/aot_profile_cpu_util.png b/native/doc/aot_profile_cpu_util.png new file mode 100644 index 0000000000000000000000000000000000000000..06e48d51cdeb5f180091be3f5e9299b5dd7c8de9 GIT binary patch literal 189810 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

iPk*u!e2lcm(vP{0OXX!d+5`x1IgzkF} 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 W-P;2%{2;{AIy?0>(|$Po^M3*vB2)+f literal 0 HcmV?d00001 diff --git a/native/doc/aot_profile_jit_intensity.png b/native/doc/aot_profile_jit_intensity.png new file mode 100644 index 0000000000000000000000000000000000000000..c40c52956fe7dc8852213b6e50f8b4fc15133cbc GIT binary patch literal 296495 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

lDV;SVJfd?U-97tQQp7Uce~M;7O87K}>VZ zIxy>;ebf2VIuofN@U77N%m!PgJQXCd6Mm{YNwkHXHCNMi?6SWXp~JPh9Vnp12~pRJ z#C&|_g*=23V%B>Qr1N0rbKQ|h7bPXhzxK*J>BT~uqZ zy?sy+?GszZ;cQA(cjiI-NH?%3F&9+YiMpI#Q!@suEf3NmzJ4~X3pkI| zeyXK>WyKxXITo3)-Pp1d4J+Fjg!l-W)n`>>X3OD&8I~}CTyr;vF+o7_eAhRk^`_Eu zERUEqqOwt=|0!6siT4+Fm2GBp-A$CC#FC;S#L5KBNJ5-IbEO^OcJ-1ISm`oCr^kvw zLbYzuaV$ee6b;ZVcVmn8jiJ~HL}-zi)qo|uC+G>z0$c@8jJ}7N_<*Rpt1D;?j=I^B z<^Gd>5b=~BBnQ67QaE9A`dCF5ByVdUex(s#7~B$uvm@>b7G|PKZ}ml^`g4AAZonP- z5UK7+?Kw?h8Ml`|Y%YaAp*Oq3GHH6n+;P(`hH$4S0(U`uvAg!ypDvtV>05i@Bylwq{2%bCIoLNU3BN52MW#GF)j%A~L z1bf?@^61#T1R@gHY=`?nKC>k7sKSUj@|8cq_vy%tPLpq03DLm?t!QtsYJtNj(RZ

1y9z{b}FnxsBv|bv`pBI7hGOF4|gHEl5!< zLqGN?o1TdYCzl%Q=s^k?6BEGq-loJ{gLw4v6RidTWl#j^P8NPWPeeutNR+59ez3Q) zL!{LDH0vVuo^6yT`Km$DasM=|h@ygmf}xD2P=c;*OSOz?#tT}?0`m-la;%{WmBIc@ z3w1mInSTG$K_m3=grqg8jkE?wUa<>V-FK{lSfvTGk4EMIL2oF~tj%e9dc7j9=sL;? zL?CbJ-Qe>gyreS8V}-yM3DCNIh#5IL7nq8TOXuF>u$7_SQ?8#c{EI&>uM8>rNU&7! z=luG3`KWmym4n3c_n^h?%^!!M88{yGUa1RkS9!LSnrtgCu1MTXZ6Qk?5PZJX&4D*k z!JkeBAaW>P@)E&1_sg@S`f}V!8C-p)Gmp3a0`ECUAzzXnj%(+hB9t*{i(u?VAMA^( z5{I>k7*YrkyKY+|hIGWgI9d$pEKXQECI%i^5jzw;qx<}oQ00i_11^Pqh%{Kw z@BiJ6`59uqp~>X~?($@V{_eD2a&*rDSxij1B>sr=ybRF?N?ja1QXk325DCkGO%4Kj zr!`vSBGllQqwYnn^(AH#@|)2g5Y1)XX$S{m07qmknj0X_fA&kvcvDBCRfJ3Vt~>U&ZwdX8L1z+H6kEfOX~3qMO6lwL&s zeKrCsEkVGlc3UFqCYNdbQ9r`&P<%b1%S)`}6wH}OnuKX{L6f(E1(mvv#rQ2tnDHk996e`DJT?v$El5e zQ;RKQL^XYKXWc?SfASlwIP@#A|L7tC?6vAi(<=cW&bqUK;${~)2E>UYUcNkEA?jaP zDD?e$^}g3Qnk4LGC%7=$AK`;?THxzKIIPlQtcw*k#~AV)m@( zMThU*LeP`W&Q2nEt`7qIL_XyAEtI{Wh}i0~Tl75KV6>GvvVOHA64~oE`p5PQzK*ozZOxA{C_UG@z6~8LW@iTYh>TM7tx`76Wp>RYhdVTkPo1g$Wxug)&4a0>n6!dC6JZk`6DMKD0B4~A+lb-f zu_fDxrEuE`zNoyvT?6^6f{5ZbG4G$>4^r-y`Qf^A0tJAC}p? zi$MiO13$h&$9ZYWvU4wuUe(stQh}vb0BSYT|F0i8c7?y>wcf*H$h%>N#>VU{Eajd= z5shP%!F!V>@t@(n_)qgutdTtlmf^iG?Ww>K$pFy=-Me?i8;MGTjKnrGCrjfG^Yyng zufP4ngJhZYJcjT8?e%|qljL*%>(x(Hh7|Lkub=tFt=DJS{`n6Ia{o8$_y6HXV{0g0 zPXGB~GzIE}GScPChu{F7b6(LwLSA2*=bX4Ntj;bs*;5-SZjQLRy2|)qiT+wvvc&5@ zbkqKAY}Jq*I|qlfT>SmFNX2yfeZ-$Uc@oD{&{b1_#-e=)G)~v})YlgSUJx+nZAHakVAZ|eL;qZ}n^iv>8^_5-3MDo+ zs<0r2w0Xki;%lNr(|-Sb1M|_N$4;G6IBVAUM^sb~^Zl6Mc$$Cy_=kGqj5fRJ&x%`b z;Vz6$o;|Ay@jm#Sae<+Y{@@{so04j3A>5}=`?aFcQ{%{bilcEBC+QcRSNUX}Sk~7@ zBQ!{T=iLkG>FF;zMrAhP(m&b>`1PFFzm4+8oYql?vhs4`yF#1AKDVHNdq4HIx>`j= zC1}sxyLUMb9lGg7KIYqbZ6>GhuV3*r+}p?J^gaj4z$Pj7a&bulnesy8_{P-G$|L{7h44G>c&6~=H&-{e2M~F# zYfjG0sNUYXPsRci8poXTe}%zyugZncuNl9TFm)TiwHx!r%brPNUU(g)+7ytYr+$V!#nsDiJ3wTi(9VO5LQV=WU?(BN)Tv>J)}kw4 zb-zz+X$>Vcb$m{b`(?-yd4PkVRwY<5a|~tO0Gw}xZcWB7ZhU@n*DySd{M#t@hR32oT*5&fsQ z{)aP>EUghr5&9gm_AqpK9=9h&hd>}RL@A#?|65{0=|1!;4WQ~`Ve=KoLf1n!NFWwe zx(%VfgN|-Lw*5<6M!aRwj9QM~1y=dUMtD;6{0{Qhr`SgE+m@eElaP=|w|QGx8Tk6+ zDSeEJo!_QgdEU_Qsa!bUJ@cC8RGlO^PJ`a?Lt{+@e<*<|D@*zuj0Wyt5YoW%H9@zK z5wr;|T{2OOsu;mEPZAcE>}tvKqz@?Jq#u6T^tIRi*I+ix3z_6}*!Pxh>8r5JIgPLX zrx4KYMPAn7+@7zE>2h&`lQ9WWZTPtJa)z-V^pGp1WZ?E*1&&wF*3Oi;mh$tk5;~?Kq>&5sux7AkWN!!oB_do1r#Chhr~-v32XNUA%tj z)_oFLpg7=gnao|92H&e9CieS~$V|{+OGCQtf0guwrKKb|&>#*a`9^`-OCVoB{jYL! zhvN9gHa-Z4GWO}ytKccL()DkXwL=+`3~U%`1Z|}fFGmla@YbUZ{msx@uPwWSj7UI7 zBF?}eBBBeIhKIN6FLrE;=)U&R(LEY8fOgjS>Fs^hbp0}>05VMR8Tuk`7P)4~TQpe+1^Q)gzaz|aT z%_>5pwK&}%Z1yLAhL zf+2$jIEb+jgOV}7cDYt`tq>zo$*^kC28d#6&X@tCwc#>W@7Wi<*Kb678kgsX`9z^7P9H;n1ff&jl4^%`MY z)#v~UzzmjdQi!MLiEDsFGaTmxEJ!M$jxNrPr;!ZM)6>%^dge^#n<)jH0M{OK9grP5 zGb3%vu#kluErLZ6K8xJKA~p}Ue?`gtM@D^VRMXPJTl?y9l_IDB2q8Z)!6y~T6gF17PTVBf{NHx5HPIqePuVlyO=*Po0Z1;Fib!20Ud1X$P1 zzEI-4K23+YH-$)ka`6pUp+I$Vj_xcvSoG^#ZbeadfvBe1ucvgq!gw|vz1 zE{5Sdbe3;aw@>4ca`5mp#|&g(zBeE8mCPLN*79Ph|5!VUKVB0G0X{^U33&Ru1Xgi6 z8ol>%Ohef+N1#Z_$OJVEsa(3`3A!N`V%;;4IcB)5dubCOMzo&)@+*&3cQWkCZ2bJ1 zz%S|w3V&b*AsUXZ&j^V|=w{Uv}vvK-yrf1NM$%Ii%h^oq4HZ>8w!T8K#;f;pQK z6fYpFC_;g2L~6E~DjaLil7?#A2tUXZ6t=g<8HwPIa23HYKgSSXu|}Uud-%I>{syWZ z7zM={i1Ut?@A_lo+Q<`ojaJQi1U5JqG(A8HfTzas@&-U&vBI;*Q9|CrafGJUk&D zS%zvsOYg=IGbC*txDD2 zh^hz*(L(|IXMl{U6;mA>Kfw`W=e*e;ovax~YT7eQRkXDk_r2+rtZx0rfiLX^GG8 zoK%}7J*dr#Cd%nJsfXT0iRyt&;@0;mizb6+8ZE=)<7uFGhd`m8X-9I6gTac*lsCHG z24Zd4)>@FXF|dtJeGJ;g0sQwLFJmB|xLhpLZH5L|C5ynI{}XXYuJxT|=Kbbp4#s0M|_w=Xa- z(5}aAZU_R*?MMUYMeW6I1$#Dc+&HubC&4sqVy2)ay#4%C(XqL&%&0@DmMn6ab8zO} z9p8|Mw4{f@ti(FBtBpzOClUT+zWY7ooGjZxIfP+XE4_H2lCm=B+LIRDg>5mBRi&k3 zBy6m$tx=2WAqE2$bB}fvsAHqGfM3WgLDEcATJv~Ejy#d`^P)1sZ(q#ma=7f}yVP!; z#&+n?OV2?Z8eB-oy!msaVgZ{^o^=B_XE5eUk=etPZj>eE8zDtWPbB{-ujvUcp@Bs9Q%SG~Jw&_Cuk>^mMRpMTBvB+U% zd08ec6ny7rgrDor{kQ&m59XtMeYfwR;V#Xrl0)XPhqz94;~Jd&-5zUhz}`yaVJxsL z+7TFo@FR1QuU@|^M_C<( z6w1H}H1?OsEE0}T3V3l2PEI)tojqg+`ui{s50F1}7X4Bb@Opf1mf_pIWS|EEnmT@n zv<2);Oy}u%EgO-#Ev9qYu3=!P1p6dBu%HdAIR-b9iT?(PxCtk>5oznJWv2!P%o;{> zdQy=w%z*H*f872)zP@Mn#RXOHS7~b0!)~;fW)5@e@1Y`^mZIqswxP?Mmvjz(pZT5@Z_>EYnUb@h(eKjV} zoBR9g`nfyrp2V2chk0_Vus;25*{v|l(+B=m1A+j+sq2V~i_?ta)V5$8MTgb^ex5k` zt6P=ez#(bYV`U~3xSvB(E8i}WEEbAkzjHN8waf$%ObpiU#e3V^zyA(wVvUC#weSd1XbG zi{b+lKjo2#dF2;3q<08hD*m;4%iq{F$?qiOG5d?PPZO&)n?La6&YWzUHB*V%OQ~21 zf7TD+YzE9~D=X{K;sxKkcW*cyjFKrHcS2gns`22luSg^a&88<8Huq^E$I~hQdcgr< zc)DzCY=iRq88TEC(q+lpOEB+yrqFG$13U)#JcP{+gm}o}tYZBhgBRmUSE}JGutY(t zM;h8XGXB;!1QD5=%XcId5j$jCn0x;G`Dr|>$rO(Q2wdfiBVDfVk72zqAHHCNq;3~^ z``mt?GOBtP5YTXNcM(GD5+naWra@*he?_4JLJVmb{6c-79llQlFnd{TA} zj|q9(qy`)6-h$O|gMRyBpA?L%$2rZ7b-9N1&#e;r;syM=%E$q*Ac~5zY^11s_?qPe z&0*Q%b6Q{jIFnW~eeSgBlJ>x+bxI9=G2trzqJxh`<98z&akt3hE>d4T2Ja~wA)tzl zOR2hjPP{4G;<9Rj!k?aa6im34UVMY8_bx^eZKjrAGTP4A4#*tYxn+wYy1uH4%^Nmc z#Q=xIL3;WW98TxbDa&+?X-JWIjdP2`X#{refj=yxvqn=!#+MC`fim{09fiW4^!~lV z5nc3q>D$y4!BKuj1J13lr>7^pI^UPKsF|X+al?iKqH0MX7sP9YrhF57Fc>X8+Wk<_ zF_n;!xj>(AR90nJ!L~?sV7`{|t}bQ+fXAyU z)>`7>QS4^BpWTn}VOx);X~+-yY(7a9)}?`<9S@yTb9CgIb(UA2-i zu3~dVJ!+EAq#}Tkw~SQ4iM$k*#6Vs51taASl3tU!Y-|1`3H8H=UqS=My9#oEJN=x1 z1pt^if?YVcx$CJ!;r&^d-GOEh&aACMBCK~`-y2*Kmn@#6a=;0J)na3J%lzhVcggzp zQb@L3?Gl$sNT&5xTd-gMekp7Krc}_@){YddtE*eYuRViN8)V=*z5!HWppZ~76T`C$ z`uh53pxug#i6x*FL8F`qWEk`O`Eza2i~a|>{H0}NsvWDLPCneqNXQRjIY${f(VWW2 zzl}Q;2|uSI0nx%%6WLHk1jd|2lO9>-)2ACUPs=zz%ow>X9Vk>)G#Jxp z)v28e@!KBsV)(i)rSGSoe%i;tU|H%=Q1p`iv9}pQpgrF{X%7xw0{Xy>4EHmfu7b;0 z&#fN1;)>v0m_shqq<6BtV&^~)_Cjlo%|%jH_FdL3+SP$~>%QrBnsiGB?R%rwi**_t6s-ktGHH?}d=ESU{7yuSm^H-t5spbUQK>A} zmO;>=nyLiD(+`n1_6#m_yU)(Q8h0q@YK-SAlVX0`#GiX;a7>ivkt~p0zhwt-=yL>y`_s6GnHZP~IVZvI(Ps*Q^;QWse;3GMeg6~xz*x+^?H zNw8aOWPl^o1kW|lnV6UeeA?Qou>u3b7toZED;Lh6pLF&3*Nz=0?j5w*zq#LDME=9z zVEpv7U0>Gy2M^frn?)LJ9`liBihez68o$lGGlZq>G&AF>HK^f#zZA4cM+o=B&v;b8 z?{z#jpDuNwJKMT_d-Yr{@&Frv$IiPkZw5I>T0sHGdwF@0s+QOVxQ@I=aO}~yW?2A8 zY6O$uNfFVoqz?)j*F*<_Nchq5lua4xfN*bKb#a4|AJeG6K-B7h`~%hLty9IU8`Y=2CN)x|8wv+f^FKFiS2_q1P#{m6>mI)vEMo^ z1HRiwktH{8QfQ_G{rPD@zz`^lpIW+&I=PKn8q(|sCF|X5f9@n2BvH}+kH)Cbj@xQX z)e$_QTiAM)kd{nLOp_yPu#bj$3&J$8hji_T;@go)$2Nunmn)+;B3czXG%3v9WMGyp z9;tfp3jxd+ag>2{)l>pMk9NT3&6^+fzIk)03kL48hb3G0v1`}Q-Hor+ME#YqM&V1W zxd<+W4EqnGu?sp1sAq~EbfH*xQaM&?pK>_5BCDQd??jvZ9iLoNz0L8&le|>oJQkbHN5bfo&tK9mQY}s{`WqK`$z-NciM8ZRCUGwISw) zzm=SuOwTBl&T&Lp)QSa7gugzG0l5Y$MghBHweF=dTeSq(B^mv7$x_DLXa& z7H!B4gh>ZQN@(dOG$UoDrD)vZgWtS)qg{3mYR9QE(##+ozuTceAs>~2bw{EVmz0#m z0=#$*T4QV|&<^)83@cePNQk47JXRNwAsZ37h+ujDj?{E@7p#|@&rdR(w zj9{OEKbQrqz_Tc!2S(3kD?AHEim*B5V}1`FJXi$LGL2c2{R^&g@uyqHE`lGxIf|TX zi?U_S1c^8`aQ{28;k4W3#@lHKp8tORoDR_Oit6s2I|FSeMMS!(3Ni|y@Nr0uF5)*n zV^fX`YbT={Nj<37mh8q_#jbhv4GaEK=PF-^qj9dEU%~Z(#??!V0zuGIy>C!mB{Vd= zpd}e?|APmqYh3+69*-jL;zFohLL*44D?0&eWn6A9U(Wi2Gk&ZndQ5m8kadX`cuLM-8UYT8Lk&so1}2$=ut5YB60OX$#O#_?cA{O*e+WKT>Yco!mY2R z+6f@S1jB1jc}Uv;=XtKKNXaqR+#$_1Wm6F~!!{*bL%9XsJ0-xq>Q9JFh<07LTjdU78y| z*(3y0ow0Ws#>0h{h;$O?gf_uQNk%Esc`=+Mq_}z5BH8Xw4Ri`$?Jf1P9JM1O!Vi1F zm~im(=e_S!OVdpu+;@6tXea~xe0!@%`iaX0RR`Jl{JnA#U^0Tfq$9?rsYbfJe*Ky} zDeqxBjDBRmFVDV)P%K0B;(!Dam(jD6iNyd{H?STldL`YS!>Afxzh3Wl`gdL$`R7J* zS`Y%kbh95=H|Nf?g!_fmN~=VoKI)uUzaeX#M29VJJOl%#<4e9Zc7fN z$j4=qNq6;+x{7Vrc-$~v5|@nwLG3IA9uls@2kkcd8I9%|mE{xR1BlCpC6zqrl5?M& z1<*WUQXpRX@gy}pL+Joh^ZJOM9+v+uTh4N~$3)5CeMoUoo;^7Ve#}$)`R};;!;_jw z;Uqk5nN}3M=cMN_kyS||Tfrzy6!yp{pA#R82gO`MMRR7LJ9sb|%hl>hzw<8f;o(X? zfBpDc!sW(|{NlA$7yGeJP15-wn7}(f13b>R^TT5*8(|iHhKxOoL0a;lOCkzz2zM<< z+@GI!a>K+5p+l#U0}hPBd*2MxbkO)bEY}|PP^f88_Z81kO>^qalbu4k|+G15%)=qN&nHLm1(mPD3C1fZFD0el?B~x{u{(00EV;6H(Fg&H9Zz?~1Bos-xSYRq=~D4+htx_1m28i2~bJJexk^g22vUy@f)A+b=RoBF>PdlPsn*X|8?H=U-F zQldm0Ng^7gLWR;Gks-;H(;y+r91*2Kgd)ilDVb?76P+@oGL)%|Wyq|A$oO4rH#z71 zf8X!hzw_(u&9?XR+|PZl;abq?yzWztcJ3{FNoO-es;HP$*- z&t|PZ2AC=h#g6O#{)i5Mi6X3GV`aUK09sf~ObyP;Hd7kyOj~e8OKBZS?6Ynz%#P8+*U25UTNAS8^YVgQd{&G}+ ziq1&b$anK2A^7&u7aV-GwR%d$iL%1n4k5y0^CdwS4*VR98Jj&1=EF7y-5sMOa3Y*_TFn zB759R3QQkmQ!g|#XaB2-7+ZAADL^HJ(;yg9Xt)}nV0}mxjd7F~>n&i4WmF{>x%3F% zd@B7tD*DWybj7Q6d>X|_2Jwpo9E`wLh9Y9S>S{%6+}&#=cT`mceyt6{p9TuIce89f zQ&Ci8V$1NnX=sr8Qtc4Qi~hh8@WSJ8J!)h?z*G0RdNl-oH%QvCwuJ*e6Om997Pze< zKDf$u{|fe5zxa`S3zCzSA(Wa9329Ur9{AmH#a7c>=xp-UrEpK_Z(Y03XuVhJ z#NV_@BCdgD$@UyR4~3q4Nn~njYlls28#_T^LE$Zj^I27uHd4MRUnOk10^x8Bva#=} z$acBe`|4HROV2*20t?e4&fm+I(b@4!;3F-~eIK+?C1Yj*0mTQ}*!h0C57Xn5|(C&W6^qM$4fQ4o_&wD|n^NnAL>Q+Mg zF62bjqV+^gA1vmJ2hs-RW% zjEu}R&*c3pOdW2eRMk~grSA{cSgP5pqH3{E=SQ-<*skR-d8%Ysets`2j;_;Ey{!OY z!XBOxe93(h_6~v#dyN`6!WI;JcO?>sq~#R6|GF8@Ab9kFyVNtGbK>_x=BYW_b{`!6 zZS)xLFM{n80Tb)Rf9ct6P^SXq&*lNCDgzLGWdPkgLMJQ4hridDo_MFI4jjJoFR#XM zY6ss9jo3?;+>)@khcxNtf>YNCNpPlrH;91kAQ-k7A3fRh^G7$j?4-lJzx{{f`TeJhpEYrx4fJ}JYyY1+vc)!X>cF`NU&0i$asBLD zT?h0|=zaWie31cHNEpu({k%gDh(p9S$ybc1i~_*&5pL|B%+UEW>CcLxw2YVEcMkJO z{$^?FXsuwMIYn0HYog@$cy3zyq8!;I%a0^^H135^LR17X!XWB3^Lcnyq6`fh3VBK} zNJJ`{ac{oUrT)9LjDBUV^K;QwFc*nOoLue+DV0Wgh+8#zGjeUr;QZ3t3AFrq>T1sp*is_#*_WK%s2&08~5ZXRD3pcK5>BpYVX$J28*c((fg z#0EKI3;vI90bke_i1!a3;!0FY1pe?9adm!g2GgV4W`iIWA%Z-W1{0yvrwz~UgFKST z$EYwiJiu490`{ta24Vdd+ZTg6PjZfaXB#eInK7eY+KdtMs`mVHmWe-Va=5{twIc>Y zgGhun#2B9JEAHy7%ttsc3cAUjZl0bM$RBo_fLChM`W7`SKUXUl%3iVsXiF7ScQ^y+ z#nr_{8IFO!6%jSF8jPBJs(p~YttjqGV$4|lj^*ILcczm9dycFiD~W_$^H@Yc<_1At zUKyaZU^yTRBu3V~24)(9yfk&N7P3E7vxh?kwUA%_4Jayii0}YehTaH^3E)q2{m;%= zujw~YXE$nfYjOxV!*$QtWC~}*%-wC-+jXD_uvIZ|!|PJQ+mVZXzhJ-rSY>Px(5!XV zB6L)zTCWK@C@(Bd1`UFu#_jOR`c!hguz3BE=W}#zn|!uo8pu8hQV$oxO!H#1|9flE zsr?Xo8RhkyA9eQwEoPt*i09z`i84N8Qz4QS(tJJ{<3@|fcvqtP$@qV+3p?M9UqnO^ z^0q#aCJ*tFuN1KJ{ zMS>`ae^0C+z%v|nfdxlP0G8}FL1t$5En|I+r8k1?#*-WPk3Vj_Nd5Y$E*`?kMo9g^%JTH!kv0vis;koj2UG)62xX{~^tG1c zHGK-Wwdr*EK%9|b6vCGWc{}&)S^40Q;E5BTUUo^P5_tiv*`@N>jb)$+DRk;kt zGZg&h}xr8u)CpDLkaR@l=56%UDpim3EV(o zXeo#l2SmR}0SW@Y8}wx4$VA9;+eFVH9+uCqa_iQu;()pdyaL5q12_P9#YFukg8})* zTf}5&IGqH#BnE8UL2vxb8pp8_+gs7*O)sF)Yu=jX zq^mnHiQ$^xdcC7Hu0MRkwEuPP*Y9JywnC-{c~#Jt6@O6Dxfa$8^fx`|Kaqawl{{j% zVk-L z92=#&9~G7{X`u~eGB5ssf_oG*!)el_kvI#~T?(4o!CJooz`h>Ie+2H3qtkW)YGSo# zhD;8e5`6eZP;1f)Vfd+gR4W3_;$|gkiS=K)CESc%RYd|H&B-sT4|%iEHysolq{Z*c zS97pm<^U5zaMR<@D|xkJ_d$=g$*2hJN@#@Ap1BLALk+@%)Dup0u$x*!I@*R@MCFL;j6h zl;Yy#Pu+TcIq=7Sk^B}AfK&tGEo<&A<|q94oYp{e?d=63p{6Zs{O=zX1kTX* z{k+k3pAy=CQgUbNg=F5(eHESZGRXd6(H?7%rQh~tgH5rtf+ItrUh8>&Um%o9?2!1q z5Zs(E+zgHWp&@XRG>P>OWs;*h6;Ooi1-yKExThDg;sNzlrs;}=X>{9B&6K1&_;g=_ z7S@YM#(y!jo4fPfJZGM$6^jz(V^jb_Kr}Q)wbF|pc_*xpAxt_VuH_F-e|kD3tGRiP zM6j4fZsVpc-!?nycW+FU{Frm8}k7P{T@_-8xs;++|mUH2l!* z4b$|Eu$Atmz_bx4@-iffx(KvtUQnOH+q{CnWYIh&Xd$uSw$}#_IG?Y;P{4o03 zqUMdhmb)(Xq$rJl8sDGE|Hq$cyh9wHR@w)P0CQuxw4`DI$6|}-nW;!-ZO=qj1lgvZ zG?Bk7U$SbIxwf*=CgpwV^HUKninm||`VqMz<$>AIK0C!{Z z(<>mW0m(rXz&q|qApR4MZ7RLz(rlhW^}W47HCx~{1bZtVHj|7cRZPLD4tntHH2`{X z`+<{yj?%Nc9>03^YGZu#+TidGY+{9?g`Zeo^o(p06MMA#R`}D}MK4Nv8efbQJ+`rJ zgjc>|T!30zzxewuyOoG-IcA==3w?DrJe)>u+*@a3Jg5%RaCGU?rGA-NE95aDs+isZBu@x@K;S{7VM6f= z;N|(>7F%!N8pQGIgWhvA;yt2@A}FP22`r}_G3Y)BQTEo2jV8<4a6G8$Br-bTxKy42 zQlvud0Tpqvu+@eL(e)36;Q1vW^C5~A3DwiIDtu_vE*~KZl&A(lLJm20Sq(bEU<75D87wU2n7$VVQllDmct!4?ol>e9*ws-rnQbc`5OMgIbfJt4_`1HF#iDK)X#zmD zcs|mKwe31}-OtbP`1&8{(Kj z+&-Vi#H(uW8mTXdTl!4(u^~K%((pYzp09|ELF67*J+MLtK_BENgq)t5nFyXO#`x@y zt1vlJ@nsB+={NWG`K|n%9G%``dOJXI`nd(#^Hxvf^mQ`UF_T?mC%cV}XLWAC&Fojl za>dubZuB3B5YyaUd}Wv1+Ilaii>#OZue!|?T0MznfyxA*Z8Fz_y6#1#f8z0&?`mpS z7qU6HIdWN_lvUxkvTy2E6>gCyva$xt;_K1)@#?sOfcFE4i3?nCZcDp|uxJy>RlQ0A zdPE~JW2Mj4-RwUA<>!Zz$s`nlzOZW3_>zjuuZcG?&*`W=D8sps0;?2|-b2$j0Ss@K z%Qk=lG>z<_8FDn(hD7JuHYEX>WD2Unk8mcg1E<6lBvvW#rEbyGojc`WG?xysS`Kzr zS*Wocn)>TWwUEH!+QTnjykKe>L2CVhN`)nf!hkF1)o1(WZAB{yjJC(6iy{y$eZLwf z$_!zmmPm-{Gy?DmN%6~|+t;liIqC5#xG7|Ee zTS3N-on3N|z=O6;20LDr?WKi*v|>UF7bqnvIy%)I4ef(@rWR-Xk{czC>&dLYH(;&k zuBNHE5XZVeXxd|?xP0+cfr?U=iiAu<5sP_ck=v#B#Csc8&X13b^S>Kbl;7Uyuj6fO zu1IgZ=Mkfj@#9yR|7?^mzI5(o_6q(3%PM}qFELj6`#lDplA<7iJXshjL;KAe-2qoS@( z{hBW;Gl3$c47No#z!G|*(wU`Mk#MTJegkGWP?6<@R>{++Pa`5Co>$tS`Ie~;Ny=q0 zj|z>v`{E)aFM~&D7JfD!8+>P&s-`R{%Q0uBQRNJCC?=6)@gL2OAdJ(%wU|e*pN3CJ z+0zUn%xnlmvRbW6IMy~)*Id$NrFdD6Pi&7vk9c#|KUUY}WTZ%Fbl;&kWDf;{f4_Sm zUXSamYqVIQofK1RVV$j0?6+4#V+U^UV|gIkN=CuesAKh`P33>0Lg0jkWMyv#BSOK6 zr4Ov+&Fwa_Yy7GWm-&0_Q&C|h@xP;iJNZd!S##((54)=iNl4x)8UxAXs5^>FE&FV1 z0kg!H)ifd%`ux%OoTVf;+K*geZKbe#5t7Hbpu1EKVAk=PG;x{^LPPK#W;Sc<>T=f& zmqI32?LrM}rD^GkX|c#-@mg56w{QJ~ng&N&EGm5T$^we|bE z7~i@8c=4g@zP>vUVUYkXlz#3GR5x$-l@P#CG$dk+I@XlxXy{t0?^`8!ZD%&@0CVmo z9;x8Um7a*+bKqs_QF`-$lhXg{02!mRb;Dw}&Ml#4T4kV0ED!yVtM?m6ZMIdc>e^N0v1P|=qi%M%u zUP-9506Xj1qjR&+`V$rGCqQcAF;HeA=|>t`NFvpmo;Hy9qE8DCG~dOAiD;yB?lN$< zsu*su9>mV5{$V_LPk3T6QIyvNg`$R0$&nKO4nUj% z_KJ8+Gys8gh{_w#W?`UXp1+hiKn`PXyjxw=VUhHPDk}~lp23XRIwRwaKxJaCs-a-n zfGHSmD4j|eXUXxgVuk;%M#sAuB(ZWqS`e#C9xaPMGoR#&K)!Ma@3HSsuX9IVz|q{P zTqk8nBn^C8I_jiqgoJAKvEmR&UrJHAXSMynXT+{sV;MXhrstiHSzs#bWiZ%;jjN#F zR(3Qf8c`GQ&WBnhnO|NA)7!UmOJgcwOt~Xy2O9Pt#e!Qu14Zy(%<|@^DuL6who*+v zx;r#4eeEsqT{38Y(AVw->A7WqHmg~c+3kM9vaLD&F?agpZT4SkUdP)v36rqfw(Mn& zf}@a5bS2^9S__b^)5?=NrIHd#J({D8Gj&yPqW1kAy&UnIk{o_cpFX@J4oFkGm3p^Y1Lv};?A^o{Ut1pdKbNh zd>0K(TvQ#8tpPf9d5pqlzy-^ck-%q;W#C{&3!G1=D0Or4N0YIix}yG*k;7 zvWl9T_d-3uukJHGjKq)iWz}C-Q|fjLsJV4=j!9H#C?CZLF(w6_oV}5V5z@=2zWAEe zvS{#gR=`HyTVl?Pl02h zHS&#r?&S@jGpuQ#MzGg)Dx=U;Xb4S7Nl_VsSiB_2xjqZ29p2Qs;vP3)NtzA!tX0#{ zCiy5Apmvl+7V>5BA@LCuSGz7bG4GR_-!*ge5T@#2Xsd{1Gc7xEujf|~0dj&HapH3d z&Df3J&|VT=q*PUC1&b-;p|E~+hnm`a6`v&2A68Q)eGngu?6$C=@~e07Fn{Ji&Pwab z=8VIq4h|_TmD(lXZ3cM2z$5@(>~V9vFk4w^$PNeGu)(Z@;_67pFWiHPfw4NH9=r6#j{W%$Ik0ROF|HZ_7?yDv6`+ggaV+ z=amG!yPbK4d5x=VGJAsFCK#$c=GiDEuo-!H?jI!&JDJa2b-tpsK4dlJT9SX@Y?rZi1P`PeF)Z5h?dr8O|ecIM(V_&&7Hz$tpRGf(9E>f?sPY-qc z=Ia zgA;DRT~&Ir7*?w?bfmc;prXFwBx)imnwowKd7y0l08w5{6_FW|;RKJG(r{wHWpZ$y zO0C|kHr8AUjeN{)VK;|=}MvI#ZW2z6Vv6z z&LD=SgL9cW`zje#q({t%79q911feYp`cnjFpO)=^EDj%%`o*&~BOol3HM5 zC%Aa-pm$oeDXo*T9-*ORq`BO;*aCvm+o9lbl-exvcreZ}sH+ZRH?*q!IeR0DJen(Y zpUQTIMY_*Iyz?-()iUj$!vNelz)iR3vVME8n>Hdz=kG_&1)~PG7isJDoZ|*UF9MJI z`fhtA=&uiRQK&KLu8hM-TH|39`{Yo_D33+zVo{Yjqy{s-CK&`ZgOQ9*sNrso>euqO z7`dOm{Ql$wAN1z$P*+z!I{dEa%sM4R%jLEW>}=V18z(r3#|36>!jR{;fNBpTj5EW8 zV>!NS%pr{@AQT-l`z28DTzWGq*g>YE4BkuP%UZnS?*BSe0YlGtMwQ!Vhw(r@kEY=L z;k=GJ67q!9h8<%9_Kk7r1LzzcB-z5kE6bpgPm=(GhRVxwj)GNVhM~|&FRXxfMEvvZ zZK_=*os}iDpyTa2b1;Ns{r{vfoHRR~gh~xm!|_&{T-Mcl6WM$o zMdB_?JX#U}sYnQwT`81Z{(<+$76>r`{v?Iy(z|bJ18O)6(DY~tdDB=m>3(1u{SX?- zeRT@^i}ZWf3bCy=Z+sqevY6(C0wI45Srx6JuMqgA;XSC+ygWXHL1^rH-(F~FHA#-P zXN?LQ+aqVRJ#0M}KXwByzfyQXDPlE}*bRjKJFO0>qZ(T+adjEMkT-6S8;_M|C{CZ- z*>SUcnxe_r>A(0w!5~LOtYujUW}jA-^)QQ_v5qt|OqmCM?=F(i*37z!)~>p?9@2)U zK_GQQwf%>n7opkuu5+n(KIuzVgDO{`q>$W9hrvjRgZEce;n>VgFZnXRJ+wOZN&M4! z`t`BiJ!9AB+d~jhW+Mo95AaZ}2lXFg*x938s)1s_ZnS1|R8*8J-1Vxs)Q|p>JT%mf z1{368A-BCR^&+Xm_FU>r4t6X2KqEBJthQ7Pgxp7m(J)C#>H7y@mK%M|sJc|^e|k4I zx|aP23OEhUm;+{Og@6T0W6OX! z)zU!RdIX=B(F>mkDsbq%djg2F;x{y2-C9qxHK|$2*MFvDhx6?a-u9J?N`3ZC4Vg7< z>RD*5DT6T*AO~Sr zIf5=aD`Au!HU}y?hoA@W01`q8#|mk2jCE91=jsi<@y(ExI*S!UyuNHr19mv&Zg#DFGUX|Wnc9yZgMgiouk~p|5#pSo{5gEq)x_;fo}6%j zHWbRq8P-9MDEP)$iR>vHI`_2;rgV;e8a(o_Fe#jo@ZkE%Ip6P$;q?7RgP!5Cm_P(f zra_X=jT^bNr9pK|&labAlo^wSk z?lG#AJLKf7tgJA+eYGi=zen|+!OzrVFzNG303g2GR8+35H(Yif27W($;8A-(Gt4B& z(-BaP*4i-?YYsskL9x>DG?=BQ+$!GRf5ze_s+*RL&%v-C$^~|X`Lk6TURenhW`ys) z-~4XDCm|r&$v@X!5~S)rKN;4JxVblQv?b44+Ln0APoMgeJQ8b+pVPb$1FLs}qM{zC z5+?7u8M3JquNh^ezKcw%uCdA^=o|^)HV2}O-}bzKAY*~=^Q zF3Z_BOVxD?bn?>>iWoDsi3v0dlM+x7f9eQ0-kV8}lVqdCL^0@fiRZ?LImY*4lCv>( z&u8HY;0}-udDmvFtEI)MH}F(ivXTy0;!~x*cbU)Tb;O-V#V(LwiAO_DbwD)*I4-f}QOh>$$M+JIYg*9}EU!@;Ikw4`!I7 zoKhU&0JRD(Xtd;CDUxiDX+eG-9rFx6*adC0? zS`KUdryvy+FTCsjT4Luf64|k(a9*pCt&*_unyR^%p|h#Ha2Mnla_0Ib0SL`W-5fi(q(y=v$nYR*Edn1N zb)p(^B^VQ=Y9oT4gRafzxBF-=<`V}W0%$sGaX(^q@yPa~LVLJ+Ge9xxQtDvi8m3AQ z$d)Hzs(O2D5)0g&8wG`8qgXsn63u;7s9sl;ukWkNj)c;Wly4gFUSsFx3>;UQzt(qA zKY1C~WSJWXzkxUuRaf#oo+ZQWKd+aSWearSLZItd3Nl&S+z=lfWD7JUA;tu5zyh^$&Zq#f6DBQ z{IVQ8x0?4luqY?VC(sbochr}VjY5D{Y{|^n!x*~dg4uR|iQ$ty8vxcsB&(5bRYSDi zh*9*WOU&sB$ZLWw8j)@bw_r)!TniQ`#^5nP%DMz~0RP_xQw{RCvfx zgcQ%>nh>fL&EO|kRfL7dom*;M^wyX7KZ`J;$pw|?iqtW(A_UmA@%4_4){VKry(64o z!bE!)KJQkGV+l!4U z9c;iZeR+ikDs!jMM$|wvwi*z%dBENeV3}!9ICGRS>Jal;SqVDeLT|@v)T56UkcrQw zm=(#AD?mds5esS34$X#Cffu1Wpi$kpe7$U(yhr67=)f@Sv!am{%%O27Fpa{GIrs

*<=plJ5KRW99aW7H`nOz;<7B3O>Y|NYL*^D zDXv-i#Mf?$yx_LOx5j^m{*)ITIX-LR!nG;AnM9u^yC({w5-L@?7 z)HYkO` zi6#izW6is`i^LFP{NeeHB1CY@uf$_Y0A{nkZAk@{Au9z{h(p*{=_ad=*_dO<9gRbL z9Z@kr`;HP)RQJm3ZKZqsin38KV51?Y&O?7yE)sq z*t+G{->1wQKw!=LOd6_1(?QVf+2;PjbPrTn87+T~17dap;9C-;l>8zUVyTM~_u&7E zk*Lo;zabn*Pwf9!DbU%Y5#IYG`hmkTL07~>E-qAxAxLc2Ek_J%aYOK)n>99+MURAh z8Z+)d&Eqg0B``rKsr52bbNZ+aoe3rNI9DgklJBJ9HkPzoneLu*N4yhQp=SJP1r#N= zKMqfJ+_QE&`dG_*b_;m-bp-?e8yk!t<0N}d-$p?jnq??OZ9z=b+gY_fvo~yI4qYW$ zrmI`+*7n+!S}9Uh1=wab5FwI{UX9#}095iX=!;l{matHTrRfKxgqANi{A!#C z3!O*jl7<@+_)N!+5S4l)Uaph^BiE(LF)9cJ=-wu=Y~W>)XuL{+>mj%~cmD>l;BUJ( zVn241!ZhV;6!)X8QWCm1p~%^pO6Vk1jxJL3j|QzJwu^d3&+4ii0C4QC?^ILw^uo+X zn^$o_C>|uehpS3e4;)wwr2WMeq&;sV9AhRFZ%OW2q>_5u5ChZovkjB?OMUlB3>l`A zx~X3n!&Jibu_uY ze&psy%SFF=l-9z`7~pkOG+$Jb_()2^$)5-YgV8AYfp*lf))z+?!(V6d@JuJ$nFqdQ?Q0&D~Sk57^O75gz51^o1J+={<~4hG}cy@?8pCtr!rkEmDk zFr#w+t_{<0!&DQY8;$^dm{S-8Q+Sn!xmRD}+n#&vIV+f2mfh;;sW(^RlA?oH*-AQYh0JiwMt9_7_6G6l2d|N3`E`m7JU z%v=9>(fRj*VmRq&{5_rV_JEL&D@vS4bKzz@j;t{}$f#6(^h|bsIm^FlI1HyiH5644 zPWhRkMSy>=4C5|Q?}}7h66dWgUc!DhR}&xGxaJyJcYU6%IEy|Q@nPCt?BRS zak%7KEx?Hmaqifq+)i(N%4h#vdxrT0bW+sW;9$|Nb^7$)$4>vjnu%)%6eJ z4){cO??}A)*NTOh!f?Yr1SiI3RF4(?$!JW1qd4jgl^QF;i?t$_ zPT={K@|r97AWv)HsAwu zVa`|l$++r`|J@gDah0yR*nIh~4?YHRFiRAwen^|PNd_ftz^BWHmpnl78v#;e@`1|v z^H14MV1(Qm%TalK?lAM(Xkq?t2I=Y!uw+EM*J*}d66VF4q3@h>C4TSxo&3X(Z5h_w zh_F$b^jQc^oM8Qq-p6=ghhWGEtcZwC<~_NtOoZ$pKf(r6=mzSZ=;mqkUMV9I49s9Dr%S$U3e z|K+?tLc;*}(3pkf7EU(Szml-2xJ6=rNw%5@`|ZvJOM4L#u*3yexON0Ncss9Gexs>{ zBAsfP9SZ7e$KG0A=$rI?H-)IsF-G){`Q!6{f{HjZ*j;Xu7#&G;{ixAl_mhoHR~Kwi z`)-Ba{IVwr!APX27}bH`4XMLC+&Q9D6KuH}C9EIVzzFcFV&m1Aw#fgN!QpN!S@}|6 z?sT^ajQehLX|+)>SfQJ?R!me_*zM`lEeK-w85!}ZHWf&3UdnYI`8QdLpN1n%PIrqa zi~_F$vS$d9A90^>Y^!>tON8NQ_kY(D&+CC;IB&o^*wV zeYgc+;^(*19fVl#L-CIwxZ!5UQ3FB=2@@6wz5^a6v$BW;q5<&e6(9rq_cNSy)pz~p z1}gL6=NdrxaYfFXjdo=%%Q!G#nInY3`qu+$B@9yNBC3)$Aihj0W-!wIEp2Cd#wT3- zbuCw)&Aky~vI&J0LXv67SvAP~A}oJ&wt!OOK{I(N0Y%2pjTS3yOI(S(!m~{xvpB}t z^tD0GmCq3;GypUKKk;aXWiWyvCKiQE(;Xbjw?GF%5kCS5sJS;aH9bILKrsb{ zjs(OJN8osEhD5s#Hf1+B%y}qoa#ILLaGn_y)a?Fpy63oxjZF?L$49x0gxl8(WkYZl z;hN|y(uNBWJ=T{kKnqR32}E=*vw#AtD{xDMPst^Dx0)~|>|hGiGsw8N?v8m9!< zCl6@Zy!F*5w?`|dkYS=aqa9}s+b$Q6AK5m=fe>W{nQb>5Ldub0yCDt<~CN|!^cy80>b1rR` zBSUvB|AQIO(@ovAA;QP%;@`>!XEw_;Yv2t14D1$w#lrqaNbFj+j^%Bv5Bly5_P>^x z_HT#Ju)2KVFN4duWLbAFEbrm1`0c zghFBwXs*WzsjG}NxVLg$kGt>jYZ0&BIqzKg4y7a}pX>_cE_kFdy2&QZ5yd2$ZHw_N zfr%rOLlAeQn+9d#-Rw|pNlL+q55D`|&iyJpU<2lCMglLde1bc$ z>(7FgfzcG_q<%oH*;9Z-Zk$w>(nbmE<0w)PxUVkD zI+z_fp+3*7IgT`G4d^5n&7mT!J2L#1zwL2A>STqrzF*b0zz8k|R?|yF%1Qyj&?LCJoyl98 zc|Y*}y5Q%UsDd3Q5O(MixAj}4{?h=^4nYCHubYw*q)qvi;ow}wL5<|qDZshx3mAWE zcnigkb<^Uhj0{ct9k9z33f-UFN#gH*L%>HWl==gZeV3m?fz+xi*`fb7;7YB(LvqGN z?>nv3<*cGc9lW*$Pd?w~J@^0Rlmrpo%fb=3*W1=JRW=jQi>*NDi&d8f7~ZK_(9fRv zXTpAXe8Qh56ffp1=?)J``Ec@T;eUhu2nAjnM}ZZxL-ZLRq3RZ3lU7H>v{xg*ddGFw`5sxJj8fMkjR*qW%WZS?vGh*}M^CjI#F< z=%tv4FvI%j#$(02GwCx8?>Fo@Aa};sW#X@l1@!ndT-|-dB=qzHtUAzCq(5N-!&-lq z)v!GKj>abOY6-#LVLAfNsPl*}oLIc#BF4J+Y?YP&&xesWF@_xT#$bYTu~M1b-msWuzuwcxG%ziKtzQOt#u5$}hjX9T zG8g^zhJ-u3+bJ1WE`kuPqFwsjxuyg;+KZ{Ef`$sxfEV zSGCX5A3}~CmYk~opQqE=;psSh_~R%|*Q2@0pgC$S03>nUh__g+`26@PI#j=LGo8q9 z_5FsZdGhZ$#jQk2>YCef zq%#w2Q8d?_6H*e1baqfz9hsO4qjFc;wIJs&Gx@%JSz;9B?`5 zT+t`B4r10bCo-YAYzGjP!ze4O(>%G2L|zWV0j z@{w1V(fII{j^7lJIbV&&yOs;qc4huIg32PyHcsYQWm_yT@*1fr@B#i~0@jnqcu#Zv! zY!?ih2uhU(V+5>euWb{sHzN0Sab5q{*;b+Nfde_xrH4p|eKLbrBTSgHHaz4rPrvv0 zj5~4q)Wkkyn&p`MiEl4Qkn{f>CmAJ*QV=p1o_8iEgY5qPwh59x zh}8F^wc#kF5uYHwq7-1uDj!`m2vvZEWocx^VO*$FAxV}9wR^1~GU<{!Wh z_7u~*uK;F*nr0}xDT#4YMF2uH^V$EvzPT&h=9m!~`lGQ*kb-&;daN3saqFBASnvI_2_8C!RBO~izlL?w?(C;E}r#5GPL)g?yn=oo5zpp zDZ|of?gwn0vJS3Oa*HG2yz~eHZ@N}h(qPm z@Hognyd$3XKuPc@8>*V7<%eP8s73@qFqII)oOn#E+B) zUg45hL&f17sKRL3Zz9s;{Y45s>y;xv&G}&pU*!yu@>B zSy_Q@5Pn2-n|i<)?&PQy{qMkDWkQNB4+PZ2wnQv%Q&DtA^Sph=aFpRSTgwgmWO>J%kAG0R;A_sfw5>-6)gg5nv%L zoh9Ex)OpQ=L9p`_bJKgf5zS;%nGLa&*-MdRInXE83}F_)Cg^BaDoJrz4ouz3#|lir zPn++VG$n0y{R2AayhDnbeq4?cA zK9)rWCclnPNRU;d&DWfUW8&B@W>79PI429@G|Jh2+ow3=d`q^3F#m%2=R8NAO0u$| z9-pK141b}*x(@p6{LJ90?U4|CvLue--OQ_d?iM zb_0}_sTpaGOj7XX=? z2wjlFqYfzaMV$&eBYdnXK~plhKUv3-B73jPi1ozM%UQ6cl`Z zB^Xb8189j969GI5^xL;KV~?(E$dO4O zLIBnN+8tN1I9l&0WCS6}&09%wx$zJ*3+hqgCp?s}^!iXYQCAcymeJr1>X5oq_!woT zQ`ol+z!7{aSa{ zI#-U2v)bG4OgvXTgYVq2HGcVx{W~fmS)YrgUOnH~Cz)sQ<<-Wbe!u?y*PkbRYkaf{ z0?-#l^EZKDz@E2*+X}5A1mkAH0OW!|PUt={z#y1#1T~OsAa4smJ1_)QKBaMpJfMo+ zSaMdc7Jy9*ToCy-NURjlk5x9B8X37#qh{5oDU9CLVQZ)A@BSUMGrYn~WSgZxCu4GM zs3ijjW`v00Zv6l_xU;?$oM867$jJfCcnfmIVRCW!^ljLX80@l=bJ3y(R4!aV*Crw4 zdJ0(Au3w*Q_X)J?JP=hH;NC2Kn@o-$zrvws|KL;xz{hOtAWoz~YC7ob5aB$&*$CF1 z>@Wf4^*DakM3pvOZDnYD0PkSWqlP6!3+o(eF>NOo&AP66R8}D>OO4%1Mu_KfLv!V_ zeFvgD2GV|Q7Mb`^iDObwJKYXd-zAIfKmU^gn37l^+MD8)1+zh2OTIZ;!cHV`BE;!d zvi06ZZY1*XUDn9;K_atK=NA2vR^a+mpWiQ7cYJ@0Ue;!C{FLoC`M%6iTwlWmaVB#N z7}4pcX8n(ssg?ESEyvF`a8#%y`;qk6I;O)Hjccd?)=lyU>Ro(Pu zfpe&CL4BF?HFTJCq41b=0^aFiL_|lsApuX(=7gyw4rcuT&WiEt1(tByxne~d=TYpC z0a{fzfv-sP>#v9v9y6=KQ(1r&H;eAK0})q?Yc}WFh=O2<*Zd>mfr%m2o&6ITgE#FR zzDQ^rPkwQ1+^*1CBM~u^VmIPeVT{}rCYDdT1E*vmF6=lVDc#H!Vv*{&Ppl$ZVsZqF zueBr7F)^zy{+yh3-45KLygfj(MB@C=QbOz=Gc;J`;tsU!M~HzGh+M?1+APnc?*Pw< zI75>c#YxDElhTgbR7b}`Rb&yU=Ef!B)Y`#b6q&jC+e!g6+Ym3lzK_N)Z@JxjVqL4{ zku`qo@$+X~U{?#@MOC86y)QF!bwoM7*=IJ2A2Hfgl7}C9jp}v>9`TYF@Y_|i_v`4r zh~2{{eYB6fxE`i0@;>0bjv+|p9VT)Ux!6~IR`TX9y@rRm*0irwCj~_pZ zj1HGr&?hiICQV2UsxWRv-g~`&zq#b=i@m#a>m`2tuJ>-;Ymtd**%n@r>1&$IQ(Hv+ zozwC$UGET3hnxnuu$7cL5ZHnSh8^ny5G%PZKk#fg1O-y)8DXZ{AfN)dX zcwcnI0gD3hZfH?&hhyzdL}Y#@pg@*bxNZ%e>+7!9Hz;ndGJ4zk;xuHSlWRHAjbwGH zoKl`UU|@7-P%T0F%rJZWO5L;sMMqf+aEqx)MfVnv zTy{Ww-MU$s}oxD~7tR>SMi_;-$5RFmlB zP~l@NZGTx;8irH*J4n`MmxelcK0O>N#!g#=g7f7H4AT{(x?O!Y#%DADPP_t0*uc#~ zdUR3#?6FJs+V;c#CL_0PHEL%vTC`uxSUP;fx%YV$YMM05G8@qNTp-ChZWR>%4*>So`@%_lBBFWaG*A<* zX=>9Ak-~JC{RS@u(dCQBo=FdHtwsZj$zTSW;|~nyIS%jW9-x4pf}$F`_#}*!GXd}r zr&vLyXfrI-e9vHb$qnzFCe4jk2vb#2dC+wI-1igJI22ye`uxZmkpsePGp-dRnLL%< zwk?OfB+5Khr?KaoSH;!HzTG%kIU7hY??k}7r$6??SA8M9-t?CKOD7Ul!@~LE?3abc z#B96Qn-Rd*ldV{l5p(}#=4;E*5^ROXd}@5gUbVw_lg#%N$=~B%ttRASq~hI+p@h$Z z^M4zc${|fO%@lti)A7^bNP3ar(rUm8EaPvybfF*GNz>cs7X5tVk+xU6O=6ih&ZlNj z{pj)9sjm;B$+V6=9vWy7ipGB~-k6fpjUv{rvTZ7C}Z+2VR1v%aA#-Y-(vK(j>xaAS7fDplY z=rO}-vp}T8F>OT|zw`OB65hXSOCj;}(I^^jccZNksaWASJdEt=L{Bw1+HpDEkg`zu z;y@f`k#Zqn;dWL!z*p}I+_IEfHg&!^>jiNO`%kLU5 z;^a&^cGnNni`NxNqin9tRfll`OC1Y|Q)y%s+m*q=D8AJAC^joNvU;$+HOeD?)=y)= z=oK>5mNB4MnwgTEsLgO0Fn(423=bJJ?lX#9DCpqLP8?@YGqiz-o~*F((LQv7s82A z4~SuRB~j4fs>@D03Xvcb+XaG&8(JIAR{%9Iu(B7uXJh4$TL6y!k%j4!C@&o8$c|<{_z^MVS>+%Ct z)C!G#d>95=DWeFA(+$*j9*Bwq(+{$OdhS8Zo1z(?pOO(;y9rZHEsZmXo6+1xzNP)A2(|E3>Eb$RDQ+&R%MH;`M*=MVqZALAYx;8BOK0IkIsF#kl0&v)dVv)AUSmb8$I#cf#9L) zW(2RdT%NH=t>~^M;**iFF|(y2-Q21PNB4lJVcMSDM&4gH6|z=f>H}S3(Gx#D1!KzV z!Ro&ZD(@PqOfh9Zpx{X%%!amzJN0+Hm0WS8ZCVZx;g~ufSK}BBH1Lcu)i7ePRr~`2 z2+dy&8RZSF3nwRHPSkfUz+LZpP+?k6e!o?>rYZ>uLA5Ow%7x>ur$u2cuE!lA8a=NR z3>r@!dhCHtrwwR!O6S*LMiCdxXH8d68@EO>hN?*+?Yb1YLBvE()c4Us2E#$+O=HOJ z9sbVa5;LbvISb|W%-bY_x~}!RrAm^mcL(zKoS92d1v0EEE{0PkFP16Is6F1-XWMlR z%i|`$*Gogb>Ri_&khO1$87MLP1^BGd403a`gB_`z0PY6kDi^lAcY7-4!nf|@bXw!X zs`&2fzwD5|v)xrvD(ONIm?-pUG(#>Sx^4zRUJ(8;1y|C}*?w#LC(Is>d@sD@&|zWY zfN|KP!{v`5rmGR zH6tkO`p2O1dy^8^sYjId$^MVAethv`$l~DwBY;ymM?=u?y>T;6>c04eP?B_?B)KA> zU^{}c?o$|1iu76kFhf$|QUK1u@20OGfT)bJ9ulwu z&rx*UBn;OqOJJ@JJ)@d&$30{%lD2=yozOlel3zFFvdM4%TnpmP0!;XtHJS1D8a7XO z*~btpsQ#P2>;_usFYL)A^pJ;|fyC3Nk$QR5O)m_=C8?#Mk3LeMfe@%@-5_4SL%7s#q} zYyW1nx2Uh3YUP}kmiF_2W867;Jj3oY78VvO_TT4aM?(cEef z$idF=O_JD+s%K8`VTnr4`@Ib>wXACW15lPbI{b2>YRPk9%U|rGI{S~a+oAW65T|2i zXW*ww%geW$n3xcbL{c?3*O_SH%)^)@;H*ixB6z)UtC;Kh>Tzs=fkg$fH7lTegf>3v zP%)$STYMCeX<-sT8x=sF<7NzsIh!LiBkE^64s4Z^BfL(8d5m()iIan0wAT5B`#`+l}nEtDk>u2Ft-*~R0H2RLS}VNn4IY7K`pH4SPH1D2*RLzVVnNOM;we0Fw*nb>lyzW)u7AEv zk!9Dh(dGJl%5N!(&Wl$e4+zY}6#DUize0Z~VA}EZsXC%S-1Igsmb5$u z`un0u#hPCJ&TrJGe+n2!RR2lj@{LfS!)xVS2VI2NObq%NBg>DQC25(xLi!C(qSuO= z4;T20=QKc4SNH})vd<=rJCN&oq|k@O0{`g_AVzW~!j3(srnOqygAlf2-6U?@IYf1& z7foUm3p;A~7pHiyT_~ul@^sVq#iHL@Pe&PjTkHX6?mS8E}wQZBRO7p{zf> zf7O4Np8X4JZD0i&A0b9!pQv9yVFc|s9{Ni(({sn#Brmz2h7<&_Ns@Lv)d{?J5>d?R` zLy?k>G*D(K4J1?=6_tuY%AC10NTEUj%2t_x2>ktTV#C;8dbY(z!C}NFsEA+pcr> z%qHt5jVdRYA-$^u31dsg2X-No>|b$kT_ZBJ!K2Y1Nbjc&(Of%H$ESs_z&r#BNSG`} zs=OlYE(whvL`CIqqV;AZpv;=3?r~ZLPe5f%Fs z!IZd|G#2!M;Ks$o0z1iNLLBT>GJ2qc-1rQNSJ{zO>uWNFK?3TX%f!>ch96OXdBp3hc4=_fT7)(nj0w8r&i}&=iaon1Q zNbN*yhfz4DPny7eEBm-M%oNjWQ0TzE@S^j$hUxJG7rrDteqwqvaN6hSo_RmpdSqcp zlA|s*EX2LCJ|ec>nMWm)G|@1NO<1$e3Ye8HUI-aFa~!5@lk#Nua=5veML=xfpS(Ux zXLsR-{U~#n*$(Hcr1uOo%tKA)_3h>>x;ca@X)HPM;yWimm!_h@i@)2Zo_|*PvBSv>2iW4RHHvQmY^zU!*xoiXN2H)xHj_PSEAg z(HccVaXyR*9zCZ_KO&{OcdG%b(w;?k^SJWeqsP9rzkz&lBB0m@v9W8A?Wcn6OJseh z99#*rB^x2~K4}I}z7nk`-BYJr$PyFS`w?V$+ch-if6$Ljx1?78{8LY#zZ%czGQquH z6|jb7m&fVI0Y?)#E7qTvl6;rSFwlD~zCLHEA!7_}WC-cS^U=LS_Uu9prrH=Y6#o`b z%g`cy97RP25|N;7tWJ*BMYcb)=ykl;A5W~PxxRswDRvH2_AF=>lkE;sO(&8mm?djw zGY)OOzV!~5`mR#RfV;QD;>KP$?&&7GUUNGRP|WuZL9OkK2<%~9L0xt_shMm&;4~S` z1GQty45R7HcUh2y@1F!)C`7E)KRZ-CRHNS8%>b=C8eX> zS#&$^kz2^W?OrjNf0Er%q1cViC>hU?6>`gbB6y3@pwNE_yD_cKS9w=P+rA6F9^SEd{6+WTfWg(1JpMj^N{|-yVagrNlz0|z-c%PK07hz?Nj{m`|hfFM@P8JHypN8tfqu}AYTXhS@+$wtnA7OHE+?!&3Rzaa0)27cr zB>xHp$$^e;x+0?H*@BA<%Sv)UCU-dJi3o~HCyFx1ws=c{H*kP-St}B0^9JWPew+?2y$qf3@U2NEE{;Ix~04dReRd2K*Ty zqmF{f$lO#Oc$i%-o-b|jb$9V3hVSLf+vrn2?&`i7INhV*+AleL^H=&6G*dZJF>~1T zaxvzg7k>X00p*URk&eiXZIVr1xZmG#=f=-7(wKI@)E;hV6Sko# z+jDhLUpL%O^jG8^hULymG-KyxFig%{BhL$bY|!NSXFj8Fa6D3g+g>XUuWxU{5xo#- zYqD8n3{JbJIQQcabrbClZwc^&y+fa>(C6Dz?NtcS6`j&hvua9x{a6%)S#uHiU7b2b zBQGWgd1rMonRXC8XbpP#b*8i#eEQ$&kg?Xcz`8hO-;#<~J_imP{gROWjay%ii6Gp> z65)~Sc+JmrMWDn8$=sFV`p$l)QwGL4l5s;THx$@v(KqK#=YefMn$a)di~jmqC#~$NK^c7nP_vc+Bvk;X38u6KkoB6giE82%q1Cw zf)OsRjiB4Izh;(Cp91q60)QyFG~Ro$PcGT0Ic1>pvisk0CRuAsE*$qZnIE)nv3FJZ z?0k1u!95)h{^*!h{(Ed%Lhi!LTcgEy#T_*_(^If)RTl>;u?0K6# z3Y6VN!+(jiN?;9QtkrmW`tVzr8PY@)3*yWnlI53|m$!CH z8VNHPW!qC^@2@h{{;jJ)$J`p)X=F~)4hqbN=}g$&NmawkA!~4>!ajv31zZthf{i6k z$qL_yh~-pvgKr)4&pKB(r2s!X3Q8dsglu23voN+hD{G`w?R}{NU-qAwgm3XX){?g`-6q*`f>kMDu}{pHmGA~D;Rx6ohV4zL z$OuU0vhDk{1_$ukWdVvyqGf(>TvRT{(k_C=S8Zqj9!B?G0Z&cwbzkglva76EY|MQc zkj|Drs1M8`J(4y7EKu?|YUka|RowH$ro#WkhTl52aa+sIM_|T9s;+KdlNKvg4+fL- zYLM9Mg$-c41qyVqehvdb=F`HFi~#bRivv?TQ$`m;W>PTP6y)OrF~xeqc+0!%@2lw_ z8TyJNK`1~%FeG0mtXSP-DCN%{1NZ(cga@$NI8r0R!lD-vnu3(&u9+B%fb#r;F-t!A z9!i&G*9zYj5Lk#Qpgrw*5;rr#9Usy~&n&hWMf z+Ml>#*^3UijRp9Vz3Y4KkUWO)1WLrR9+;Km4HbV-_2!ER_ zu!beZ7$vu9zopeL8K(U~~z@UqCK?Oe*Z`n4HQt5}R!Xu^ndF-y58^ zL6RG!9zztuEcAhK(ZCYE9d>`_@7<%@#-{s!DbBJkC<763A;)%Ir!5{0HLw?Lfyd@~{0Vj)fgdll>XoH@E8MWva&*Rw$!Jj<+0i{c#lF!^n>(;V;XTxN%Re zXCHqM5fNb_jf^HZG!#7@?i;GQdDw)}cW4b3jrY&`JC#D?CP17{A7%q3u<3YEo0jM)u&^#S^LsQNnnEus>^ z?ty-H$Nr_)30A*7fF~T8EowL)ro&j1I_WNeQ8UO4h2&o4(EAZVzxg!y8kScMpm^Ol zSoGVOlZ41|ApSta&YTZyOi?e)DdGkPfO;-pp4?TiMhjqcFVip&;{Zylld0qe&!~nv z<;xW9+de-fz$FLD!D)4QBZd1NYM!HZ2SzW9yx3;mYf-y{@}siT*b#h0~gKYTaw;J?2b z3U|cXa~FaP616cphX@Bmz$UDdtQgT{yaEI2@N@}mErW8iG6R_&`krp0VuF6d*)US| zyr5@124q@ic--jkvTZgtWg~ni7rQO(FQ^ z2G@>TJI7TOv<=}qrm|m17l>pg&Z0ao?{B&U*F@%9V^M?-Hw7(YZ~ZOvJbuR^)`6sb z)Ucu-mxfQ{jqHIFE#8d)RId>6Af5D;eYfG?oz?{GsPKqnJ`u?AfWNGy`yFy%O16aJ z4B2o^ue`lSk<=s}vCR0v1^98-DT|3k($}{DL{PF+xJKTAsJpnR?LhQ*Fc==(zyEx( z=`+G6=URya!66+$wJA(stnM0RElsZhA(ciOxW?m}wt5uYb^CD7&EfsMA0NWV^9nF{ z-cyWAr{=XZwitvU=;jb;OzjC5iMsztB7&MBYm-L<7QWsYYk0Qawr&B#o{jV(P8swG zIiJ+dNkV)auFEocZjH90;Zm{UG_HW(`&1d@A*e?&;9;6sM?@)WRUw{OiTIfxNzC_E2?Sa+)cJE z7$_0yKV{>=md9_FUnRc_!U=)Ut~~V2z69=+OoJg1k|cp@)snNeSJ458QLom3D;L{u zjOl_xXwyE*7E7$5)8f`Ll&(7*RP|O(ao+eF#zAZ32>7(rdH4^d?E#q5f^9KHjMrf9 ze)zYC>46|h;~R(qL81l%>`4hg-xR=U^U8gOus@!gLEg}SP8VY`)NER@BFYi1Yt%k)*V}J^qypU|8E+#kP*v&}jP5^Hu zg(Y48oD|5u8W(18(lS+;ChnRQiY=qRab4p3l$o(bb})e%>$M91$O(%R(+Jne6r#AfbO;(;L+h#d#8L1U34|Q9l(=K z=*73oD*hi9EhTZ#Z0xtLD>^xbI$EmfiR765H#Vu0a(E%pYAZaJ-hQ*u960*~P-YiX z+DBgQKudr-2;aFVTUnd`juK2#f|Hj78D10dh)QtO=+sK8CK(QPoo}DqJKU&h#9&t( z(MKHK$66=F2g=Nl;!QoSF+=L$*~r)guxo0ty;}3;k=PU7&bQs+qu;KPl!8W=uCAaB z`*RGo(FT28!#et5SeV|sdY-kX%I9v|LzcJsZ~1m+teQbwS3N+5SGGBQqXxf=T|Gl1 zM!HA8W$lC;E?_U1>CB62A1+CbnR(mr>)oTJpH_oOoQ8Bg7{|T$3q^0l+ z30cbL=l>fqSLz*pm@3Nj;+y~HW}=Y$f8ET+2cs%xV%hRi_C#0YNcnoP?*&H+Y-C7p zb^tWbc8FnOw;j|iDoMatY&dDh4b{kvXv0|TN#6){ z>4^7cT|LW3u>T(RtHH=!-qgC6iv#YNfZo`vECd@<`p`3kMu7|BOP6 z^$3qic;JcKvEWEDYFwUZeRxd?TgFXK`SrW4FYe zt$=a#ey+HHX>A+2ySs&5Sm2&XS`*92$4I}|?=V(9zy9ocEH7m(e%I)5-SzID4#RLC9Yfb8o3nZX9O@vZX*LdY@FTb%RzihaM)WEP?IECpvO!Uyg zPL>(-Kn12cw^L><+|R2m;3xj22e%wl&AI3dYFsWNQ)S?sW?HE+hPDPCN&%8x|H!&$ z9*yn0C?D9PGteh;;oHXCxp{TW$oy;SsUzW)A}e?9T5ogX`+f}A5yDzLMnv+SoZ!+U z%QVK`n$4s7i@a6LgBO3-`H+|(C+mIX?^|`J#uprSff29Y|I@240=VW7L?`JX>kxLM zaH^ys?arzmjW%!FZdBCG-6t2F=vFbq>%!m5Ke4ZWDj>i7&R+_Xr?AgnYOyFLaH7@9 zEp{I7wC@M#p0JafR#Fh!y-fUSQs5q>5ZurPmuW-K9^bl-1aKQ8a%m`_wjEr>HgidVw8S$=W2{gd@}$PE z&h*+KYnW1ZsGL5>^8zHaKB=DH7LO|Bj_?DAB*a)E9j6<)c|H5zF#mZ=#K{ zqgU#`vx(iCrkjv;*@g`-AMK6Air^Xipx@)DtqQ3NlkYBmdI2BbDo zh7@n^6ZBT$jq*~Z4^n@WmLor`AFzK*{rw!5+P~R;d@^IjBKQhDhntv}_;El&HA1gvYKkA$e}6v0C?#aF@gxYB47ONwq%ZhjdOt-vRX& znKil&LyWtut#79F#|bh$9K!q6zb2=^#h^a9=n&*a!D`;z{jR-hpX}5fYd*ktLVL$} zObxy&H}q2O8d0|a5A%B{?Q!XaQPLL@J8_x<5> zVLD|xOv?nmk~bVtEF2xl@4JR_%hsfq((54MU;4tOnL7s!=X(> z$kT0Td><=VL$!5@fMiL#Oqu@DzPm8b$e?T<|FxxkfCBLOoYD6|vW5JO{X}h{ThDc7 zhzZW6Vq8sK&$~vGa!5IjnIn#lH(d-T-r;60bv4p*|5zZ5V09>_Ach}W(9>4MORhDk zgNdnEsZ4~T&!!|QJ3G4_4^D(!)`?-nw7(~Sfo9H8Bij#WQFDD+MFj!2PFF=z#L;JG z$C$y*gkFM_#>+C32M!?Eo+a_dIy5tDx=Mn2=GElekW(y62Ew8I1G5 zhjp>=2Bf0T)glR8%7nzknk~FB*mF-I(Le{MwV^v1v%z}!&Ds?Mc3e)bhg6S?j7j%Z zg>h1Mm1ZZM8l_fKQj39M=jB-prQx^Gv+)qtZHImN7YQ?H$X^sJb07Oy?b%a&*kSc|ViClEssppZSE4za97N})*;0lQ zJ#|(t-)gPA`bR3v!|b|$giPZI?2ubVSO55u4913AIr7J9K>*J*or{6d`|#Tjd^^!n zxYP8n2`mn#XGKTCM@SR0WunyAq;qIpqjWySW{__G8CZ6sBqu{R=9Z-tn`Wg^Q;$^q zEVUzWgmh&NQzR-i78oZs@Qv)_HB?SQJtRlvKdp*uVA5=<&|A>RrEp(TQj${K_+bR0 zjRpqc7soYR)n8NHs?GPfVlz*t*UU|KNAIUpJxFYdv8wI7AE}UJ5Yao~k5grK=An_d zw$7hLcmbuU&{1&)!c?Hk5Rbn(uveGX5+wUC@5P-g3?(%W4Los}%PI*O2h-fPYACzP z`b`v$6I>()E;yOd@LNe5F!&S&gK_UQM}V303VP2!&%+jKX~C&KuHiw1^2i}Ig~Q%< z9U-AE!AhG=bX=ri4)TY_NiFJvLsrQTia)u4u(1(Ol;`k$6rMA$oSnW&H_*Lz_SEqV zm*8lbv&sp!jL?Au#|@q%GAuuz;fh6yV$&B=+lIVch<1pk>l~$V3_o&?VKKc6VjWrmZvsFC! zT61~)YUt{2O`DL6(VKXV!qXYg)OKwVTp~QCG129HI&VQ~tbvB>iaewjmNw25m#CKj zO8Z&##>)K0Gu++Qua^+(o}gAZ##HOsX#p&oUe`XsZtk0La;yX)IoeIzN4k7EwXLEXLSkVX|@<7TYuqKSE!rB z&QZHDbKP$zDQD~j2d9q%O_8ox5a}-5QkJG<_D=oI;yJoF-AFsWPYrh`H2Q(P(}6MW zWermJSgQ87=RHNHAr1#yBkyx`7GViT+cOv*d^$6V*Sbaqyu`}lDS%qhEv zY=z1ifX%p_>jIRfepZJA-^_K2_abubr1{6(Sr0fjI+Euun1DZqVK66KAAid^ZGwBR z)^ss3LLYbr8C~0VhzAGS+NUI$juATifX80;>cmRdsDK8w)<%7_|s_ zA^*>(1^Cx*FA7@>hT6ZL@XTr)HIg5Selrw_}}>hqbn~zpAE#C%obH(U0<4-gr~35T4c&9v`;)Z+v-n#p^&>S zd|792-H~yxi!rRNJ|?izazHbAujJPE5`s&Qx}UiE`grm$F@oB;Z-2e2rQda?I_~nC z!|T@gEvp&+afJ-~smw_S=>?vDvntV#q}c16==@>2&tR;ZNS=1~N8rddhyBY^g(LO8 zjt$LU|NMc>MJ7#47ro!C)AGP>)k)$3r9zey{8v@g8Ct z5|yzJ27dpbP)SIiIEk!mpaamDY(FC8zf;xHKE*KX9b3p3NBuqb>i_S+Cz5>PGJ|OV z?_5&B8xPW$xDFR4(-K3$I9x1-&_mgm)SKMqOuGi$9Pw$>8EVU?PN|t)&>r+LD`h#K z@guw32|pLXbctQJe4l_5dZUbI^>O8)eBR-FwhX8!R+G*xO)ml-A0rsaR8UQ)p|VED ze_f1`IwzC$d4j*~dHP}9ETcBic1FSePhmwb+pWcrkidRO&(A6U^)Oh_L!HjD?~ z+!l#@wl3Aw%LNb|=0C0q6sac-^y8Wy@}6yq|tZTyUwbJ6W@Rf7vT7;!;0iIGu(1 zcAL54P_C7mp_@&>@nvpvjFYL2g`2PTxp9oFjSIakPyQTwfj7YR3r<7l#;7bjJRHA_ zD!;r3kn|DE`n}AJhRgLb+0!5G;cY9(ana<9V)4vF_xE{?J{=py7Jc$%r>>`Q8G@g9 z^M7Qk3JIDq)r`{B-TU|NH!1_91KVcb1B))5*}+!GKdIGLtb5p+=f^cL4hbT>M1f8$ z6$iDEDzDjF2#McokD?DDSKW zy?#@Y#njB=mwT=6_`<#C3&?wiJXy)43+WxOW-3TFbB$h6wdQN`iE(D|0h-Uu%fu`b;2rWT6<4p`RGvY=o9;A_F*`mahB}G zd8stD#-Bx!%RNsbc<2AhTd$zuna}|{o@zry3QigZ;>P03O9T`7dfE)mo#M>5Cn6jeCM-E_kjQza01Du8( zgSkH^|EV6Gqad#Pcg&L~X?8F)NuwY}E|Px9$;nm4Z;waMo!f956#!4wX5=JuC;Ey= zN_Ft6&Rj1p_~3t-2?vY5kawts-I%khO|y2C&7j#;u!62g!a}rgX7g~tM6+K<4MWHY zc`~z6M0NXoASH7_f7@}4Jz;&(^wZPI)?>BDT50{bdWP?d$t)fv*uFJ0N59UjVxKPg z*?lKjHImWFMqsk<-&^S6Aw2P4pkirHXYkJ(`|Q!8b32aEDB0PXjn{97md<%(E+cEJY4L}HGsREhD`BxeAXG}M# z_ca;!$@jNR{EpC8wfz8waty$8s5pa8| z*D1r0RPD;tDWBd?KV9$pg^lgTm(gGDHH-~T_*pWHiVN5Ko3ZX<*6hDuC>GCXmf0Cn z+sgE@{(h^}&QKV@PJ3g}Ruc8{JcFU`mlIpNQp|LMU6uc{?Sa`=zryq!jFw2NgqE&8 z_PZx4o|n|kjM@BL?j;hzFUS69;460bA{r$^y(OyTsqW_Of4$i+Hn!*m<8vp+1`wZk zsGaYxG(Gn5oB!7?ciIW;ux$hHfSPsVRxKyYy^CV~)|6F0}^Sm7 zdbk9K^7IWBHT+4B{_E2GPrmYBNnk7s8K%Z$-+xV!o}wx>8YH>ozo9$z)Z^% zn;#P#rHpnYnwx%suQVnwRvZ<$c>3fQC*vyryzN+QM~+6bxmL_=FTbs2XYe_W?_U3r zG+yf^N6P;x`g#3_{=2?zY1G7Na}}6D1NKaI6m>Dp^UxUvLuliUdfy`#F>q_1tmavN z9VAY7;x<|j4>-z=C@KgY^Zt1oFJWu4TYce*c-YS)*EMIk)*k z-?8Z=NmXYh^0|15KF#$|ocw9_GI))&RT-}oeW-C$I`D*->CeoJbMce#rBS4riIX{! zHW^1n-kz|zo2@^WIvU8?gzr?{Y@D{tRpH+uXUA9F4ukrN+?E9nh1kILf$R^hR-IMu zG#hhK2tXbs5JVc4K{gV#04&S=3hwsWgKQO^aXeCw_^Um0XSQ|pn`%mYAWa9!CrD*t}N|0 z8mVd7#%5r}($;@-y?CQM@Q-{6-PanuM-SJq4hi`szOnpy+E1T=rMY|09*)s=-cdFZ zZ^4*NjG#6&4}54wkMqH>n;B2muvT`OE;eNiU6y0>Zc1@W&g5&;O)p+@czlqJ#caRG zj|;Rvybd9fAXcJL5V@XsV8}Y=6Xf_HCZ@0&g|uJ!OL@nElX+5{HVn1r}HYGTfOpUs93IeDbLNu@6sVLeRFtHtL za`6HGKPd52mvD(rrtuChQ!1f5ksHW&t==p*u-zvT09F?W%in57U+b7=C*88!(x+BP zvCtxL>XHeAo*8$$?bXco9C?(hG=+fZyENSC3%lS~04fk4ZCUECr5^Y-t7G?8OLLV@)}NDD87rpKq?Hvls0TTR!=oN8In5 zK4W9*z}dD5hTF;>&i_C6j$|y88P^wiIq&T~nl>uSdFHgL!pkXa9JZp>ZzYP3Kb=1n z$>n%)hk2|861rRV$NBfxiyFqA`tdf5m-aYa|C2Bd+{nn>#UhV!T$7}{XZ5J=JcZ(3&VH#4E;5 zBgJ1{ykgxg9-O$$Ps&a0V)5Mi%Es})jJzE#-Ho+jE3+*f?A)*E+#o%B`|3ZLUUMF1 z!71RF&gZyUE_QF`&Dg_YJ10M1y`-cl*`X^krw3tQk|lrI{9BujCJvrH(i0>13jkLa z{j`ALJJf6)Z7ft#auYMUX$!_|EOSJZ(Rza_^SDc32k2`3O zh4dH0-6!w@?{UM@p+XW1{EhSSZf0+K*rY11 zds*z~sTzD5@o(MP%;RoS2b-$~O2sev9E|KbWnGq1Ag8_XlNZkAsqto;>U|d;>-{of zI?5LK>sKwrfGe=_NOLkhGWW*_fm+RtYLPVKx+hLtxpnK->*LY+;P=4{jco74Q3aBO zm}wG069>Q`P!MOAnB8<36gW6EB-S8gb&(Yv>T|>jRccy6B z(Zu+6jnr-prUD(>rhk_+Jc9Cgj~bQ=afy~A6ebpTwcagyRUoIMGcHDRn*rOhp$mHE zxa|@s0PKC4p99wmmZ1ScSzN7a`OlyZ+q8A-)rl;==SSFuzp{L|=y1uWBFxH8 zrKu8^5@?U!b%aH)YBSgS)@V_6{ekTY#rKD_U1X#_CGPkIHQFof(Vj9%6W^U#z@lB& zC!9faJ@n?Ozeu6ruH~1Im1fN)!BCB(zC$k}A4eCu4N({%Pu9a|hzY=^Dt>RWWw(ap zM4R5kD(A3>1fhHQ#o+Mpm_EjI8{C4y5#gefPd~(j_SR2Vs)y-(=vO{7R;48er1-f+ zk5Y(y`=rX%qIwiAZ-;XA+Rm<=aN_45n0y($}zL6lr);y3PwHdDv^%FjC&p^;cI#oKw{8#*Hu(F6yy7P> z6B`AgT}gvWOaX%;Z!6y1ye+sbH)++8F2&5^la+r~(NhDB^BAP`F)=satN^0H2C^L| z&w%NDHdrbg#1u~gQPu^Uu>pEkl1l~24WBR^pC^K*E2dh{p7#9XiRF*@>85NoH&1I7 zOO}g_iR#L|Gdm?DWSJ4&n~i%%)jR%M9eIt@#%NqsSlQ)T_8-pKVA|8zmf)?vE2_^- z&E<+jbkR(3S z(XDwrq^;t^z1`c^z)E?2?}93iAMebVvrSyrUTp2!`dC$|mM4Byh6w-hEijW{zO`YZ zM#H6**3FuQah;O{xZDv~Q=ay!eo+QgHxeuDRlc<8?J}(@9vh_>=3{2RtrM8VI`0s& zpVtO$6&gdln_v$8)}Xkk$Z`UMv(&Pz!tX?w*!<;Y-7C4?GY{^T=;Q1!){1S6_<);{ zVye2>RYE(bscZ~>FP;Czo=SJG!ExBEO2Tm>4nO6!%_M&i9Q(d;39hvP`cXVH6h&PPBfW z`KYbxNcN?4j-7kb?#0;1r5YHX@L9W*%YAlbW8@R0p!?tTI3A3w!h2L#~s>IAmR9O zuB_Jphwcf3e_J|_mv-=qn285(64%|L!Cb`kUFE#SMjaB_QV$`6`}X?w_QeN`wciU9lJKbCQITJ<^ldSg4{vnV5&! z2gamiSP3-TqByZ~4pHuDBsrNV6M&n%TTf4q28=@r%SCvgG+Nvg?8;5;T7nr6; zf#Ws12cvmIFJ;^Qeq=ox>jxDewelGP`)KF`rz3twfSY0)5 z#eAC`3jTb2=x1BbPx%?@554}IRS4vlrwizCrD=yyKhQ)RSoPnmGt{`!SR;&X4y!^UtLe%9XOe* zEpn|YXOX)R`2#C*l>vJL>dAB%2W0;MBbI#+<&if#mg!Z{PF|d!u%e5*P z#_dg1ic3uWf{-M- z`9uSbvS_cS@k#t*j8tzK7;Pn1c1Ms)6myUaT1^_d451Ciyovio`_J_{6&3yyrDK37 zzx&H+we?>E|9v5EAgl3Na4DBbSDND)9j=j*h6@y-eymN#oUm8yv#ZG2nIs>GGyI@7 zw58F|S8(KL68K`X$)ULW1hmuor0zDTSGk&qBF~pfB40@l|i*~ac3`!P5SXgg4IyX z!N7A#dWLLIR9{Jk>|8cBY;>TDJp_Ov!iWQvS5V+W%Yw2#Og?d;p#^9Z3-d5MfK;>U z6o=NX3`$v6ecP3{-y-CtJdyY;ZoCBL#uWgqhj+K?W`#AQ2sP3jQTa>e)Jx6%@$vSL zQ8PKBS4~dh7>~xscL#@Afkdz$3Znvkeih5a(`ts1h*tgkdXK)4<0)WsTQ1enp1-7C zF7<(gU$TVXsV6bNu4cuqTY!kCW!p3}o@j{&`?aV{X5n5dQ5{^<;d-KCPpMAMBCwsh z)06GwKP~Wf$WlUV91!TwxNCVvp(U7~m)BTnTvc?!FKknt513O!|1apxUBO3+#UR?u zL%;aTP=>45yzO$hG?zff2xSG+guYy_?8PjGCal%jW+}7JoHid>siWyRY5_<^%PyBk zZWsIo^DZa&n{_?q+^IEdSBN{fYMf8*q}eU|QS6CV`%J;q`uQLq@uai6D{D#Zf6{tI z{QbO@NBqSeiXQZId}Z37!6hefr1t4}*(Fx|o4nP|>&U9Fo2WSnP$@V!$fGm0!FYP` zYO{YR|Ko#aQ*ruWFPqv)wD$|$?HXLe4T#uC#aoV}WZJwcH}f(Bmc zzTOwNXte!OJKK^Z;ZIs-g=`O0-pU1LnhQV;I#lMm=9QLp)91Z|C$}mnJkd$e&irz) zeSYtVpc${)&hLon=M8A$NnyP)Pd{SL!2E#xD`0f`ARs^h4JtkuE+Qim1+^WV;~I3J zTuH`6!$wGWb?MTitCQD#mUzU^_t-|xZuFL;cJ5;rkK@J5GPPZN*l!3eXsayUdq<~L zU&MF3h(nG%Kqe38oN!hD*qQs*aTm>J_^va!oKPL@8Y$ZxB_qt; z{?TN*;;wm3i2`^)#NESk&Ow!E4xaa0){$_;XW_ zf>q$4V@7I!d2HX+-fdUZ7cTr>sN3^l)S4gK-K2e}rditHUiA)IBK2=C(RNLzL38BM zOhm!7rXS8;*@JDMcwNC5!5WhGaQF1lO`yBMO?){5 z7DD{g5 z@UyOMG8Tfd%?8d_YFr-gWvo-|Gi1s|303Kz{H^qQ>$O&d2Qy*)4%mU7+J3{;deI23 zQi^P`pwi@IZ|Wen{vI&#7%+SuOONTfn}Jcu8ZKa*(_{-}SlyCIj5s6)#NyiyYkD;OKs)mT zd9t*uOdI^#C{VFWK+2Yeg%LT`pv;$v=!FHv+K7ZNp-e_+Y;5eq;$z6z&cL>MW=S`- zS^M%X%g(;c%AJ+G27)T4x{|1RD9?$nL6-g`nkl#H{4~=}oa}`y+N`QHZuO4myhX>P zq!i!0;(A`=^7qAYO&N7FuXtd6gST;q-IO&eF{MRT`}3jPQpdUrZIP=Z{~fYKdv#Sf zo5A4Jne)dnrfaj5O3lhhdUVXr`eVxyjeo!G%0qd?p@x29}!v zIoO4y%^)KwZFuU$7w>_$mQP>W60(yPE)&Z<9^DRia8Xt+irs~SwMx=IixVI+?eIG#N!e4l$d z4`uSB0?~-8ugyO5cGl&{_di*4t1f=plnVc?U(1%FG`K{iK_f~Q<#BTVl_niTUgXQj zHpujL&@4%)TK_%SJa#{eefmRk7DNy1b{X&5QwOL(jk50VAi|>$v9`&2lyr1tqI3T; zkJFhN&C!J=->cUwvx7YFyCY*Crc2H%G@b@clkEnA?3}_iwAxrtKcC2vwid&4cn*7O zg@Kh#MJCj4Mv?G4SeDY4E^@0PnQb#vRcT+PL*}FCRmh=+=Hv4V3tL8Js<-qW!yuZl1LHyJAk2YXN@Hg? zP8YIAQ+6#T>sB$b&8IFvu~7~2r7Nb2S+z{l>RT@=CI%uo<5G-2?{2xXmLoM4o{qQZ zA{GIY%}}@|+1@?uuOb)#F#N<;o}K6qN`B(`2OS^tV6h|bI)=1!p7QyHCVbW7F+HHL zOLFwT6@czjfjYeeRRnTEDFNUvwaE!Q+`^IxmPluNIF181%Z{=uos_%k}Ch$wMIQ+);>UUPybjeS?<6^-(1Wib8 z=#yVnn{zMCh5itpK`v9OI9l|0W5GDYj^alf5no%nV~guBh&NSB`^queB_(6TZ{yXh zI!(sQ-JLE-7d7unqh0kF96HI?Z3idMdMQ7s)LHJ0#?HwvTRXYLVy5IS&E=@~VgA*ym?(C_pJjUhjjtMLKGnzSA zLpeQT9c|_V#)W1>Wt+rpz;AL^F8wuvhq3YbN0*?3KM z>5;b=E;RMIgmYRI0g&!=Z8QM)&#|bw`1qCkUM2@m6s5pO8r88mCj zUosd0zv&?TH5%xQ3tMSChzfY=_x+@CPy%|g?Z2-BGndnxodyCUJ{)e7DH-Ya8I>Rj zbomI*pkjW(cY8>W9)*!SeLxdM`i4+3qCeZ*UJ6w|3&uyi+`oh4>ZMtHq3S$RQJh~C$LlmbC5ASBMX0W0R)e1SbsVHozCX>*BZ*YGwzm;wjE^HA8uV|6}YFyE@jt` zik$NR;ZjV;e;4y4eofGO935%g<`JO&XW(G*iiV-0E^ICC_VV(o(bF2-&&(R3d9Bm* zfs%%BZU@;>G~7kLEf`GA>Zc)|lbQ!oS-FSzgPjr?iKN7*_m0Dv$V%uO_cT`~C+?}I zc|RGpK(L?0#0cC&B%Tu!W7uLuY+Mwn7wta0f3G0v-P*n%0UFfMu9G~#Kez8HTwVNM z=25@s=&w}`Csq3E)uBX3M?NR{mP*jHfrl18Z$l!DLn~6n4EM)(2Djfhp?CGmjU@_| zydH*zPOY)S+jrSL={@0?8)8$5BW-UYLfOtVOs)!%!69L0%%;sR%oE#^tKWv4>~!^8W4xm6zYVi=l0Qf9 z|9W@RlFJT~J^I&Lqukz%*jQ?BEBNr?A6Q|2ypyJrd-rYT_kRXf2h~+xa)@nqbqEjN z-hD~y$VZ!1ON_t&6Ljw0P6)C|9i_Q-z)+y_=ie+b7Am?sHDqg&YTZ$l@BgSfNqi2Y z|025AIP0ioZ>kt8xPaqsDFu+-B#F!vFfKsuF4U%xuSl(eNkJMkasjZ1d3smlJ8hU^ zGOcp-58GGl({| zA(=Mpe|!LAP9yJGp;K$PuNW*Dk`6sDUJ+C)k=%Y3VISA1{$9d6&Q7DUCNj1d$hY2+ z+K~uxsZaYan;AML>XN}r9W2-lJ zH@RHZH#P82a2c9eThXNHC{y8K9f z+!T~N_Gvwl2tSxuH2CxJ{rLy=I%9A_ou2b?ssBX-bx2Z0kSWW|lo5^R8X6kf?bYdo zV)4}AB!oZCawOzriH^T|5*NqeZlU)Jz)O<%HpW_-ZFefs5P3SYWI0a@Vf9L+a*>P4a@}Mn*?Q`_h^MKn_V0ohEgmkf($zt-fwjw%qV9#yXyCgXB>IO}!qjFF!f7f&pNEakZVzwW_9u#{r{Efh*dm zC`r!F9F~dIfV^(b?CEz9+^Lc|lRjt9^Z{!Qq=Cp>W+F=*E*_P$GUq8TI$JV4a@m>j z^c>$tCBH2n9t&>mm@5>kzodOz^J_D`;t)5lTC+1U@$Uk|z20wYl{(>d);KZA(CuxK zsbqF(`C5Z_qE>+_cLJTg_bYj)sT|$zuJ!l8!K7`sC!v2XnM$(fN>T&~_>R_9fGYp4`C=%bqgJ1*Ki&;6)y>B=v1nwr=>Ygr$ic|uJ@ z!R?B2wNZxB^NEu8Dc6h#UWO_Ah42KihQ3 z^v)2I9vJ1!@UI%4@j2pYxW7%7&0ue>Oka3_-CWC41?4uQug)CtDOu8U#pe6}?LXo( zaz<6%ZrI`FL<6g`(&IMuy@s{oQL4?~F6IBv|Gk@983b=55(Zz5gIW67g9x`q4qCxa z(YD=;E#SIo)21%md{xvEPa(GxNX8VIq9vzRaJ~n069VdeBM38vAg+Xg1b62{oV9Eu z(atodPwKap9ftTcc_pX16QJN}r!s2V&llg=vS|6!it_RU-3D`j18+t676|8`J#{G; zD~HYK*5tl9Sxw!yx;QoGO#Vx=^XfSpAzPnSp4VPwWN;WFOrO465|q`lGmG7%YhaG1 zjc0AQaQUgS1^>K|zkQOmTD^7d2E}bR^W4e0&&6ZE;a(|Gqzd-g__BMwRHMgOO z5sASyvsW0tbW>c)HC2&kCWKVICmNRAGS^u+F)}IJa_FJ)yCS`jeOvAtiJBM6s@#@b zvb1||`~DoPjUPAEZC3lyPucP!t~py$CS9Cw%{Ats9Ptr)tZJK@TAQmRuJYp-=y`Z( z`zZCV<#PG$*?cY!TA#ZWKj=1pP~F8~?$y)RucBqv4fv=5j_lW;Tt6vww!^=={b^uO z5XXcy=wh5abqejCF#Oc#&i<2TKIAmtNPtas3(2b!FsWN8Ho3BLnuy7@O%EnU)>IE3 zNXj{>KP_0`gZ}OyRUgeH?kftR16QZMIneBX_UxMk$3SblSF-P49$?PFTd$^Tk~wWbX|vr66+-4q}>r~ zMO3eCiN9--A9w7u3fdxHuf7XV5Bxazw!XvCc2OYr?YPzFK+Wdsdx#d&X-)jZv$InU ztrrh=O42l}xV&-sDcRCwt2n5vk2ejgcuSf-Z-HO=kXY{^Mn3snx-?B>Zv|#1PmFuR zRuXUFU05=g@o?`MDF3?srj_&Gs`82wG~QplWbTxuYmV}~J2sWY)5}3rYJ0!UYskSq zPqr18d}IFi`mDuMSmGONqj#Lll0N<}r$axikexN_Sb*pDkYmCbs8>JkFx<8CgI}xp zA>ErlGH}KoaV+vpMmNuTKsBms0j7T3ADT%YNNcOcMI(#<*J>MOhRJ)|ohE zjyaL%Xa+J&yDxNG#sIyUHgXD@aF@1Jom?I)l=QOU;bB;Y?y902cM)cR`|db&NGz3o zkyI3xf4f;*az?iNVV0`AgN;24^u&WNVX%whJ>yf4FFNqe_b>E%6CLj8a9Yj!KW#j^ zNAE*+JbryT@9$3waC5%D3gwOeR_eI4HtD|av$tV14Xz0w%G>G|STb(|dn7}IbJldt z0k3XyK9WH@^=cfiP1p7cV02ScCDXy0&v#_MF8WYbS2BY-w_yu{CVD zwrx{>$->T#IDpMf^sMyf z51PT-rivr*^Ze?Wy>g|sATV%W7mmFqU;%kjEwBa2q9a?-uuYj zd;PBCHF~{2-{13(SFhXaRe8+oalh`@{kpCO^UJV&$4{#my)K=HGe`Pw6qsm8tU{*# zJGgLPHU{Mv2_S$Wz<6{=xcum!;d5L zs~l)UPvx!(nWtZCH zk-h;o7I5Tv93v%S)%gYVS9TE}gA_0PeG1{1&QnO8qXcrfYX6QeWMABYq70t7&aNIF zdIy^cLe5JJ0la&=Gc##~IxmwDKvCs%oO{;44hcC>oGZ%A3Qpn2uB#HIJ_-eg^HwA0 zMP%(&@6(A}Ft!#pN`1Gd zk+hz|k&|1O7DctX@ibqDoAdW)b9$JmEgcj?w+QtXM`jgS;|ba=of4NkNH~(W>@U)U zP|6mRA54C{)F(1J2+{wo24gApoL&;I)0IvSUCax{N`9os!+Lx~CriC4c?=_~f|2zX z7Y7bAu_;Mdd1Iq3YUIL66La#8%Bc;`jt^#VgWX|iG)7CoFlb|06Zu*CJ&mmNu<@j< z|LV(#ygtKSusT9QOi*jJL&-n(c?@lUG5=X|BytK$P01(mLQ#pq-TuLL$nHy3W!E?u z)I}pQ#Ol4R`Sjtq6rh%8o9jW>w}FJM0oc{sq4B@49C?eR3-ja z$MZ!w$up>I7WDTRFdC4V+7aHjJ4|eiGUOi1m|CJ?Cde5kcDn=rRg|FT7%Dz|c~Rg< zvJX%eDg}LZ^&_+X{{Dd-1(0(CZBO(AnPVg{YVq;$brZ`#_G_r91V|Vb58>d2Xs0-F zG|zGR4l79rExjD({DuVIDet9!kHDtrY zY-l9!TFl;<6?+R^FVeg|o7RwT*(ei8%^2!HHNgzqJrR2WeGJj>jQRFn!p^C7{LpPe zmP6dm|MMP`sB!S*=4uyM#XvpnyYC#K=CB@A5_@7O-PcD$#C54KnwpU>Ksy`#Q%2N; zlQZ4*-10qMBesM|0X*M*lEGqiYQ4^%jZU3446AQPZ26Q4U5xNNvuFKbi zGN_LdD%KLUQ>a8%_LF;LTJ@PA5hW6lEe>Lz@l1?me_k{j#J-p|@vu!e6m9+f*hsNX zyYx+A-UQBbuPI*BVJw4*H$?a`&xPOjr-?_zaz6SJfe&R zegFjD9c>ZAF^Q2_2?h?FL8&!Y9jY_v;Jqvm)eYk|dFQXN98ouOlhu@Q)J*gzr4}1X zL)#dU*!32pI5->Pej>d;u?&)@h|+QkK6BXHtD67J?1Z8+fez3#_wj!$0{Ji#9G%iG zx$W?dRR!LQsNCYNNbH3YwJ%lOMHNULEzWj^V5O)q*Wy6lp@HHac%PqRIj0Et!1o2V zBWzFS1Wc-e889#Ru-AoQFJVXFvo+)t|Hb~XI>m6olf{nVOIgr8H2*`Ug7dM%^<$8BABrAfYhWvU`aP!2t z?Xo1StyahXd+s1SAAF0MS*|94@h&rE%I`I3#a5MYh&}2aPm%_wW4UGA%%e*Dc=~kX zdEZ;srqeeq;Tja>qxHjDZB$vhBAs`5$`*4i18h{s9|z)I#YWaxxO^U4)m*cMnS8pL zI1@c)JroUAd5G4cQRe($1x9Y)N7#M4J8{s}p9M$vDlxZ|yCDIR-?N8uz#IZTg^^CM zcmYLw9Jr;RqeqW2%TZBL70qPVheNZ}CS&u@FSU3~3cRsKH)x;HJ*BX}KW)?`pJUu; za2z67y*12ioH@MtUzEO&zb4rgL})g?itU*wur?lNd@-A+f#Kl0kX{sR00NYSsa{RM zvK(I)WNCU`d()=HE(`ug)I{WUsaR2F^FGiKuRRHMHN%0u=Ap@Xj@5B(sJ|$=X4yq@ zE15jMgGp|xZ_3U6@7Gkr{w?>3ktgUhBXeXO1u`}KqI7OR_ZWcg_HuJWzfOq#dXWvt zv*uKfE0L2irdVtDepLOwvv^>2kHh5u`o5orgZ6+>hsjgQWrdxJgy?&fycN>UuG}>k zlYt;yKCuGo{3e0{mG=hNxNKJtg(V@(_gz1J+&tr*PN(LcZLX8Jvn0c?Gg!!Iws-kL z2yV9oh6Rk{?AA-$nJdBnLEA)6V6a}xl`@1v&o=Ki(}G0}8Cr`5%IyL$4b;PNMGwr8 zX5SReOgJrK-pu01bAm#;Y0d3bTlx$02>WlS`2KBEsRcu8L2FD6u7%zEZbZ$G7ic4x z&O|H&;9j~z69cc;*7MKSFi4zLHUH|7x7OjvueT6_@V<%hH2JCEu0l^J2<)sM) zys|BKz5j)9=uVe5ec?uFe82-#{yC0kl7=2{i*+Yw4YsVF%rEBZM0Px4JNS8JZ<{AV zZV`TDlY7FzpgHnUQV#l@SjdA%und2H8qu*F?9v65G7ubjh$ALit*rI_o&UOG2H^YG3Wt7CVj5eDC{0JRH`;%p^amH`DQn8Q(K>_5;}Qq_5Uzgo zAabN9Bp{M`Z(zx3bO#?tZrS08yw2umsq(z`@5mesK=n3ZbD>h|Rxi|e@+Muo>){Js z#(yLnBAU9{Cleo#j=mLmK@ztxkQhdVOm%OKSF^)Oe9D2*j9oWeV~fg-#(YB|k82(H z3s^%>WP{vIPYVY7DqWhM=02PmMl#Wm9MVtTr3>8(j3k+W1{@d9JLVl0iqsNw_GA)E z+#dYi_n+kl_1o#8<;@kS;Pv(u!6AdoTKaktyxSv-KWhbMnB1jCAkJ0s`7m zYm~`nWq=K+A6U>c<#|Zh_5Pa2WV#0h>22oP*dy}%P0d7UkxR}JQ}dRs2E6aJ?REgh zzWUE9*n;Z>prg*|d{GeGBD3BHdJOcTc4+*!&^J0gCnfbvS3|rZh7V5+Y`QL$%J*5D zw}!5;v2}9<6RgDZ0;|I)lK_8_p8L0{Wb{w_^4UFd%j(6OHAd7?jh74m-f;K@ z5^UiL+k~b6N@{;7`V;E2iq zB&WEpXmY%Y+2HRv13SvEegQT!@V7CuL_f#U@$B3xDJy7niGBL82m9woX@tgd5E0#5 zcwIi<39%90ujIj+g@l)7jV~*?E!zj3sd<1a@<%!VxCSPSJ>HC^U!_5Qq}c7m+n7WK5d|bzU4_QW&%bf5o~mJBSpF z8q4tin9)V!XE2UvUW#M)Y_bmr-*2Eqn$6ngzki9fg>l#)ve$bJ$9x6e&Aac0<7~dc ztK+;`DRUO=VmM7gpk532aNG_M5Fu{GEbOldrYuEX^ry@aZmp<+Fea_@a8kI>mlbuU zgHslX^|)X7N%n;@TWIm%6^B5=k!KnGp8>rJgYgh$)P4f@fB8&Oqs*`{N0%7`6}?fD zx#mc4uzy62gXR~siBmC2v$XdQbS|QCykML}+@0M6rZ~yh~MLhVkA*Zhqtjkw6sYi@p)Hb&)W@XfGEs*b<<2A3R@X zRttJd#gFapzK*1GtKKG*gds{C`QPm%9P?=280BejQeGDnSag515pDPpCovMr8e8q} z-9ejVf=tzqhlR?pOiVA!y6-C+rY9w?J+NClaqcnn!Qe%sfjkmX*oPWRc*-`kM6Uv7 zEaPQtpfaOiK(|}c*rLWfUyq)yx;n1!L=8X^8?!J$5roju&^^%-Sp3CO-Zwu&nwkV^ z|6P9~&SwXk9grSV(Q#O#!MO)(redKLsSsY{V8v}oKkT%;l>GvW5?l}^oemC)w^8+- zFh~KE4lG1`QNS;`1%9VM1Gr6him%t9kY;9=pJQDbhvN!2qxH_b`v3VsDuq#CN|5<- zqRDu_bJ+nY1^75W?AtfJ!*N%VB?9P;ZaQ@bY>yXctn=MK73WuD(gA_JOv=U=oPC}x~sPR377v6 z7!|gUXcq_fc@kWVb2^d9lm8Zu1Qm(xejWT&PG{~vnK|AD$mhte^xaA)o zX7cRn$E*qcq&s#Vr4jjCkK>#O?3D2;V-oKdicf;C4yt5c(iIcW)L=D6wYEKgof^b3 zT>mE=4nOls;sGX~v#}e-d;lMa^jUd1E*Wsx2>l#S-|C$*;jNmj0aDIbjfm(HHi)cQ_w_M^tc(00PhU{I9N{R6)t^F6eF*>(i`%>| zM_(I3yK$squDL*(-H^PTh3x|?*X&QL<)yVt3I0lXyP0WTAX6ZcyDp=#sC98VF=#tX zkAZR68SwMz#@mD^E%!rXk^j@*!A@4XmCyfdFZ-oP?7e)08suzO)-~vh9S?OaGWpIE zd4*K=pvK z)8XdWdStKn(U0ni!v8E4fc|*&PeX=)o11QWfez4SRDdv|i$;YD#h5o^WYnd4z?r#S zk8GBgQg$_~_gvfBqj$5)3Pj(gbOz z?YdoPoi#r_ZEzKK?WS8-u|#(1*VTN$9ZSo&6;piK9luf&y*cx@J(=w8;%}@(5bb87 zFY$4{XWbg4*2BtDoES1^g`9ZKCq6>mB}zs}@9AffAC<$6GKQ?}NiH9v-VPPgbg_TS z3~un*u#@1U)sIKm{JSbdhO(kR4WXoo?#}Ygjs!q|Ewn{Cb-Jw20e*mI3kCp#xudWB zJ~Ziy)^WiIaC+(r^z&`r^0H$-+e}%4>jA!E-{Siq|Gh2=qtX4W1&OrN>5_?M%7=(j zc_q1L1rB??-=wrZOwI9-6d|-BaePCfV|8UcBin-QbG&iV{|sl`_;{aVqfqB>Xo()i zd=5f>gkso1Bypb(V`VJ6v&WzHUeW%+O&fF5#aA~oXuHZMVqb@ED-eU3=vcD+3^u=! ztE4y@FymV#CXJX)B#iCUuOymCCq>~wZQX!wIdR>cgj_r)c(QRFo`{IZfhGxF7G(u) z^N34vEd^<{X|@=1(J#(ckHmPpOW}m4AG)SKHEl)!?pI{~k5_B|w%%j5)5CJHnGoLu zr!8;&b@{ZWC`xaqd3yZrk-7vxujEQ{dZ_DI| znc&>PllAe$TsDCz&S$V+rmHpIw0cQLrbb|*!Y6bK?@D~NASu+WP~ zw$bs&J^}C%4!fy(Sqd@)h@v4Yj}Ut~fI7p26>fwRoeJGdkXTrsu>u>A4MPz4q5ZwO!F~PVxmx9HrnV` zRPN3j!eu)t_nC)xa4ijh!U=?7P^dfE9pfg;4+$qAKmJ^|A)|WEaNOLMOL{b2;L+0a zvzyV>{g=k=B=(8YECh@bzhXP5AXs_jwzV!Wbmz-P9apU{zrf<{G3O-C8o(*~=L>!l z%V9H!klv7y!$BACRLGaQo|BWa_4}su0ij+5aaaP$pAsK`4Jzk=cXK3tJ1BOCnd(Fw zbA;lJ(a{N>@cG}rRhcLrJW{3WJu;zJ)>iy!WA&yBcW;3FX0gW5yk>BBaw6JfH6*a} zZs}}yg-q?MCCf`u`O%IrTZg;O!sL+JXci4Yh$*L?%x|c zw^X{!m|#QSe2wT*5I9bz=dT}*d$1T>i2fN{{~MG)fitlogsW_2%_Nor?JNWq;brIB z+l5E!zd^v`1RkEda0Zk*VjerrzouDHhvPK5Eu0n~(aQN=zYxv!!6BclNw*_}<~Z=R zjY%SZp2uixAp^ z!}b?ge6T&J=h#mlQ7_CQC0HAEpNYbaBs}k-DU!*0uuc^+N6z*cGPXXsIV{jV)QapfBEMd9|kkM{)0;8GNcxSB;p!n-h5`!SB+GmXE+2*iO|+Zcg1cX ziJxPEI1bHAw63SgCWZSvPYlK`a>D4m#c*7^Zh~f5``l>2N>|N~n+cAcn)7_f`7nr= zy^`YY-$6()X1U3(%j;ua2#UDR%`@zWJIos=ex5V*xRW}0o5KUw4U~k}vvE6&Qc_Me zpVARwgyrCuIx+nBmSB&~$ULa9`R~U9NsmW>sV9RZQ!VroX4~6OnMX@x(S^2yZ?O(% z@Cdl9c0xGgN_^WLysGTiekmiTVu{|=PS~-)iBIZ5YzaAlpuhn2Znu2ZSrQ7@EgsQC zs@+)csW~B8vhb~HbQtq$+!&v>(*8v6%!$ARhkIL1^KvC3A#82FTLSz;ZZk7qgQLQV zrSRl7CN4ami&BJWOKA7koN@1wV&%I^j|$BU^ZY__ zSZC@<emT}Z^+vBi1{0k6 zknsfX3u-<#s=ApNG;QGBuyk~?z3yhg*<%V%S(n2fNAN^95;!V4a)MuJXVC(#ze%WY z@rSkbN}2?}yL>2^y3e{e{WSCS!)@_Y(gM7mq!AiKJRUuH*LV(W_C2HXZ;5jh<;B*hmc!pzzuPJA8Kl)!*AqolULy73PKY;!uN+GxmKib36c&k1Jx#YLZo*af$=Sar zdLtz`LI@lSSNECM=_%ZLRiSxTd%R4L6?P%MQDGDIxLRWv2&?T4c|U5WSa@;CVSzql z@o}HLl7?2T=IeHh}nREE@@#BbY65*$uLI^a-6B2z` z-zTx&bn2~H>A%gm{m2|bvmgN(ORreJb$wlo(G|bxy%zj{tXYMNcQQODHsq3(VaA<6 z^+Vo+FYrupOp9Pc##V2g_Z*(rb?vP*vo>q_(a;xYaMb713RKD)V)`?DcHrPSqu#&o zAXGhfhw?-1LqkI>HC(5WE|4?;y&6)gdI{+=?Ok0zfy*^}4V-Pq#%OTR>JJ~NAXQ0_ z4)_=u4`)2ms+1WW@Al_LjWH*vzsqq)^foeM{CiH!5iSjD-fBlpX_wxmi3u7Ho=EY2 zPYdr{;&FT2f`@6VrG#`AAtZBrSG#=avR&N5b_-Z!=67{;VFk~3mZ%pKX~2B|&Sxw0 zngU|&zs;sqkQs zw(qDsC9wMz+%(E)azwd1_`S+z`JqXYQ)(4Jc>lEz?GVz3Xl0_af21NRs2Xu#f26lZ z$Amo7fF~7bdy;rlZb*~1> zZ$d#oc5RS^fu|60ELf$F^5?5y4)BTO8_gjys1Ok0YbTLf-hpb7g46=io)n;Mv#8>Ji2-EjY?vbghODX>}G9A3?Y9NxQY>uhEU z(6zBOzJXrV>v~TgikcMRyO;KO+edi1e!qM;e4wi!@(?`AejDphndnahXYniNMt8Hv zr}g3qN!r6$NVHoaD6H!B_p+Vl2WCwqq5VO-l1P89^Y&0VR*{D&E`Q8UZ6_F`2uvxn ztE;M?&D-g0Q`4Q(%i&FyA-x{)&?*(J?c=W4Q?pUo9^vWvMIykHh2E{9xcGzYR7s)7 zT2fX&1KsObhkaYwSe_lJ%I(BHiRRl}j1k(dUAe)rXWNoCI83)3hS#IO>!V(YH?l-> z?uq9Em73#^hP(T}r=KYdJb1~CAuQyw>WUKSWlDh@^%C8iDdXWQj=c=wmZ4_xARxqyzl?E|(K|^-$WkNDZ6Ww_L9IVR;bQ%}DKAqZgks2&7W0?-?n0 z=SYD(-ezO3>VuDCIk%ruqHVeyvs$44ZWZ_Z!>{^TeB4a5;F5*y`Wq>h^b(&5&d?Vc zXS=n{_^p768!Jl@rk1*$AD`SGjCb8ukmx+e!H*IYU>#p3`=Cm6XA#0a z?5en}?Z4xfVT@-Y)udv>Uc_quF-x+bmNA41&-wM&ANhYDwQvZ%|1_D_0?ze<$FP)ITNmhR?Xi7oG+jWgfBV&AgyV6v=CRTyXr&o%4j>9YN4ncbNX+ZfuQvnHA6963IOq77M?5jQWH7pP5t< z*bf!xjW-fI2r8J6;!;Qjt&(nTXn-w|hr|a*Nc^no1+%Pi`OM=-s;J&0_@}HKZFj(H zh{R@dnBvpg`f9Um!SE)-LtFMss?Um1KwPg!I9hOC<1_l_#L%jEz3fW`I=CWkjY8w( zqD56};iEhvfuT4r{uOG%p-ORnIQn8;?(QDt@|{EP&qcP~jioCZ%Wjt3^Br(>&lJwE z;V1ghKXQ(MUF^_IsEQ(jk+p*se8cOb5NWjMy)yZ1`?bMEy{fl zaP)wQg`frKGCsgGCknO+^&?p_GYbnhpV5jEv1{^#sdI+t?C^%w^Kr22^?}GJjo11z zGtQim>b2dyzQ^XssXm?VS&lnCMPcaA zr+DAdqmO#~zV!eQ;|kqv2BcR^Obo=@LGdZCHwdL23pXYpVOHS4KIPoIH_)R#FpH5;1Hjur4W#{9 zNr>GzYK}AB9OYbI>ZYue@drqE2DyY#@Z7o7*q3%-RFw+kO0T%j#Rhc<7d#6_>Ud^9 z4GruhZu7nxh2_t|MNC8#a7M`)3rPtWqXf`VzqCHSyle%?UH}5&%FJBpGHR0m^K;#? zo9=RAQLP`;Ns;ha|NVJ=gu~elEzHU`CI}TZSu*G0eOrPHy@MAy7&u>S$S0Mkn(Let z7H_mjZt_*YxLs?DC5q+E=2CY?zkp-yAC~W-yX;?cx1Zvb^u3-@{a60d9F4m8#CiX% z{xa3;W+uV`wx7`^&at+(O|)%4eDsAgN86ecPn;LwI+UU{y#8v=U?A1P8P`4C{Gs)T z-a>4%!bNCJtpvn)^vk3fZVT@6I*|kEYTzL_-+zB`>~L0`pzkU7-X`PTFe7k5SqlEk z&JrDt?$C##c+RV5IKi=^ zV@dslIpL|R<_7OSBYjT7-{uv*d!N9!^Xaa1CcH>ohibbgg#~i zP*tZU_qn_^$to=DTHI5(Hh(5?aOj~e(-u@|$ada_B)dY$cmDv*wOsw@Vqrcl*G^70 zT6^R?%IX>!+=u+l!ub625Lg~%ey;usAD2%KLX1&dA6HEh4sVoDONHl)>FvXC0YxYO z0&7-`{<*esH*)bJZp?N$yzxoLzDIrs6z?4K3XT;)Mwph}=pN!sjN~d;fxC?KHAVW8 za|<@anfXKuBVsrfHvCbSdDn$*(GOZM2tfSQ=ED1Iu$c&V!|pr#N9{#_|L#6pWh8(C zSTLACa9=1Jg}ia-OJXFGbMAM!hkwx-C+&O-a5eleGo5Y(4sW!uO13~_q;UT_!m*v;1gdBZd<4;1d_4N~u8)8C_Op!YFc_l}z@LcfZ zeFqTTHKhLi?)&+!o`G+5Vnz>~4?^yT{t%jROyFeHRSB2f?mt4fzP zFJ$l1pC#}KMC1Vx14 zT0=<34%Oe1FtwU8B@LN(`(5<@WibPX@dktU|DN096NblAA@f}pYH&R#v;d3y?MP^s z1X72vs~;$+juRzILcF@yds22ka5hvTR6SZNcvRgqo;M;)BqKEP&bMVPx&v@ol_?!1 z%$w;V`ZIeMxLjF#fxlH`=7xs^tiZ;M+pCRejOWKT_g2bGTWjqsD{kklIo^mJLHljp zajx<43TZ#HxEVJD?H)Ej>2xP~E z-y$*`U*FDyIxtoHJ09|Q)r2m>^Y2|DBej3^N^)?G4-U{-pBZ^zG-%XnUh8{SLtyRL z-F2jH|w`YekUka(gHzaV1&n?3wVM;W`nr63^<(@E`G`Crz93h5*)7fs%Ys;lk=7W zJYXcDOQ`(=@Wsp*=0y%b4BSufD@U6TtE;*b!hd_?`g^jFkM07Z`#eZifZPvxP}$Wz z<~OspzI*p>7{Lq`l&+=|YIfp?G!&UAT3~a*&CJj_2%lc6A}5AdAVkEB6rKUc`7F`n z2x!IrxRB{vM-)U&V+6j|OMRMOBTSJbGQ=(2fnsb?fA2>6tk`^X!aA$zLRR8Dfk}0= zuyXm3_4y3E31(M%Yy_5nXJ6I9CR~N`3;6NUp{p%DG^(NC*GCsSDn(Yxqz_-w2Exs)*2c@rvn3F;qhYTPG%$)BjWQiJs$c4icb;QWwG*?$agLcmIvrdAyX3+O zA6^Fga!ayGslgww0F_j(OTD+JF&W~`NqK=$HFZR@aa*iL@k%TQy!7;(f+&Yiij6Yn zneW_)Yp3-$B(1mZOI@?4co1~Uu+jSdwQ)VdT?CCBh*O#6jP>(h^au|Y7O!>F;2f58 z^wNIoEiVn63tazL@VP{!yHmV4Y=VDET}-b#mO}%dXp#NJre$&QEXxGG5lc95>_LvZ zWc%yR39Jg=Rs@HczHhAw9ms1!;Mi{!MYgvM3HYCdm-vAf|IhIyd1DaU84B_VBnd1A zf27J06BACaOrmnxd#uA*ObE zR73gG8^AODQJ6?iBYarVm$lw~YSrFd zNE9He-)Oj8wy}@#6p59#-rU^R-`KWj!VDQJnX7s(=6`lv&zlwnZOUI? z91kHO_CTT&qs%*iJc?a%;fTEUbfg_gc*pFtO}82`&_i$yxZM_g1h*o)Lp43 z3R}0UEqCy~SE<`3@-H7hvT>Cx4b@DpGU=}GdZ#j|Hq~NZQ6hcaeO6m?C1ZMJj@|{$ zL}d1Vygs;l21}d8{tS|-(5($ppXEVy(eViq2c~^5WxRc1O?*`K;iQAki<69c#U+OI zG~SgDS&w>W8?t4^BD2?s19ZGmB zB0zCGy<|>ro|l_e#Yv6ym9o^ETaC+LEzlPXOB>nR+?GIP+pHiduPBJ@UeeDY+P&?{6>TAGlf zV-}EZ`7tjkyZ2=Nt@HI&ck-PsQnR5APrhh>ESd}ry#2;WKG`8I9XB-RiBwV8+^O>z zKtgQ3JJ)`5_Q_{#oRM2Xac@JT!a*up$*(UBGRdtpQY2=##jNxgtb#i9tr-N0!!QoN zBAn$THY+?m8Th>kkyX&Vw3X~u^eTngv=B_)#>GdbAaw1piJR%2H6t~3kJ?l?45Aej zQ`)iR!s62GiR(&|pDxC?qW+cNsXiePwNM&n06KF_sqBrZ2uj}HkQQX2Bz6CNjS&a! zGd?aZ+OkrE|DD>8VwQUc<`~eB#=D^CO0ajD#}MAVjr9s3|7*pMKc#~Ze)h?FZ7J)M z2*)x#v$=a7+j9wq>3zd-px|p{3q%vO^>E7yhtD&*`*uERiw%ZkJd3;+qfNz3iBt`V z3O=kxuZsq|Cv&Tl!Zu38g_v2mEq(fTX$SImJ>+XlNDnI}iKX~CDw?yazO!6kk1T5$ z0jcJp=ck9ukZ)+(tMAIyG&k8i_-8|}^g~+BoVe>+8Z_1xE&-M^Q=10)0{Sc6orIpe z>QMDsf*}BMWkJmFfmY91CZ)}r)<)ox9@2^m6(x@;~D2tbW~gAsOAaIVM+?%s)+^Bh(f$u75=rM~r!Ih=ko z*?2;GO&e-uYN_k(LwZ-*tNIKlGi#F>!IM+{v6u6%nOo5QzU`&u$!8|-hMDBV+{8YJ ztlj^py#Uv|X&N%}0Gu(K8d(hYo%wFA;)wFbaxS0RS|hjI+ACN0>5NFIPHLS3Y!&w< z%^lOc80o55LnzGu*XJd6-Cp&y1W>}6q(}Rql(oy)yPMPjHF=)<9tS>iSm_GOZmaZe z5TVgBAz4bEnR07yy)09Iw_U$vs1*9=wn28+&mVB)EBn%dbKNSlg7SUUy7T!U*-h4u zfuGlUGPJ^SPCBC+S-&iN-f+TKw_vt+WBLLr_gNJ7C}R#ps3u@Bu5=BgYR)kkI%Hxn z>R}*XUJfT0i3(GRea9NG?BcftM)P={yrf9*o`BC%NwgBpppDJ%6-siIi-?)BR`CM8 zm7>YGZYu!DN4d@)IH^9LTj6vVR<INb7iuh9(sk{36wn(Z zv-$bL1n~wg=1C8)=*sqP5#(MuLet!7Xn53ay;E(?PV-tW@E|F*9KqNIMM@e#ahO^! zSO1(I#6Se6CgdTod_6ibHSNFS9`d2j=cRF5lx!9YT9bAho?=1;%VqRU%nb1?FWG!+ zD{I7^RV}1?Kls`8VZ^gqRk#vZ zko&lopthLJ3!MKLuoMY8wwQ4*VuhF~=Gg<~vS2L7c7CQd+rnY`b`4h?I?uVo@ z_jV^PZq={_a2Ga?jtbO`FD<#4Ui??@zKR91qI4-FlWPx6am)ldo)h9v$Mu@;Kj}|| zl3^FU`;-)=fIv=-nPQQ~&UZs`3C;||>ay#Lk@{$_$ebZmHBb72Qn(kdd1vmFb zVR=s9Anc#>B5zHuS3@aApjPs zY)l|vo8Qv8>A5fN4}55EEYG&ucHjaLPa;1$MlK5Z2@yaIV&?REPh@o77~zC$8B1!4^KPd zzN(*u0N3drl*3F7{&fnA>GHXHSER+mM(4BoY%f3@urgr6IJ&GL8M=P^T5eKYQ^F(s zc=_E*8NkN&YlisNBfnmacs@bCmt%iotNyc%l*5peIBnW##`6Tx`M7j|a>?2%i5BbLYWG8>q{jK0IZS_1HUh+6zD=y#y;WIfk)S93 z>r1{wAm5h83dugrf1582?0m8()}#;4nx=tygo*a0O_C5#lqLKgV>5nd&AbYkVW;iz z?!}7E=>*#v{gcCSFh9YKa6_+~J-POnW|`?NoL(#0sl4ad;-?Dw8y*}bq1A1_XcL(S za|6Tzoj~LncmI;SXa-I#0u$q(~w*RpYr9g&i3%kxS zMrT3?KRADc_PNrK#Y!Nb-Sb09d%b^;jWSn$0m4cDQ0Ie%h>Ug( z>db`&zwrs@!>q5jP5D26WALAF@+zb-)^}t|Kat6;S!;Jd zMwj_7cajrbY46fuy}+|uy5w?B@Db=5g`0PBa;KZQYfA4P&j%&Bu+CM6+E*2w5w|H(D z1Zn2FdW|ThhSDFzxg+3Uv1E=em;(#j`4b?%)P7=^(36OHaqua>jG6j_nwfIxuERD# zjA+(fO-S(yg$g6xw$tJ3#lzXYQa+c&8ugj%qVY`s97R>*9mS{Lpo)1~c{#}5hKAzu ztq1jRTZAT~WF6#0iN}v(X>$XQU}ad3c)tSec)H}AWazB`L5#)ZcouujXN_g;N$LG> zx$B<2HBMIPa|V_cVUK+Ble;fe95C`bVp9od_HQInSpOM2nweR#e#Vy~XK-Ntps)yp^9CsCXbA%4q@6bT-vXkV2D@koLX3@*M znK^CQN`*BJL&0)|Mh(|$&w5Py*(%;t$Ig{H-Iryo89%2~9a|D_46*fO$^R1v!ZU^K zZb7A-k=U}uH`c+$rOTbRdqu=?zX|Ei6~haEr#r{#5SYbCGrxckd|V*ZN6_DujyZx& z@Fv^*ThCQ>g8O4Kcd=pSWc%Cn zzN^tcIs^raJ|o-MRd?8BSa;C>gYGJYO1*;+QY~dEujI^j6Z;bKfU1J1VeDZljHx&N@n_rY5CoxG=XDct9^EBCi*W9%m3p z)GcQ{AXh7!J@@P(^HuY-Rq^5ts|Ob@$n%zw9rJ(L+ogU6$!R2NQoX`J?6GSbw|Q>0 zS=(93rL+4E>-+b&MA;KQj`-Jt1d-)419e?ios0)nqq(C@w569XM?Q6{l^xHZ zevb8}CvuH`a@1Oj4V`hbD#ZJxpuMu%DWq7Aooc`Q72{iTLN{w;a6UhV<9yWUBU8z| zEp?6-FT9W{?kcm-bo-F^u}&s%`RkLn59L0d>64NhXZmbf-T6@V+AA9u=G37pFJ6nk z&Nk?x@*OISv8)hwIcHPfqb*R%lWn8Q{xQy=t0v~g^*`TP>~I`)PPc{g&SK5O%V#K# z9kzkqq7OkRZrf}OnWA4IMHW)o;eRbavCK-SPz)NPlPLa*XvDaYxHx*fM@DM)S0 zs;0a2y#_7Le5)_fQP@9~tQ&%V8qS3hJhLxR>4Bk-KUyJ^?WLBXi4@xuj=MEiDmA~< z*UgaaYcriD7!aPoENZSqKwKm2b2qNmY?U z@y^MKJExHHhU0M;V0&1Oe-$qrY*V9tunZX~`=rNQ+N7;(lb%j95IYpDWR&G;NJze` zlZl{22Bu>pJst;9S-(u0Uipq@Y>t^dFV4%Ri#GX6zOeGLw=MIPXK7WA7c2t(gwy+P za@!=fcaS7wPmBEfPh4qcnuz=A>vc_boQX)ZWA|ZIW7B#S`R6cV7n!`|XY!l!t}cb6 zFF$P^n-0@JW;eKv$KiG)8aSy2S0;D!AHpg<%cQ23ShRYb+i%Gj6%x3b!kbl*OzWvq zZbNbE&u2(^QAB2nP%-5Y5wwqF$Shf-qn0g)mIZHs=BAUCmDS3(I18%q2L%E5cSfDQ zK_?-f-Roz{-?s9t7>}GI zY02&Ws@JWuG{A6$QL#rZoN(m zJ8;y(pv&QvfrPkM2Hank`O3G0Xn&)RwPg&g#TZ$69^;7>b=K5>By0HLY?UyT&yn_1 z{;Pg|CA^MvRJ;K9uSAVX`L2JT69HqPfpTEM(>t~Si zSWuN2^CcDDUkxhEl_|o4=3lygI8@qnn=#H(}SySMW<7e z)tJcye`&S9osc@@Fsr#AU3_(j(c=);MuOAU!=QT)s8PffGT*~#Yvfwl&RRwZ@lP3x zn%r9_{@%)MB{1*X=klhW6Hyo>p(4gYd@hJQStqb7{Kt7Hx71tHw46;ueOv6v58B!a z3&cv$acOZ4jb6LCN1`T2MG+-9VShDx2eETB8mAxKw4Yg6{55y#!9wuPndJK!kNn~f zQGBBls+75Iy!_(hFxT4vIU*~ znMqM_*2%8ymFN?afctd%my;7tZA`rBIewIQinDxUB#nU@`7((>ZKnK=0xcH!#O~TI*wO3cgA+qafE!CZTl+n5n5 zGbdQ5<$jU4*dr;!x5AsWD+aMY?!$4ouWOuzBI+GVtlKEpJx1V#ShYs4?i>e_Qf(loXB(9s@Bz6N>%u7>7(o`JM4rFCAZdi zj+IJ93AWO7P+w?f+DqL_zvy;O9q(dg9F?oqnbiFGW@&dgZZ(n{B0DEGDURLzdg#@E z4DZD=g`{fMP*J|`*!AndF}Zip$Ig7q@tD|t=4dtH5yeG$bl~gBuD#bA?+exxzMq!9 zRZQ|zG3u4gTP}?tju5OJ3u=r$@GdU=8*$4-mn3x?_&Bpys-A63^cNyjnQ2?0O%p%< zjV6OxKixN_UZ?k+a=nx(sFh#l6F=*pbz0I7%^jY}>#J`4iDpM4(DLamlMX~)M*{0) zh$w94o?af&$~nSCaj$HL$yzf|F$R(#ksO>gb;qf)BLaPYsx#^X+4{{`c2tAj(e8 zQ@n81>hOgNbyB_;GPxdRs_eR)M*nElMw?t1q*!>-e28sOZ68%a`gKd@!MJ75TvVRM zK(+XpL5aj+rkoo$c0!ia?i1|d%ZeV)E5+Y? zPEXz8DpQki4<2UvSbIZI1F|tYL^O|sV?RLQRDgUq8_ho_QO9nLnv*He-HBKp**qPt z{%&irD9w(7D0+(CQ1s7kzkJD0Vl8lsaA_;W*-xHH7;Rdu0(i2m_2rdUsloS5-q*Zm zg7t~r=9+s>9wqjwB?)Jy-TR@7W@kp@m2^^2kL5BLyGJ(YM<&H2ZJM_FTxaS1uE^w# z-HR|0HA!-I*>wAUC$ev=o`h2VaoV#}@9rF-OhakpoVa}JYVz#2ukJ|^_CMLASVG<- z5vRl7B=f$KqzO-)meK3FsP~}J&hgS6Ca8d9H*rd7WUc-Z{1$auWRctLkle=Vi;{h| z!M5+63uJrnYsx3!x^H{5Egl(;I25MY7jv39Q z33?;td~T!h=!1oXtqBd@L!}$SEnj%-w@icj48`Z_WJbuICw_?5;LEb3_;`Eh#|>Nh z8lCStfl(7g-J57Y3cr#i!iThic8Wen-0VeCn1hMiY57k2U4+@{;^(dSHOKpwKQi@1Oi% zbVzqdhe&rxOGjR85}b*t>%piIl2?U^nY%RR)vSbu^|6VaPX8J z^#AVGoPg~%8()$h4#YWp+B3WMk)LS|_11}TzsntIrRM6myBXWEPJsW4ene_{{+NX(!XI8Bb49ZXNmU5mOSM$kt-1g7Ewv%4PURL+vwnBw-UI7h0!7Cn zWj#DenOA5uZ1?Ei?zC8y+zY=YStXnmT!eUdvRE(Sz+SFpnh>Ce2F_{*zf)u>LXrEx zc=m>FeC9qV@g62&__ADj)q4Lgy6BZ4s5?-GX-Ce0nZn3t@ z4&tlX@A)NQp7eKF(~E1Dg?U~-WJNEbNFLD+<^5l$>ZbMD!)Y<6pJLQN-4lzfj`Q!k z1@V2y5V55hnx6bVDb-|My*qYkQj3%W1=MqgJw6C9MZH>itTrIcT>=mmoHwK!} zYgYHf$1?}^JPTML30&E>N>u^A3QcH;%cVAM<5b}7D=!ryl$8B9r1vf(f@b+Azwl^5@m#eApUO zWr_#^=WiPY=~gXIy-c%Mj#7t27Kk%gHo>vyuo&Oh7dpM4{ngqwgHakjMVA7h)DN+Eg6&u}$JecUP5W^xmz9BnZ2(I7H22^Y$6tyEO(XnoRD5!4E(Y z+D208dM@gZkn|=N1QA~G^j96d9Vx^2oC}-L-45?iv2wPjpc4-dj-6N_z0aPOD=GBJ z+z3!W1#dq))eRvfSBO>*FMmWyE{3LmEUUYyY-Y4lY5s88MJG6~DZVmgRyO;?LUE7R zVV4xMpp$Eck4Qi9AT~Zc(NPymyq3{o?#GCGmHcyVZ&`t!=GD?3 zA9y|;HW-MA*G(@)6WR^_pnRCA+%ivZX*g-i-;*$Z)y*e=x&UaM|8N1YgzfCyTB#cG zYA&gl3et=eIng6Eh%myDmeVgU{5yy-j1~BqBIh@9@yR+ZNGHN{lv4U1Fn8;o(Hy8k zqtrG>HofcA#%3We=xMN?=2m~~T2Jel#Y$d^rq1;3^$`5>og*%#i8to3$me^Y7Z~1XhOGl0<(8h;;<} zX1`*)$vVG+tcZUE#af!?+wVaqc znNMfAA4bY{?Iw9F9Vj9(E-2l>v`MUI`&*pvG)^sW5P*T3jVex*|3`TeFtvPvB;7kS zDL#4SRjr3Wc~ZMi?x&Zk&oQK0E7j8lDplU&B$l_Lgl(-^7-f7T5rUo}Q(mhrC=mVl zww+aA8%fuoS&QDo@^if`O}gz1Q{CGYIoC2~2wPriji-I!yRu?wkaocjN{l?dxedIO z%3XADU+I(Zk3F8JGiZNyur*B_tUud}yel=Dom*8cC#LK1!2$frMXwhHyc66~3{5+I%#d$SVD{5(%%(|*8xH@4T|+D9Ef9PEGa%ClP171n&p(M( zgMK8@ha=YU->*^8zqcHd^R9z)QYO!5-(RY1wgMGa&E|LXKkKC3uly%b((cHVxL8~x z)Skxpu3$j?>4;B1$ib<^DeU`HyY+|_If~EnDzNDf-?bcatzn_WILtJ9P9=Ygfir0j6fA8frkSs_OB1 z7GiUK@KC41%{%DtHWzN3`yxe&?M|y4dY^X1V1=Y)R@E+g=BKI-lX=C#bDU`N@3${V zwiNdq-*s>l_kDtolB&+ICBE6~vQ4tSTr$CBw+a-B|DPO;XRrrR{u)2HhhkzW>R$H7 z(2#cE12-R5P;bGD_(SBEHkT8_x)5=Qxb<>$p-BDdi#@!h!M%Jd&rLq>kUg|xtyJ>r zf_xZHo`;74fYah%ET@Z~?(B^qr%S$W{jhLfJa^UE?fPv(N9`@G0wJLs%1Lq9+WNQOs1ip^q6$ZRO(O~QbtS;B(M38a+YtSviphEmQ5VD z^^GHhynM+mS-*3vKT)&aos*d$c^HrsEdeI-#Tauz^fjilpa6u4%7hNnTRLbzol^FBH&-|%MY3mzjQ z!Z4?yaRZ>r6~GEx)8w}E9{K#~kk?{XrTSI1Fu!`4G~1rILle>CDlcu}`F9$8lx7%8 zBhhnaUptbll&+ihn94A6`P?5tM`?rU1p&C?;QWpyfg>M`{`Eu%WWttD1J)#ILmq$M zs`*ij9^=0vG;1L|V2x|q{dM-uHw#NKfCZ5j&Al<=&fpPKoXV-SiWW-v-;)sbPf$+< zQD>8(F!0G-EcsPiE#}m5v2+(;2?zf5UWP)^vmcFAAX9$)qmv!1SRC0lSVvt7ktf@$&~HDs94-zfCFfU4sLdJP);FkExX0@-KreZ5oNBZF zH=iB*C!bxbr6UfR-5P5S2c-H>h4`)k?5&%b{{#nmrhGm1Q zu?q%J@liIM@`3r5Bgck~kJG$r_zgBiDbpT3>w9y^Onn1Z!)!RnBi7f$c8-Ud1N7jZ zOOH8jU+IY7LFU#mdef&xd18stbNS9(YyR(V6gqcrX4zh_%wm=o zxRMxJTjK&zU2xI?-wT%yiic;aL5Jnk;TSLuii7~Cx_ZNH%galwA%*4x%9f=U&h-)V zr~{XpyA&1R#`@SUK~1_AiG#y&SZ4)wDz)x*$v8KP|a zU0g-JHRPuoL*`$g@?_@V|4&aF#GTuQNn zC{1_lP%!Fo`gla}OU)`V0|a4OKJRh4{-#NVlfgPoy1l|XmVyFXTmXw9anj_&qK$vH zo6FxBw@0L?Knr`3^q3xA87?hT%sJee@2biriSzpyI|LU7{IPE_o*W#t7bETO+=H{- z=rRSPq$qT!DE#*pmrCrgR!VdhrVs|+Pfma&WDUG<9?y0>fFMR7fCD_K=k?lG#Wv8S z$$E&V{4vbFmt}m48;~e4!gW}+G*c3;mOGMKiuL+u)!0!cJXxwErcDcB*);Nozn=5= zMEl103WAW_h>`cE&F(zGUa&ClN11pCig%B&;<}Vs5rrY@lIve8%y*(6BtB8c^1ft-jHe1Yh$=|wit3jm zQ@380+v1K)MRsxgt{hrd!KU!CqoG}CY*`y1}@HbDY8n`#z#vXC!*(&jOGegwa*3Ar<9eOWj z==nDSuEi&H501#qJ~ZJFVs+ZJnL+zb*EYgPjr$2b~xkJ&{l|ifNy;hFj#@v)B)F2fr-e z-s}@$h25|9{#U?!4uXi>*Ns$HC{TnB7~7P0qHvtEfgE3s)$g}>qt2Cr&vN;Q@-#6I zY>#xFx!8oOrAki~4byiweBO!gg+F|!U)lV7(hNwys*$<##v`Rj%rSJv_!3AaMl@lQ0G? z(x*}=BC@d-GXCOQ_wcUXHVNnZA_c0dc>EmAl)NeDHx4yUHnuF^AticwV{T|#W z@#f$lN6u8D43R9VJZ3ws##sd&ErTQh_(hGiW$pSESN*@Q#=j3qSLCO^o|Wb2O!@1p zvQ)gen_~*ge_qB3YNs~Y4h3i-sOm5i#kBAlE?BzR7dY1wR3?4b)R)~#c{re~NtK+iVTnG?} zmNheD`TY4aCl8O`^0EQwY!MI>XXWJF2cB{iLn3Ey!gT_Q&Y_#(CNp%bWw%;tfKugWp2EE4pvu2c%SSNy+692FGKy`L5!)oTY>57KJy z_cgx_{LH0&h`Fh11CdpS2HT`Y`}xY$d70Q32@V^9%lCjay_EUs-`IE;w5hWju7})8 zx5u!%yJ8d1l8JY5@X!jLUKe8+vqB)D#=8-|DRx?s3@}*tpt`fGf)P*$RK9B$Rm2!l z{O}$VfV5fyfhOk9X)(cn?PS`ty^VR>GK}2A@#2|N$tU!!^=O-o*L_&w_YV$5ZAwMN zhP^yB)zY50e`Fn&jSzB(5d(QNXdzhEzqvocUMta4ye{$Ud){i-zgOwi3Ss8sQ{XUd zFq}F@%yPRz+}r}#f-(Eou^f7$w|7HB$MXhtm6e2ufUw|s=YD*WU;i_^s0gci(L?C= zMDGrm?^R-O%))J#T^Fw?C|tLnI0>uV@f%l6?_UgiQk*S%ipjlv$^A}CN{U2MT_Eqd zq*xRIVnH}97=V-x!4lkcZCn{?DVP%J{l>l~xo3s?!Rw~ zF*vP|p_E(akNP)Js%1x1pU#=6L*W~Llk++pq=VkYjXs8+ zjMeVR;2wj0`{VPyYuCMP6OtLmKk;=lHZ+0r~B(kQC4c`x#SEhltS#n4%_DlJ&Y;D`S|M`k9(RWRG)QUuwO z>0hfb%BpJ-{SHBBJHJDG&GwN%Dg`!e2X|-3$JyWY+}+)sZcZlEAihZY`ua#XqUTgZ z9J-;#sm=@;a0-5FByhyoDcts3;|<95i$;fOBZPgvy^MPYnDB{uM9P9BVKTr#FXE1y zG=Y{LLo2eP#DGk%rj=}0PLz=a`qkd3y(W-;BakQYil6D>{kqeTW=EyjXTfQl|L%J}XXR+n zA?Dz1*IkMeAUF?F1IpBk6+zW$HWjgvf^yqPc}?2@aji#;a9Yn7nvc%L7Y}&V#RxlgXEOZU+~s#AE6A662oR#|Zo2SKD~1_{e7G3MpG|AN zI$IM=od!0{ci!EfGF#h`5%l(XKoK#m@Cr_4N3)z>*)r7qP7%l1JJnZw$95N$@N*-z z>Hd^*CNRFZ^XAcXqnZi)+DPF?qa2Tgu`n#_u#4{El}_AK0iv0uXD9%z6ID0q<`-jr z+Y5p+*MHI6G<-VeQ%lHKcZvbfErsTgR0DuS@N?&$8KqDz)=>f1mQym@1uH4K>S)M1LSk26Nu)f zXw4e~E9)1-CF$w<*LU9HE-y8=z<*(?6d9o-20YK1qvPVb&Fg`xpxZL0UJKC3K@Ob{ zI@_(^>p~-b>jg}z<>Cm#WNeNG`4rK&Sas?Mz=?hUT#}vm+8`88NMJOQ78qXLM|wm` z+6JU){J<5KFBh0&i-?bmu*gOCIo*_A+B(jR@woY}Hl{rD+EV$qUxZZ2R(|-;G_v(c$-O-T z(R5carE2Dj_dBbbG6Z9a~=TH3ps7-o-KV21GOO^^o$E8_4r_| zipVqxoX-@Sn?x1rJ62$$*!Q<#<+Un8TXPrFKIKwQ8H_?OD}UYvKe7P?HqPJNd!OHP z?3!wfTeh_Sr@3VsmzqRX`Ide1{O+Zk+`Fo={D$_so}QlbJBzC0`IE}BGCW3wT~%O`-WbADnybD<|wz&WV9NqqP>9oUAIgGz<1bhn~@tSN@I{e3-|Kwu9d}OUb8zV zNijnR1-zcU;Ge4XozWk(h z;U8NADYNxL(L(~Q&aFyts2n*5Yw#Osr(B-FoJ!cr_1oL}LbsB#e%+t092i8+5=I9_ z)(c!K;2YFiwUs_+y?Q!^d*``x-L6vXTe;TP@9Do+wyUxze z)jLWG3I!Jra`Ie`zF0Kd53jYfNY)1u@F(p+5Zzy;ymM+>)OFo?>eRSWe<(wP=LX!0 zQueD6+^4qEn86S2z??{M*=q6b_Uzku?CV-qn#|BOK$t8yV}hwBgGq&5)RtLri|QC) z@8_o(on$!v(1uZwV9V@FL@c$v0rar!%yQWre?*(1Z6*(9U&GRCt<-IKU=IMQ(Vinm zu8p1EjoTLVpLWl$Vcj#o&a(1!bsL9jMK0hCcLYnDv2OZ_5Z1cgcEx3vbfwp$F4-a7 z2JGn1ha3e_Bjd#BpQb42iuBZe1uFnRW0VTKPF_N49|b^EycrQd>ME8Y3O6u1RCD87 z+k}UIOJ2v8!3|tw< zdKDDnMZ9+}^UxZt*j0+cqt|*z^05A#avN9Gs5B-hZCgbd@Ha5V;(q|?Oiy?^HKABC z#U|+sOKS3{K8Z?}ZuaEdsbD(q#9lQEK?l@eqXsHW=7C@FQm@3HDL-6PUtZFb=1T~< zCHzUIAjV!4V{QoGcOSrf;38)5Xex+P{R!o!E>i|QG3tg=Z8wz|;VgPI`Bjc6*$gy>SLWnee;2l@N}hnw>9kaRHZ?LBy1&$H(YtN24z}UOBn-vsH_i zXgD%0x@>*Nr|3VGV2+c{CiE6Z>JBF-yNi3ORsy}jIG@k;PUA(6@O(IRWMoT>I`&8_ zhFrV03gw{-s(#6MfkcAp>Xr-(H+B9&*rO+ln-e@qIRf z4hUFRoXNlEiQAE#(UK5%e}B)jl&`)SADJToLn!shi*~_-<1fW)&oZt&acYuRcmd_~ zTUzRmFf+QX@!nNV#`_EG2lgQ%2hN506XQdFBtG)fd#`zSPuu z;`>S_7EWVx%8lrdc8S3o5Kfdy#biEg?eRq`UuU3$F42H@rCoMExyI8g z11t1pbPgU`1RW6Maex{)%JA9u^>!ai3GD99%HxQPhmTKjS|N93w}qo&9|c^-ythv6 zp9dOnH52S@nxojm@IhD|J)-r+TT~u`!|W$Za;8KdF53}C*rP*A8F0- zC^FE`n+>OLR_7SIh4TQ#&>7Jkv-JV}rf*CK&XcUDSnCM_r*@&>FC<^_=N-9U)JP|A z-`-V8aLAx8cWAsJf*t~TPOXI$5dOA&`q6eClZ~M$iT0MY;=)M`JW5BNS3=Ut`yJpa zuAdd-Wy!h{&;~|sP#3%vv{nHBw7bk7h7{eG^*!He-3|RcOu4uhcqJgYfQthdYJXp& zbcm;%XjUvC-8m&qDw>AFH)oA{d3Cj#I$W$%zwgiCW^jEFMgP)z^IP19xzqit8xyNE zC%n_^izCA-V5rIOe7NS<3_PyYPY%_KG?7E#$NqJ|MfORxCpZ97+$N>YMJs)(r(zJd zeZgvFuD4N?ueMKSv^Qva1$&vrv)}07J6}yfqKhfEcUk(ZhwOX-9{s00bO`yTZFiGC z=(dnXm-w;D8}^m^Ry6zoi4DRmv zZvfeBLwe)1W8M9?G$60KX{TN(s$A;;0|8LZW1>Xar3e7t;Rx2R;z-z)Pz?@UrZO5L zgoQsW3_iOW3@SbhyB-X=<>wkKC zhVZddtEB$!41TEaNcR~X{{WMw2vmQj_InS(?2MbKq^Brrf7NPK!Qg3nl{-`{6e1u_(7J$Cr3`PxdeTnLSF6UV!)=PIcQfM zs?%9}m1S*m2k}~@x7^Z9YHE5EDt^OklT>vN<>3fZ=_cc$1F_quKl-VSGS>}WU_1k~ zD;!4qBu>}XImn3ZcVjeK`)x#MJ?_!RAm?P+{`5AX^$J?tgl#E+sY4D71oZ=c*{unZ z(-bHZ582cD+c>tO=ql$`PDwAGo7;_fkeFy&&4{sy8=1oN?A8WyG8Z<{eX6FF!1a6EPWkVFL#3CAlha&qp%PYNE_|>HK&jy zC-xy0M%aNLX2aolXctZ{6npv}Zv-n!hiRb!V}Cz0!LQec#{v5@BDd@&u1LZj`2m|t~+1m z-_3EN8|jlk?BycT>_g%FmAReU{p*sP!{>tS5+7q1U7u5o@^7`bv4}StnWyPt6g61< zG4-!xu6j}kc`u?>Iwah_oNj{td#3+}Y6%t{@a5Zb`g8Q(0!$PoOku`pAEJPoOGs`7 zc=r6&de_b+RKw_vy7hbp1sr7t24UwSD}%Hmfii@<=80WrQXC7yGqmO^v1tK{Y~Op& znT>c2 z!_&&rvI{ZVg8*^^WfT_^P7nJzx>Fn%f^t(`9-yM4;-}j6(#I`C~5xZeuo=}JpW zY(RG*BkLr`eSCI7Yd1}Mc|QafZ+|CO+{UVc)Kv>{$uL#dy06&e&wm_sqhya$#rZ>y z(b1%gqKx8EokbW-XLYJ*Myk(C%GFdN8l1TiBiyUacUR5$iQNEy^hbsZlr)S6H*l|C zrD7VZ(c@k56M_fSF!j4mt}D9TF(V+ZJYJUBD;jp%TCh?)_2p)mw&u7(_;h9atK||M zoige@R(N0mzsKuo#*}Z*>K3dkQ9HwrcNnE57G9pUq_3P~>m2W)&ypdxIt*1Amek7L zNLyYdORA){+kZycv{|Cu^?An}J|B^;5&t9N_YrRB>b1bw)ngP?sjM!Oo`@EbEus01 z#teRDh(FB(sKC{Ts!rbJ)L8Y77s*QDc;-`fS=_@5eal&P zH*%(vLPk}QS3eX-On8bfLp5D{B^CbQgCct&VMLUgKWf zSg*KLWx|1=U1{Uy>kd9KCpzohCL>xbd;c1qUUOyiqy04(SzSi#)SlY+S-iK-kTaD~ z(Whs@sBhtD&ZTe?e|N4QyMC-~?wo>Za4J54f7uJ_T)X#`L}S}79o2L_TNjosRTP-Y zrH*h4O|?oDoWl*0N_UG7SK?+*=oQrwY{tTA{`Bm;p?Q0+<=U1T$h$q>6upqdyY`4v znVLu+Tkf)B8NR$u$-gpH4gE||be{@%Urth+j5MS;>%nZ(7!0f5VDn!f}%#KEPG*D$|wP$m( zmn&N*V}0JE{OA~;qv+|y{W8tNxl=>eWs*?$X@{?q^jMEBo;^_LD6{zBB8H7sLsbAL z#CBrX?%x#M!|n!>L|)B%BFH*fuTIJ|Y_73?y;vt<()R1Mu?nYscihVkg*XdFwAFe- zVxhqta@dnaiLs*KpeF;du<`SgB2ldn?>>L=z2&KrNu1ko6~f7$v#*&*dp(8sKMgnG zi45+PT^aGvzI*K7N?HF*%kv2NI5E}+E2-1{4UZrlG)%q#7X3Ue_E#z-3pBnh=EDtT zBT#&hfsu24LYU6iQRr$CjX7R)h0w2r%*Xqn0wtQT1FBCEtc z=`%i?c#ujvm7Bc%wZio|e}u674QeX_T5<&ZMSAY(+>dtX-_%9!yO(+Too{(NxRtYa z7)H3u)q(xC)lr)La63_udv5-_wWD#j2lKC>Ns9t&T(G+lTkZ8ou1c;#D_qchm2Ns7 zu?rJ}L@Q6bG%^kyXJ@UC{@fot*___Vjm(Q+{?AU2yCMjZ%3giA`>*Z#&$rhjj3a;d zv7AQQkT8P^V8LK(R(!xt^}KZkptK>tvZtyn$Uy1O$O{+HH|PeSY+*v=l@TJ+seuUxdw#9Ag! zY%Odr9DT4|qA1|iC)e4Z%FFhi9wPdWS9-O-)7bp#TicSn{b_Jvqv1%gG$!r|GxG<& zf*I{z55J_TC^lldPg3+=)FQdtSw>nVT{8o7#NQ zH?V7`b-UTpBObD|&E!~!GEfmQKKv(TAt9Q4F>divaKVV5NufL>Rx*}Lyksy#=I0xF zCf2G+oui+`hFK=>1$uOytOYEghBUl;lApCOcS*r~LJLrRTW^p**VWJ1av^v50na zBJ6hDFLWCNr)$J2uBq480#1?3>5p85SDwg*&9lxAtM?j5-Sj2LkG% zmlW%2p>pJe7mX;XUO(j8TOzT%%hJx@JtwH}ULJa8T@)EIXQn{zaGa(-M`Yx4;mEz9jSz`(=Sq19p$(! z!>;XMLir)KPgm_p;N{Bi{Z?Fbp_6@J_K#(U}1?QUmFpAtYieb0?2rfKTI0g%j49ULwh# zc2W7QO?1-*`ivugfKOe(m}r4b97y^DBIqbH31gH%pD-!R^`3j6Wn^7r?| zw}&e#;hieCjisfy!CdN}OooyLMs0fK&o;-1372wbdD|J$g~&-KR`rNkK`9|hKbOl` zO&(Kqb?v{Ao}bTNc&eftM(Lytn-Cl46QqVAE)0-=fW*TTd=h{|j|USThF4!8k@~b^6JyWusGe4wAhbw3|}!AzCPZ(C{;9M2=L{qQlu8+w5DmA z>~ znNK>7BXl_(TG^?7QMMsWlcKj!RM|p6xx^nHm;oA1qY~a3hH*wen;m8@vnRK{k~PQj zpj^bXm{@HaX1n6(Hwv8!gDOcU)bd2E{f&Cb#~3W>6$cl^>VjKatfUP0!@?T$&bK@w z?giRtJk9u5AsNLYoD7_c=8KB+H(5$_JH{FW!B;%insoy=BU50+_W0uAtSCTXS%}k) zeAva|4bI{EY31J)vm_3P&pIzu^z_X*A1QcxMlRJD30|q1b1j4U$n)8ZslCVbZ$9IV zk{IwMIc=9I+MMM(c0^1{#A$Q zw+2O`koRq!4}(HqAeP$blIPdzOB0G)C4v&z@74`=6M5IPQ^A0dIWcDQtg$e)2cht+ z|8AT{#h`G+7WtoKB5_x=ll$*h0{O|N=7+XfsFdk(%AOkpNU$xRuj+FKf+CIo!xhkP z#fT6R6kO3=U)%Wg>sPkBmeiX=<(1Pc&#?oU6e4$7Wcr7TcF?9CR4NMgUgr_rlKD?@ zZzHia>d)iSHifx+*cM)xZC`r^8Inx~=eoLdEl@HEUFaP05?vj$_EYC4|HIl(lNY7O za)BpRNj;p{oncAdej1aG`Rz%r=TB~~lSeYx(@r)3#7?k{on-mt z5N9vz!Gb{7q!9i3G`WHw&B|FulDa^o)lie`&&?CT0d{;1af@9tIJoT}$31OcRO*K#bT2)7UH_reBt>{xzhSFk}of)2^TT41W-LNo-<;E1yP=v2hB))isswP zttYeWZ)>dER;#M2YU21V1VF7|sz>xCXW@~k{G7)zhkAnW;FiFnJ3AK~RFME@+`J4X zFYQCr;OswAZx8^TFGY)3a^1=FVY=`fuus3mFa14}EP7n0b6aDl-K2Dn@hT?|i3u^r z_)ZbC@Eq@#(KvYKfI)ll!TdmSL1}JSVDuXo>=(83jVe3Jp?NyLe7C?`qUX;~; zoGz`&mcng}k6(#>8TN$lh#SOQo|L_`gr!UQtBEnSU#KN74m^GUd90jn$amJeHhdIi z9Vt;F`KoNKu~G#FC1uloAWm%OLIsoF689md*w6^fb#?N{n0vZH9AJgXmXkmkC;v5q zPwiPQe)Y6dc7RaI!^2V03;&AhR52E_t3^$A3N2|S^x|W472U{yEseltGHhvrnwy4v9Pq%~{?0;y2cIn>V~JuBC`H3>vvTkL{rgJ} z^>|Rm)Ayr@=75d6UfH`&ziyzc{$zG2i4R96%f{`hX5P~N)2IC6p4AfeQ^ zjOnMzB>Cx1RR&Z-kn`Sj>@co6hM}2AZIc4JaDHCklkIy&^xVztDSN1U*UuM*baC7c z#q4f>Zaq@i?(Rn2VIL@APCl2_&R-i8?zN6oHgwG7d=F+_o-R`XO!b#;b=1a=6C92j zyVBts<^S~0P-Xra=ohcfA+t7ltSr`@qEcQ&5uq;bOEvBKp@2AknYx3J9lGIeO-`Kpo z9*^B-wiI02MJf&Me#aZ71|20s9^+9Ht{_4sd?mi9d{Cx{{{ts@5ucns>SoOGUSOba z*{Pj+d$}ZzClhJKAkfozTl<6I7D}KBqSX5NmfeuI8 ztSy@eah(C97H_q3|J=Ci^DvQf{EI}5_l?wwIG(}t_9$)S*DpUHE=Q(aWu6eLuaxs= zcQ&(`EYf7e;a1jF*fUnJi>I=PXZux*te+3lHg&2 z&ohL^8obGCnrF{_R(1ZtMfqyo4_jO^=qq+_8x0KpB?oXpuz0nUE)4sTNnLNH&n4U0 z*~C^v0YbQdjJm*cjtgd50_FW{*Bw)>v(^!+1yP3L%z7{Z6=Jr-#MYzoRP0~9G@9=K zY{CX|;sS3yZ%%&y{=L-IGVPrN$VCrk^&ICv;ZukKfuVvnwGk5nppW0-*Q^8Hm#9Vb zMcwZiH9`vJ4%7cx!X$=<(2^tl?X@q*zIdd~OOJ*TGPom)A|s$EOq+nBY%s}dr#Z5k zB@M^?9EZY=@{c_|5mfLO;?~V?%lz9N=z#X;0T9J|84!t7p`-@^c&|!Z;L2Jj=|dui z9vbXxA&hvve!{ubFdkaNhg#y9u41^ttIvAaa8M#)4gHq)<;d_|Iik=?=fDtPMGReKxS1hMXr5s#Tz`XvkG(=H*NaR?NsFV7tUIZ*rZ^7G?4^KlS$AYylBOg z)yoXgX?}L=zQQe}jTe^VVSc%BlY%bY(cftEo*XCvJQ$P#o#*VaB@-{mz5f&Z1!OFJ ze*O9Vy9HrQCq;wL(UMnE(p{id$mx1&PC!7=Vlt4d!wpEv;o(qLt#Z2Ejk+21% zw0%CUzz^dEYMPBMPl1I0)23@#N_PUitHg85c}1}s9-tQAMaiL6evkOAwfBcu(ArpFQ4#f^6fE9e)l5a7X9t5yZA7cg*@1t{*_(}={ur;H;c;nPLVRT)jDz! z?RwMFSttd$W?8w#2>#@3MDrtm*~buYc@N$IlAQ1=%3IJ%2wIS6(dF*!<-%{5_&{id z!hPhs9?5r5&qT3lyV@}ALlpxB`xSn*NH0EjbKkCPS?Zkv++-$KG&%_fJ0K#0v^0mT%4@TTw12Pd(P3~i zk3)1HFo8#~IgnDIVE%bI9i*%0K6si(D=_Vimu(Vq_U6edO0DDy0`EI0W2+Lt7;J1a z%gCnvRB7qM=7l*}#j7nZV$d#(XT+d;7>0vMM|ccWl77B2j*-M>9vqg;=wuSM`g_aA z5`t`Mox<}AlZ$M}Vn~S@t0V|+NfBq=6vkMWr593w-H|pkoW-$?cUSyvG6l-FX)hSP zzLC*Qesy)&s;p}+1DJr;f3q#X2sFiMmw0^ILmSbudJrn6TWd>yyVZP)Nv!8)({k`B_-AFZMSej-~*m`uQggHfu#kwQSO}&$IIsuG}L* zy_}Z8Hw0b!#!*-(Z{OP}KF>^HW&9ha&`>_;4b`|_rqTh%#(tJ0OwE@_i%Q$PLn$oIH3dY-*sR022pj8lIu-xYFbhT5>DDMh%$CTc@Vb)oI$LWQG`^n+Dtb4UpnplU& z;L2kSv;zfEAzW3EMv_)~F{uAI*{0-AY_TE^X9G;>zIXOB%Ih z*g#{TKg;2*SA?u^bGO~->;%(DICVc`sEpm6c()TW=@iqz6l6g~)R-C@D?ZsABIpk}9{8Sisd27;L zWq#sZ@NHN9)7ecuyI!oSq8hN+DEOnAvLSj_Ve586y0pSk_C3Wr$MiQW(VIVSmG#Su zrnwC-EB!ys0rt`DCPNajFr>DDp%)J!*jG7XAuG4+{`@9OoSe&QR_QrG#KS-KzK%7- zO@4p6`-CuBM*1Q1j9yS(_s(rrL*vU^=MQk3*DxWA5c_{~0ir9CX z%okgaY@>K}R;c`cS2>E|V)VI-h}(mP0IH?cHAGpHy*u>u(CBNCq%E|sEYYA^Yjn3} zC`~&w)9r-SY4+@_6d8B^`LpRuR$K^jOM}24tH5q1D2*R(l(ao||6+LITL*JZ_3#I| zGo81au@v?Zp}9rdI8D?MXXd~eS^2eThRb1=cNqrngJUjq;g!Xu{lZ=X%E0z1tU=C{tP%BfCX_4 zj&Un!%xAmmH3Ru=n}bebLm%3q{DZ83o6_pf~4AxBH1) zO`KtUPd&u>kJ-!2#FcbYZk-I{oi~P*8uKptOV79AJ3^Vo5_q2uIb(IPRg2=av|!_Z z;0wEX7Jds7(^?E7MrAa)DK|157Nc$9VJ_LP&Yx zf{+*iTje*AS@O(+{Ny%D-r*$i-Iva6QU8yuw+x7a>$*VcA%`v*N>V{u8esqhBn9d2 z5NV`yXb==6BnN{KBt*KqTcks}yCm=7dE9H3&yX*1~Mk1C!5n-{6QJ|fnfdOhqixiF^l9oSRpnKm) zt6j5QqSse-)8akz_xMkWGcm#WD96ruE(Zl0=$4NNgLr)F{E6$r>A4mar4YdJKIIpo@cI&TAbe`-3oU0k+(yIFBPO$XQHeypko+w3XRaCE<_Jnp&f% z>`WB6&de&KgwG0YB#XR?WUK)PjII52y!bn!y)bioRkgT+kt&wCeukT#UMiWv-rK{R z9I(@kcpoV8G7u9GhW~CEakemf`-h~Y%nK0>0|X!@@03;0`MWeAw$~O$Kx0xl-R?aB zS~e>jW~0Dt_yzDNK-%wy-kzSj!JLZ#CN~3IX4dgtrxdO6Vyt+-vhkW=Y-}uSo|4f5 z>v$J}R56jVL?0?qnA1A4`n~q@9LvJvy^<3MMSo5=Uh9trUK65we8+rqg*LQEwU8Qs zQ*x?dZ>_RH7VDqsFT?C9{#13pju5a$1{@p zW!TI5dpt*p))zbN(BAc4givc~L>*VH3ni01dqU#jog;E)_9@Fmgy_=`V(kJ9}_e93OO zrZux+_j@uYmrU%_*)zXyU&G%9M*Ji=U*>w;4$l=*2%!L3=?J6gx)?r*|zt9wpik_^1LrYOlaryDfUO!-Fi_69fD!qpV4dRGPudv zN#Q{S{`fksI>pv}BaEHGqf)TtLR6Drb)}p&ok6QA0?(`7rfjw)<8dR5x;<+${x;+* z&($Kq{tPCam;Pb;YDNmj>Fq5-JSX!{!TsRnc=1r1U1R``;D@ol-Z)+KD;VV33h^B* z7RjPixxbrOT7<|SVygT2`uSk=DSAhEPUBm}8x~$mkya6A)=Vy>FZHxp4x=c91rGb5 zf$~!DTPVj)@%{{o4LwO4{9DMn8p`@)@f`dlRiTlKybXT+85KVUOHGf;`t}nNe_fKw z=dTXEs$jRMxPQ5Dm#ymj;7VwUEh_5X>6;A$DT_CKCz@DoEZnXY(!9v*NW-Ul)#2N=o<+z9VRu78h> zWfv83ErCsmL}Xf>xLEhw=DrJ4Zo-p{q1~cKjeUa7=|#D9q9lIE`Krdi%j()R5syp@ z<@4?YFO#z{BoxuqD+#%|kYHGkZWRCP8b~OKO?EIzf~Noz2v9-2s6&mxlIAr(eG|Jd z#cz%J!Qh2imr@rbiXku5A;!mWh|F> zNV1ku=NaO`ZhDV@XL<0dWib%HG{rRGE69ivH?$A`*kuofje5QP)&|cgM*l-((mgl$ zG&LvNPi=NBk3%a0;eCoq{HI!5LieENi~5s!$gEMF`-}8NWDDPkizwthXWJHGz9jXR zQdc4rgVI8S2jFo}rt|6d{ss+&_g5@wvapw8cf$8)vY&wTrBjK-sH}VagezUUCCrv* z3dG^BqnVG<_;Y8&L_$T@>EC8t`P5|%z(H{Pf!-~Wx5?=|)E>QxY+yE?tn~cjB&m1V z>4xKy+gjl#L6wHhVP0gYfnGN0HZZS<_iK@1UN)u0=YQ~uiei?TL-h*9hool-Y61HQ zdIlow5_N1w=J)bkB;?i+6f}a})34_GL?zOQ;V_Hx-eA1X43R0vQHUvHOn-Ok{a@ob zZ1{F{(DOb;sj=r3+?a-~o6Vh5i{gcOT5RKj9ka8?O2KR3ADhg z8%)?*`N)YRZ%Suk`d#f824g7JgTVvy1NFJnb1%L+KoYd2|m`3Q@8-FNyZL)`_zj| z>qrJD+B)6;#k(cAvs#q1Fzg&OszOnOy^q=N`W-M3a4mes5awWc3~;|=^XwYq z*NR9PC+N2~E7_$TUt=c6SK!Q_GHzrVcoa|EG7vEjp+EX#U5DO*MBAe=I5a1DPpbH= zP;?K3mr(NIOX82zMZ#@x5h&7E*BhoidtqBt2~7!5FzdZvt|1Dsr1Ou1B`B>iM4oE@ zxH$ev*zI>)L(+cqa-|OgB{VUx%x)y>(6!L)(+T`cpbZ}HO4JT##shEwX1fb}X~?Xa zQd0lb<528H{Kmn#^HQ;K=7^!?eOR+L-AuHaa7%|R16b$R3PxIEoxaW83!e1tcc+>! z%Sl!yj_t`B14`BImEHvB=D{b3(JMIyG8NB{vrPV1JMxWuR+``OqI+mHxIW(@yMO1G z4eWM!Src$vhKuc1p@TF5IK$>pN}~wS#~Ma1gU!fqxh_mZhPBK=!+OhA4N;Ck3$HA7 z7?gE^MvYsV34(7PW-bh|)%&HnSybNi$^$)uzqH35o$F>TPk-oB?_`eK2uma)>TpP> zfCBOsOWH=lRm-?rggr@^ojC$wZ@UR2dk&VnWC3=Zg!yAyNAXNoVK^h0U&dYI0-OA8 zOqo`I{m$RO$#}X>&3Y^z)mG|-cy6`^Lxn|#yVVXN7U|f1u0Ed&b$Xd^KILI?vSCaA ziwT+<1GqB7^2*MVpT0ixjc224Rg_d*W6 z>R_CEsVz`dH?xtJ)?`V5h*ri8Dw^OGES%?Vf`2b7_imljZ-!B%gPZDHaGlj`O}XY~ zkvCA@WxU16`rVM^zuATv?*tBL(#!%b!B@EV&lULhI%Bo=JWQc|0^q7SD09!-*q#K< z)_N@6Ib7?!j+_80HU;v#Q?)^f&Z27JWea6PQx8i>A2u*Q*3LfJIQ!XLuN|9jlYZsX z`fOp+v0&VG4!^J}>FtuTIEdMrX-_&AziD&RZ$z*vWq!nd;tBKIR%{y1&8-}~s6^Ag zWm9YT@cIE1Et}_}&Q3dR^S;C@UoMERpxI)j??FX%08R72yR=4|`_);W>5WW~tr>sE64T`-IMl^T19JaWI@ zdifoV;&P23G%sQ2;;2nMCy`aohgoisoG8fPo((P0R=d2w>7UlEC*z`hIORP}Qx z57XZWGDyphC~O_j#Q%1SJ8w_PPX|26>WS;YzQf7c_sciwP35mhgbvbkY$xipovT|vlSKHTFYBsuBvfk54(X%4eFAliW_6y*uxF5Z zBLWFUAEq9|>kS&h*dI|1T5I6OlgYVXOjWh0-?W*A(h$<7d{$zx_PE_E#aJ(}#em}( zdTGK zf9vlI(0jJ%;ZG#LPepta#p1fdKdJ!@J*0Ld@Tt`TyG+sAMiH0B?xRYLr zlBm!58PdTvsWm(5{A{a7XuHe=v)Kp37>&0*utg!n(i7aKjsKK4+sQ;`0x2Iw75}mR zq&|M7f&+Fbgc+rh0s7Dwnv&~e`D)^e5%)3#`efh&Gf{3iAL=CO2gUHa^N;XULl`)!y%QrITINNZR4v1`VP=#wFyRM-_2sG0S??Gwvbn?A910 zaMU0(ndi_Psc^hb9qwX<_{TBIAs9z97OcwbXuFW z(E}%)ipm`QG4^Y8GDt>$ox0!RUCqLr00R7>E2q<{uKB5|qnFWm)Ds*5&&7gHEu&@#S%;L!j)kwD|tul;i6 zwUDFLHCmHRu{cdlnV?^6=hx4LaRJolJGFrgN#~WuHQ47}txcB!sAPSnmmg6xMBCtr zMS1&Qv!}ksOpkBCm-`E)x;wn?;w}wI3uZ<>WT#2*2 z(kDg<%&+z@WXxii(A&VQ2vglqsWsIDe4b3p8oG4aarElFbs2kQsiier2U<3D@?)ylg+H@) z&hIz|!z#HG=RYbwbtcNVJG=kN=VqLRg~7jmfOmZXxjp~!SSY$ZIGVeG3TPUrs{!5+8Ye!jrzZlLj1Ekf zHZc=;qqMel;5Z&ns>~cPO=-c4HT-nE#CyMV=6$rmD>tXoQmsdP2OzW49GlLiqxmf& z4<4i=f`fG)yv{(7a6|9?{sWqTvk)u6!t9@(CVbK!Bkvx7yAeF+9JpulQl9Q@XJ{u+ zrzR%QQCeSbR*gKp2x%MT3a4{c6H*gTe$A_~kEeqBhRuYJ#qsvH0n+8XjV9!wV?WJ+FM6A#~>_6{k4XgZLU&r)Z zwETH;9QUnJ!MN<(<}c6SD3ZHO@b7(!w^9p=Hv^H^Sf@0Dlpv>mn_qdH3@m6esQ%U^`$!xtQ%uOS16dIi^&ddffqKkQaWdHVMUD6F>k zPE9mzF{ng~poM_#$*!^kz{u0UGe&mSTNmbbkc{F=LaIrt=@OG0z2k)IUGG10=0Z~= z*YW4)v{P%1Hzy~DfPeFKu&Y`TKj!Oz?_gib@vtw-RF-EX7Uj;BJ(_hiwP7+SFj(^C z2hD=S=;W889~O~S83+_)2|m@!LZRQiX*k{Yesqg;Ig~BLANA}nH%#mz#9|4|EX1+3 z=lbHj?vpiJ?@mWjLeErR`6;7|hWYBe+%=KOu(Vo6CO7w`X#_UX(?(RM|5M!Y(GH7r zJy1<@AHDGY3TDCjH!fj3aWkEbY3oY!=t-D)ZU1eo{ChmwiHHCH?1q^DJM=m4;FHVk z{H*z#)5^QYPk7S$3#p_dOtCT0g#EAFMovIKNCz2@BdH%}J2Z}Dv2 zPw@7qJ%GliBV2G%YdPv;yEW6OoYnjvIIVaDCDK3NwZGMk5{M4yr(Q(5>zv7)JPUzf4==TWhC z8ua8(eZe>DpIK_c!GqTa1mdnHR%Z#n!BWQrGDE-hsyhz_i(vMwuwnUP%L(Z8U4f!c z;c&~MCU*Ya&)n(HH*{PgKvd|Nx?fo6ZmKG0FSoL)LU`&1j^k2pbC)NP>W;P;axhCH z@UbWujfJEbA-vwMZO9Y8L0fRQ_CTj5Zi5e`9+P&Eu{6~?_J;=zHeeOjWVRrg zhaVTx`4)1CN}Sv9rj>ls%h0K>Jc>b;@0REia@(C}CVu-OgW`*eLah9#i4GBjd~GfL z!mE0L?q_2!x*IN3kdsqWz8?F0dTlrE0g`l}sdOwI>RMDJ!0 zb+h*2)S8o6X}hAPc)x0?yjjA;}z!WNPi%o zIiu?(GY1}3fPL|YhB4iXJ&x`0P{Xv`Tru~n%YRo02YDhL))FUKNrs1>eDSBS`tGWhuLlz#j*Xaq1acAY*`@$(BctuS z+&cA(0HGqcjY~TJ(Hd{wRR95U41af?y;1#Jzpf-$ls~+qB)bLx!~Y?ycn7tQ@n&F% z0eT;>CNgq>&`0ug(CFl_2g{4*EjfG*n1A;x~g zZ9FEc#gt8ImbC4`*gbbMch@y+0p;kMc(zDHjtdl&<5~zXP}(JwB&$zAI43i^ z{yb)qG8ykvQIZ4U&w=qVF;0ElWikM4nWKweavQ%6}u#Q?4xDH+M{iQwfl*Duhv0&n+rELoL|4WkOx1+#$ zdy#OycwIX*V12Kf2djgXhw+%Yz%2?R$a$F3A7?*z|=D&r0N6;dYOhd!C`%33iM3tdOtRym_bby zvi30Ca)v$^GB`OXHZMotJHNNTK^au-xbir~0{nj>B9af^21y`~aTgilB!P>Qv+<>2 zU?B;lzsPlnuUW*#{(ejept)z;qFIMOaA73Xv31aVC8%1@8o4~DFvjscq&B&>4y<-W zPiiErIzU}W71Lnzj&FmzK~vkfnyJ?bTE!qZi^!M45LBsI(UU_NRkYfh6wTL)&ld~+ zfw=%4eH&Z6>7}h^@6m3IYkLHJNYn=ZTz_}qoB4}Wc-&Se`F2x;I1AJ~c&`}iynT6g zckEKbiX~@aBpc_lIU1%cJHP3j9DR2WjQmyhmM%!ELKHGaz80-w;MRDb`4aTf8_oEh zLAQmUL>!nof|MwhxoK{cdWZZdj?C*%oDs}-Sjagy)?AW$z`vb z!nO6oKk#m?CbzM?;Q|3A6$?KOGAaMxyl+NzmuVD}xg<_p_4R4~wF$ST44lkA!J_wY zqf!_a#oErJ;#(hFPcuaztQK4N_1pAUL-$ag9FaJ6OQLJx`f0$&OSY{@i$Q(^z#Ia#+0JX@(k+*~V%8H&p~Ct@QHLQw`IRF5kH@sJ05ODE1d{P8Q#VP*v36@`xf zj_%o@=)#g}&o0x3RJ+T9;XJy77wmjt?^AI0%NjaW2CYM zkeBB*-M()wx5X9e2JJ?~mA5BA=qW#t-ygJkQ8YT^#U~>6U;tj- zQK*zQ^qUFJK%%nF74EzFku-YHNj^m~7v+uqw)O|j)z62}f6{zm#ZmJuYJ(fm`9ghD zZYH{e4{ct3pnC##Iv{(dGafJEOW^0!3U^6A|sM?uFxj7_fAn87@7~?t? zu`_4EtW85z_O$LlTmO$2z+bEQw`SPaL_24-s{uHG;g&GbX!-k- zBB9k?gQZrluL1XKtmp>4&s=-nJu1iZ$qCQPLY0zL+P7%K`zbWcc}t@B51T6ev$cI; ztWMVbi%3S_&AD;s`B>6I2K0r~yvEQqz5axTgXf$@PA1gOkcvT!+n`y?zpT=zi;5ue74&sgtH zQC@8jT~eJsMU;T!z<~GZ8+0O)Fauk5XwM_@ae^iLfkw>pZ4Rj=i24>Y90er*d=1eC*t*_8o^{X4N}Aq-t(h@K2#Nh}>qV~74&Mp@wi zmyA@7rR1u9nAziV)WXOQqk^&CR#FW-^0E)6a5rH-I@zwS?sk8KFeH(CoO|2M6{uEgD=B!=yL#x^Dlm>3Sz*2|>`^1aUX`{cu;@MM;0 zbFW>KOH9c*Hf`o-gHcSiqg>kV&W=4zOC+kh@oEowqVw6`lL#PB*nj@do?!Dr$sk{; zYG-4?^aM%~5s~$cjb=@4!_e$(#ycjz4+A9BPw+-0(>Sn1tJ99w)2vIz`<;l7Jm?gD zHF`8rbV01fAA0%pugk*Hbl|I9l*1^m@BJkINF|$}>K;JoX& zX~T@2?m+e%4mQX-B9M=dn%a$j(KkBcIn6^XoHbHMc$Z1dHwWH8qhtd+8?d))RCk#u zlQtf9k~H5X|EeV*wRr=b@tC zC{t>YKdu6o0~`p*QMdZ%wf7!A{nMY&Kf6vpcJ|%-NX6^Q&RpXvVS4g41=+IB2VQit zlK+OaHYqij0G@$MH_JqgI|opPZ@|O!pR==3J?8y{e4o&B07Wwgp$`r<-95o>-pdLL zV+kL(2*k*+2zEpbWVVLjyvZ@BJS$2RbJj_6pO72nWXtnyKc6AECGNw&$|!}v(!D=m z5Dn`Hx>9#XWqrnmXC*CaRaTKxD$JfzHCfY2OhDJj3{4fsuB&^frT#N4(F**M**3he zFKl4#<{W;Lq9~8b%JDTdl~shXT7(PMa=5QlFK8`1${M2&xbj-a1aH;!DGu1tf5-|* zXoJ7U-k*@%a3%O=^t~1aJ^|uWcR^Sv70zz^VF1poXk?4I#$X*L3VA$6nZeX0nU;H6 zu(x%4bf)Edc7R@Unw(|cEJ1G^-Jv(GyZ8EyPXA`4{+G!)1($4L`L`f{$_e}=EF~a~ z->91sjbKZitucE59qDBJbG<6hO`Bqswo80+>5|Cd@6ilOwQ)marac$c@BOA%JBt-p z%{+9o-!ot4_Pvjers)6p`+ySfeopg?|E)J+cPz~j7`=mva`%$!pZ9WfaBXeMCkK(L z3l-B2t)MM5?(flB>xxUWS!rAS4p3$gpajzLSMk8I8Sf5 zow}1x#7HdBm}oawPVY11GWf*}+N0hRe0EDLGyEU|VP_VBU|wTj*ra=@t#+TXMF?BC z;FIK*^KaflVRr4<_wm1%s$a)IvT;cBDKbFfmMAyx5Ko}tN_c0ZDdS9}pmDf{Vnsvr zB4T45TqhuqZlz{>4dsN6SYNB&c-P;w48O7lKc2NoH5r`^rC62y;I)iET#pfC0K%?x*o5?}oTL z)_D0Sh(XU|ivLKXdd#e2IyuQa+D!1oaHn9E?h}jQ<0Ep-|EHPHxbjjCB%D`}+Kt1%}#x{0KOEv!dEc zSByPf!-rtwob+H{I(0jftowR?X%wj~V)35{d!+BcetsFjNx)f)h|)@p?G`HpRtkIt z)jq4H7dSEORx)3O*}aX2A6$U#?vlLUIgydiJwE+}k{ny&n3{nkekoiPrO}JcX*7#} zb#9uqO7j=lO0${Z(@=PvFVu6%$d87L9Z(F>1)Pc;v^{N~5eE?nrJOvUcbhkSQ=Mse z-LcwJcXIJyQfa4u`w!eZ<|Wg1qy6O77Tfg>fLr^;gu7$qajZwKII&%&XdY4#q_Z(KbxvF$ODPTP+7AU8QNF(-JrISPRicq>+NA;+5Du1E?+fD0H_yw8Y2WRnsD#GMP58|lHEUm+}g&-rD3vJa5mjw7K#ZXQsVew9frKkTXl|E8Q#oDm_E8P~^7o<7fh-W8Wc z%#siBz0U=&TNw18>^IM&{$+7av{d*iQ+@Sr8c%uj*s%nuR1b(QW<{Wc!A|=!iwE+KbFm}lOo)itP+R=p^_YO^cvC zD%RnOa9lVZw0#79Ug|oOBL2$kMRPU(PwwI;9wl$S>H-blh}PYhaXaA)$AH}*k(vHy zsMnw9MIp-IVTr&v3EbtuVM_XA)PO6ZlC3z~`HCsXm|twoCxeAQgJ`w>#g2#yw1u2o z%+&^#-5;F!FDp?U8NL+6xka_OoE-836G|T&5pJ}?Tb0^J=9esBgX=7_z12ei6>08! zA0NfjE`adKZLSc}@IiO0nc$yXp~B{s-iK`yAT})43&VydOsr8AU?0qRKew0;UU;WU z%FTw|K`z(owY~2LC(WuOBRk4AB78ggk(r|IK350Iu~H<@&mw$dzZrOq&fTmi_C9qU z=7)F>k$?U!{-YL;G5fYE-`2`pn+4M@d^l(r2OMg7t$25H;k(rb)XO`!YE~W0{57E8 zo3Ic`<45;f$yi!iUXbayK)>0ftdjCUbZ(4H*7nRg@ypQ+#e!0g%04>-!$%*Qp(s{F zfi<9qPcer@?!jNHF!J!;6WdpER#OWX?n>$yfH${^Kop?#T4gw~Gp@!8N!lU@=SFAw zfGIK$&DXTSe&yL*q8dLZzsSJd4tJcZJTWnFen+>)u(q94nuAm2PP2dccKD`9mKnqT zT7YK?y>90yu=_*OYsD3q#WM{0jce4Qqr3qc9aN{ITQt{s(eGeSoFaIEGw2t^mYWke z^UuKQeT*BYCozWs`JMGx5qKb*T*J+b_kz?gxal_JV#i_v>Kt=ZEO2BU|4QC0JgloN zeXdQt+W%s{lC^~xxRJLS8{da8Mk4H@k4yy9el%nPHw6b!7%i9)=A>0yADKq=D!)!6 z6fv#qJ-dE7ve3#LdUQpqVaPNvJjZpJpt44l7*I|u+6cg_1b$fm*R;D6{=%o$5a5R` z*g0P$j~>*mu*~(I>9I$ftF7^V=FR}dX9JS5TjhrXKEPSnj6i&hXZ;6|0V`}FhBUSU z23&F|K%Q1(lIMCy$X-1f7;yJiw}~Kc2~ivT-D3)pUdJ=T6u_f``2g}_IuoG?c*G(F z8$qBV$hZ;tA|r0z&ugA@JX+tVTS{_0HG| z<(XW+iI3R~K3kxp2DavVnqZ70F8$qKrTA?67ps z=jSeyOmqZB@Z#5+oiiuf#6R79c!*=yr&a^(4Iai{|V*qrQAW-3sL!-jYPqj)7Ymax+(#V!oQZ< z=TypNj##35)t<5H+yj6?Mb|q3k%eb>|;fDK-1TIY8iBJXwHNAIPyNg?sav6AmBo?V9 zpb}+4PvxqmBi*3tY^D@zsuE(ChnwAt$i!9i!+{^|?Qbo(;$7bbP^Ii!`aLGtBD?#wQsRDz`+w21+EF)HKY=b7FRd zFk$>(r7bCMk>VIk>GS11qt+e$v;)~P8g5#eCeCN8nlci2m}^LHU=l|; zI>w&C+Mtt_XLbJRNOrbklXiMR2FV`=CD*!ZF=IFU+vW3QzmDDDL@qHd<8O4)TPIli zZi<6n8WoCwI$CPGnlMEU*gO-Rw2HuY|K%x}hyO9Zg50^6Xl}I#v#3DfDAMfotPQG2 z=Bv%Tj6)IgXY5SmvPfgb$JMPSaT4zI+5l5$N{)j z87I+m6Y0tiZN}-6Crx%=N1rGN|Lk#lS^xP;B(NYBASFj&W)Qlh)g3UYiM|8MwY@qk z{q872H`F%gfj91_uOmgFe@EGH9KMCv;I*8W?pROc=~FGE07u!cVpaK%zyZq7!L*Z;Bl{(jLqQ^tZY=Ai?uR?n(HgFovc@whcG%Vn~~6S>OXB zVGTIykH6FuyRfc`o%e68Me$nWp0p4X=+CP~BVZs^x&H0DZ1grLz>;H|(D^?C68oQK z4ZcWu=HP>a1C87J&)&3e*lKZev!ml$pZ{t67Yr(+X|E_oBR2hAw#hnq5ctk^2xuS- zNhG}}$kJySHnTGzJ9DiunDR{7M@QkkjT$R5qEiBm4k@BIW$a@s$ndcXO{A|$m*J$F&j9?$w()$c^wBw@Iq=dq>>~~GUC0n-`=?dT@=C!uTt*% zd)0`gYL`Eko`4(~Q=?NAeW&Uvxv{7yO63sO+^7y_?d#R~4Mq0|1Xjo0qFd1G3Wdqs z?F29mDUkkqAEX!p5fH-63rcK^7=0b!KLKgl>xbu#UXyM?>|`T3b~s-d95xAsd8^0z z^hzEsGAd-hk|luvVk%zP#>pPdoT543)OY`QFy6DnPUy|osgOgKArTv!)B$kEuD%Gf zQ26^^fAlp}J zn~A*G0|J!Jtlm0NC?trj@qXvn_wlt7S^0F?`}b!kZ|2pm%GRRrpYf- zr!}|3e;b?}sx1QFBW8Hqr{IaQvc?VA&z4`f1qvx+pTmIJ0Ci$p$|zDaYye)9fk4ZS z5JtZ#T%c@&zsW6CZPIr{pS$H~vLE})V1w>|q=H;>m!a3XG&!EMhEsV=?Y8(l;@;5b z9mn+bf!-RO~g0V+WgVK|H%gTDa2Q?Qi>2)GW znl-s|&NyS(@%zfYcI~+`{2YwBOHicWm|)b;9jA=#$!9^G)#47?frVF10S<-f z-baoin4zL`s(_f@h?S)3AiQx=i(4qO!k(}W8`-0nkl-7@O~Vvl zVmxR4MOyrlMGf{+FD2STNb8|_m@nM-&yC??2oKHpuO@qyzN*A-3w8fatWUA={|8T= zHT67{=Ntz^`9%VzYupQ{64(dkC>cX6I3@aBlR&;+BYdmqwH%o6LXc@8BY2)?~lih1^w|F;1H zd*4gjgCI5}iv+c~2V1}9Rc)ZA3@)WY9>`N16DL<4@D z^l7*?-*TFip+Z9`^gaV~DD|w!x-x|!)OY*ELcgA;y&h zq#Ld0{#$4aW=kGNcWW-UVZ`H;c3oZie;L?)LI}4gKOh-8gG+Jzpg!ZqI^hAeR!^lv z;3z!BFDa5MPUEs$Y=wLc>4yK{evy+Bn3i8;Xg$fb`gmvi4RAxF3*dPL>&EVu-Ss~Z zuEDG%16&igaWw`?N#RIjBQ13V_4MMY)acI;2}S-;&vb;hII7kJ=g`jk!53dSN=Yqe ze>!l{O?|z&Ik{q-{Cj$>T#oZdTLB)c-tDt)lR9k)E}YQ>WowB%AwjF~7k#Ma zHBE`XBt9v`7e$}yAAHuvgn!W`^MJUEJO5=g0=iBPL4Cpa{W(lv3KB08(n5T9o;}?L zH`Y3C90+fI6hkDdO$p{|zlm;bwlN7qEHy|1ipGK!lRx}9sCVE!of;cEAGo9;72Fa< z0dHrgrc>>k&IYTuj(-K7uq>fK)A^9YS?h}TZSWH^h%#{Np?yNDOe}v|$SFPY?ujFc zq|a#t)meTtCGzl#dC!lBCq6SJ+}M?!aSyfWIL`4GiSK;q`xgkeABw#3@=*E0yI2Pd zrO_O?&Nf)P(aI-JYcj_V)b#RpdkJDOCr$plO=j4Ag=nCNvyEhiKGet6ArV&lRiY4U zJC{!FK0S?A=UoZ&0JbSP%<20I_dr#E!2(2j4-#YZw~Ezu?gpI;b$iSB$UB?$evrRH z9oZq9g^>4*L{un7bq+2mMJgt*tUD<;MZ5?&hIdyf%=dsrj|zB%L?P89TVH^n?%?-u z^JjkY&MlVs-(o3dzRMLtWrnq8{UstSa#VURVatJ!fTfc*wuKor4r~FjsNOeb5vjCT zWF4nMf|b#od|O9@{&`ZUpxo`d@b={6@ZVvUhqYHe_c#t(x3rqgR0>o0xjTcOHLq`=;t|#srEgFrA ziwr2jLpzo$nNP#_ch2l*nEbW$qTX-L*a@1dm^w(G+46mK8m+13pX%tqsKr7(^sv9P z=Kgzu+t~kw{Uz=oX|cW1_DxSR+6u=nUI;yeb;Nhyc=S_uYN|I1*;Ch`lPps)W`(DK z*x(w;LjD59EY{=jy7xluaJZ>f?@tft^FFD|l33=OMc?wOt=E5P4{aalcSna>Kw}@C zxDxviTa&H4$q;GcI;Seht z$J*ZurN2w>mzwH|?AG}c6eca>)Av2n6dMKyo4NtoiN@%*p`ql&hSBIRZxYVc^>3yPqkHX*SqrKx~k$uQzlZjJdChC^YGDWwkD2qB|;9ihcQ#+ z4{)TPhTwIhE?g@=?kdyGDR%&bYJs*EOP$hJOn?`I3BvwcXNCQfKxSuWaUuaG{lvh7 zi%+Kwydcc}jRZ77)~D@8bjPUSH(*GeHdF!!=A#u`dnndHDFv)rt~wG@28Lf63Al=! z7&^^5WIgSYgH6eLXsGF9Zn#ScH z<>rcaVZr=j@hIwZEL=06{0mq9yY^nlj1l1dW#@F7VJC+#K+gdh=wc3-tb;U{3@<`>ewR{#Lv${|E1=&R>d(-*mU+7u+k@|4djE+#g@()xMgvYTkL!oYFhmEV6Es z<=;GLiXM#+4e!X#cccb>=+JJ9mO2s4iPnE9ig6}fUd0YV#KW$J6rmN{P9=`nLw^No}VODlhj zWTNidRhlQY=tmX2xyN3JV$`5GFWQ*}@&AF9r;qni2=(!+Pq%By%*E;1DEm!vK{BfA zxMwNpPX5R5+r$z!n-U#m5_^l%zyC$*=XQM#9Dq+YIU0!g=LwXBN~MmFb!gWega5&qcb}E@?aaT%X6Dpkfglv;YVSQg0mV-K0#VJG;IL> z062J`CjqU(K~Km-ZxQ)c`LV(SRfX&Yn85$bTLAV#fq_g^V#2=sM-&bt^Pj4-9^P&z z=tEs1Wv%TgYO&RQjlckmlG>4CBjdj;Jf1IU&H2#xEc0D`(CuU7@Zud!6qLjkmgWoA|zHzbtshwQ?vig|@wC=7QPH0N4nW zeK+*Sle!Wz&QX5&Y|z84D&rN=(M#r!{Y|wEG~^|(YYpc`8~hg*mWBfy)y3)aY(*bX z*`a;YLKVT}=Qd_X5#N8Gr=OE4_=S8i*)<>}AOq8MD2+4Ujh*zzU8*JrR<3ylA}A__ zf9G>;&j{6}-NmETg^_kk4K97Hl_rE^ z-X7kK3DujlP;w~JoW~y+y@7v2j>JM!Bw<|62ADrBzhC&=Op>ilJ59zPe)*6q>%?>~ z4g2UG+kXIX1S3xwE=gR!mDoufka9>sTlPTea=+kQi9)?N3F+K&1ra~<6DivG z-0f_6f0?rbjq!znI%%$OUg@((Q(JLl--Pyagyl&FbzI*XR{#EW=U>?Ta%E;JMLtK@ zG@6Y+NvqrRQCq?4y*8)u=ega&?{pgtE`lAd(2@5;@v&$}`JP*^L5l)rO72H{NjLG$ zuIinFCdYXK-(rgMN&TSk8)DBB2jnYCqF9X?B3zWS0G&!68!6X?j>u`#B0Z4;&FU{B z*#`bYJE1wYhhexqAt*aP74IvE-T4GPj_5F?i46|`1^at!&_>D$+Oy;_^OCRf<(p5o zwENT-Q~<`fL*t@fJ5_+7Y8Q26Qtm{xVZWN3-wvk>=<@V?AuX>YxVKI8^vsHMf2<&> z-JqfHxx}!HY;@}hKi)c3)UC)K9kq4)SE@5kQQ*7n-&*Y;zn#+@>ndf&zW)`J+8G&(CR>HhQKu z!I+5D(oLDBw}dDa7{WI;#7GbN{f@mLV7$26R9~ol+*HgBp}XY+dXCgQBLm5j7tt~L z**re%Cc0?$^4*Tg@6rcq>0 zvLos~Gr_)c$bM^M*KRa@9TKX@Vcu8_Y-A|u3#<5|;Y*YkRVQ_4@7hkXui>7U&aR0Z z)$`58Mw*y%FlZJ{nq7ic(unl`l*{pSI=YzPOb;;Mb%-T#emt(tj*tz^yxvTSViujQ zvI_*=d#?lHXkE8;P3%$F*_GoG=ISAy*8$5_ino~TDXq~VUqWITy#lL5Rh)+wd!#2g zSut8Qtg)cd8NNQxVPs@IR%JA`E-cP!JdX$9PeHMos|O?d#c4CV32^?9C{Nha6{wN$ zc7g@gz-Hd7=bS%uVPv_Z?eB)udC^2knzsk~L~WzFAWu%&o#x#GizQ2^p^(6V@lUrZ zv+U`2ZGSm9c_Q?A4pE}3GXbPd7PUqFr(h$54>VyTn<#z$>c{c8)ygm@pJnPaJm4w; zBF=NUny}7;Jylr5tBgWY$lsNv#CT{~g)xvh-q5U)ts(;iPQ?)KGZ4Xlu%{L|=ikr0 zDE!93H&gnP;M=_87CSUG-ph5_8|+9J-fAKc1bBrTy>F+OaWfNjgT&a9Nr3P933 z2fc>beEM)D3J#i$g@S{WBw@x%>dDvSvDRna&_2&ykg-j7#rO$%}gNyB3Y- zaim4IO$oQSQYp`>-H5@oiaIIzp7ncLgirMPSU-p@`h4sy*DI0by}WtH8ll*sI?%x- z3ZXWDSt!1B9a4+WK!_Ej3ty4Sb_yEgI;p<-}qN* zx}z8~H3aOL$ya`u;$W;v)BG+5-8r_C9Qr=}ksBW3LPZp-{sDMMu_k`f9m7D!2qk** zON>Y!TQ^T5S)jKV)z(rgTmO&%fw7kp_p?yy`a#y|Hh89UwST&o;Hjc|pFy)%d)EM* z4XcAFsw~cV0%U8@yq_@uAKm&f{r`~l)=^P#+y5|#GUR~LFf<}c3J60pgn~*VARwqn zDKRjJbU36+Nrx~@Sw-CdIJ!F!*3@Avn*mTUP3F`n3ae`23)9ix@GQT_w0 z)a=0O_H1+?BgO1F_Omb7yYEvc9EX@QLJ+JXq&pp25I{Bqh8PB$4@<*Y={ahn-g$f4wok@arT0)~3MAPvW9dNCW~;D%D1<{bNNF`>w)M{RR$6 zx%l$b2kvE(BneI$pc<|Ay63+hlKLtC#XgQ*+5j}?=6SxAiOSk9JjgxpQJ49k#p(B9 z!jcq=ESI#!fdX~HvDo!aDqsLGFLkNRka&~BX=E3gPRE051YSFOYqrtJ{fuDzSbK2j z){xKM%`f|we18MVo6?MPGm+L!?HCLDJZhep6jjW~O=z*6w_9T^SQ*Q9w5`KT0c4iu zt@9~D;S)#VW5GZqlr7NQCQIMp<*P*u`vCbdYaqx^tt z@2Xu1Yak-~O$ni$+T=aP-W=rfb+`TM+|H|p)#;pB^Wd=_t{a@y|F;AAlHCRYToDBD zN?vBJ*rahm$|&4j{wM9<>MTy@CNRvSj@7X8E&J)3cg5>r5kD`jL+P=ZV;G<`rl{8z z+ivZZrqqyun#DdZ%O0vp=0}|a_Bb!&OWeys0|Td(#V8wo5YhjlSL%=Gwi&fkp~2j| z^XvQe)j}m|&tHfkyC@ot`)E}OhB7LVXD#b+dq42%4$!*`pPF3^{JO!~x#eZBh$;lQ z6*wI%6#?3}m9FyCUwutKz3*R~o-ZjLJY-p3q>&a=d2@LcCM;zax}5-uzxfuc59pUd zw!u|4!TTDp2$D;}M#mGyVDo1^rveLFyPGzx+Bc1*5slXZ<3Wc2lT+=pPbZ7-_z)h! z($|aTU~~KaEw+ij8Z1~i#Dm+L)0!u{v93{@?G1Jz3N<+puk>S3{^PZj`(lwTj(i;1(6)QYu9AQJfUrZ~? zMrq$qrM-tQDNS+7VFPNCFJIaCfd2Wx)76RD&wM)SIhT1U2fNs%GX%88jb>_o;>e{v zxJJ54Ajp`kHijYdX#B!9v~(T#>Te|+lSOjQ`yj6kg)tkIboVo;y5Fcj(ucbNs z($a|naIDaAa&Q9y`~}9&eZ>(GDca`YUv361tzc7KypVGWat)4bVO#v+3ucoIDqOSmNb$oBuJxHbz z#hJf>+HfD&^dyBlzC#@o)dy%PXDKau;fA5iITdUmy>4TLWG1RGRdYgwQ||gV=%*JN zmHp8GG~9Rnv!zUtXyrItR4at~+{I}Z`T(xuKS31Uf7tWeL-|Imfj&!H0xhih`zc#< z_J{W9wU*!N!*hS05-W6hK_Jo3Nl>KLF+8P&#!4)g`?5k*k>cx!wqR?u(BNl-omX zf3G@f!6F1xtMVTv11jt8Z1Ae?Wq+%9r&zhb$cM24eLt!XgpD_p?dm``5uEyYGvKAE zPIdlCs&_dlFFBuB1un|>W9!oU)m`&~s^*=d1Ww|EcOyx&Za*@*TWEoYTnZe$%UE!q zg8t(o-KK)fnFlX=$kB829evKTgiv-iqVp`O^&brE7}U3g*r$@tZER^ZLH$fY45 z4qOmH6Kh+Eukg){(9qyXm5kEleD1EARL`&0jSmsv?Aw_9xt<0OaR1ybd%1_Uy2F9* zGFF3M@GN4k@9!9zI~wm*`ZkQ0-@o|s>tge_v!=i|q2pZ(wWj>ikdQO(U`y0Xzd;5C z7{_JL8g99+|0P`d3g==3VSKyPKhE64n6WSMX`Ylvsl|k4^a;(=F@9yX-G}q8R;ylQ z+;4(z0!OhhY@IQFxaz_2{eg!tZR3X{EL7k{5FFSha|)ab0d5#p?;^(D`B6CpXb3vg z8ZraTVD|1d_1z7|M_t=xil~|2WkB+Grt%%lKvqakC&p4BIro&s&A>YVz4sH?Qa5+A zfJgjmxUbZC<;U$kZzIsavGRUhZ#~ z>t3>X5=`qyOx2FChb%96@W`F)3e8z~(Mr+o+vg+h_TyvqM03%F6JZeptNUupYbefv zx8SSV=tn@GCqfGJ2nEyq9+(g#Q1XH+F%blb4ZP$aaah;PufA10olp zJSs;{S?mSYjar3K#%pVtzqE8~33F36dRjL7>hmv-#3SVzA=To<$2%>mA|ba9TxRxX z*UWC1n=x%3b-tPn43Fh-gg&L1DxN(dzZs?(PHB7Kj%#5^DjfVs;W(sTljG)LJ;LG*Y_a8+Qx>^2ZOhDeQlu^#uw1O(;wI7UxuG8jAn!!{<*#f57YW) z{>7kk`iF$C1QFp$=bCuA81c~-1xl|^Scd&A|2>E)kv)q1t&wp9I&&&-oVvhf?(tzo zbXi%^vuxqLY8oA(bQivnRHV90GvbaGev?+TsJ+vCG9o{hy7rJGgQgrz*ZX07hQ#I1 z&1RTRfRfgqDVb2%!x)0Nni1wvLQ)s>!UM2xpUpt2ACo1vbQ9`7ti7vKa*Y1(;O9Tv z-_7HnRUng7JU7AXdxpyjuZ(l>%^om`O;)y}PMWJ(y^3dM_E1T8b>T`Q-hCHkHRJtv zr|aI?#i!)!J?zAjZi^>?^r$Lq%Xq*&yZW?3&Ce8Fel%P!8yV*wRdUK2ANSH?r;#%$ zA1OFp72#!0!VB3U9R8Qex$49r;LKM*L*0))&`d5 z>B8fK)3%Lc2Y5vuc>cp!uYF3gl!fmwUE=;$&@Mv<_Z8DxO7L*H=oCz0-44m(Wlr-N zB3WRypmG?)pKHo+KC!EEY9pb9#VGrs2mNhqZnd49>S-r5SG;WUihn{!*p{e2+Enj! zZG>tliZ^N-V(fx2+%WfWxbfhA6X_Xg*8c8yGw7c$f>#nJYZdBaUZ;x%U@@v4n-Q&> z#M?|(ZL4J2eJ4WT?fZZIF>64o$1{rAr>1zSjl9iwU@I=5Vuex069;Ky4w z66!teZuEMdxU^Lhu+^=~KAhdD@MzZ~cCT=M!a>H5xBsx&mh>P_et9!Io$wD$KRUVJ zgs>?Qh0w(e6@8l+Oj25yZ%i+e4MM~`y45=6t|Q~n)z>QkQ*gY&^u!!K=`10 z=?EddK1lUa5=u=gvU^!pMV~HaOEOyL*`#TtPlun@?8~@+#A0YnKUhHpbF#cKf-r}- z18$8U%$g81k13&do@CFoz^tI38DS(`kV<1Sc&6zmAG9iedc{|z<%_dpMXOgsW11bS zP4({bvx_?+pp$-N`PioLViK(TZGyfHfws*>s0E#Re~=pmTvG3)?(v->~U8Jc=`j z#iTMd-8&m@?1>&O8Py^2x>+32p|_i)C}P6lP{EA42eHnwJ-iDW6jT)zaG}{^-@L+f zVlw?qZSCB3{Ul$FQ-J^5O(#PriEsA+zLR!L<*7bfh@r+r@cZe|Q~%;O;~tM!Op;{Y zSVZlUNxHzAuQPx3*l#G!lZ;2_Z#te?L06*Ccq?0hbn$4ud{L&Y%9=3wEX{kZyLu0; zQ|@#NwIM^TTm-o476$28pZ<|-t&Aigx|v9WIpejpo(-R>;NUwl*S z=q#XuuJDeIS?=<3F)nJP{J`sO43{wEOZFuG^zc;PN<-xk35d*OSdIPl*hykY8a>IM z7&CRhe7tKSkl0Q)O{r-&wgvxYg_1L-psulY;-4PZ@HuD|d_aYYPnwijiR)gP@ar=P3xEM1qUsD(klQ+27R%p|Y2 zNt0!YX`({YaoMG4q4WeUEvBEv{Qln+8-Xo@bG4x^h;c|_4?|s=QVCR z^?3`{wbHwHeg%xezKx@DIDS0uFc*6B89_IHMV$(NrbH|=C3S(Ngft*A(7)BRrLoWo zTAV7E_5RRvA)>;tf41epq_nG)R}Zp3al#B?0o^GQ%QOJrfm2~te1Q45+T-gQM@Uop znG$Mm(WBP=gE$>BG=|LjYI6I@^oQ5pr0Dkj4C?ZV;w9=nUK^}!QdHma*+TOJY|fCw zGk=qm6_Z1uu3CndLO*?OKb@Red|jPqm1UgK7)ryWyGbgvEJ_aj{pvr{d8@$4AQA4! zhm2U+GSE*Z(>brOms*e>8 z&zx_pJoO9{=^w@l{=vD!j>Tw#*tqf$7-HEpvErYew~e=Sw2#oXQ>f6nq#<-3;y3HIJVm7Zme2=$c#O3 zqebTgnogKw8(R|B!8`*g|E(re&=DQDiMNx*2)r!g9C28}#w@efad3JI^x0v;!;Ai7 zom~%ZWPx@uKI>PNU-cU-v^ti3DRrqQWJlhfPEwd-R#)a#KRwtUu5L5f5e*5-t{(#> z1V(?zb!T5sNrd_M*$a5)dMeJa#o$QzYAZP9jmUqdKD?zX*!ULPHNUb1<`j(Si{;f# z&|Lc(KH+Rteg>Zo$%=N~5F#&-E$b@X#Lc+SH`;j1Jo+p|;TfkdTK}%=_L@@=GIS88 zEkYh==iF2Keq!Ag`j7~H^hN~2n@G8N^6O4KIuqja!1tO1OUX~IoYWtURDZq@5v4sm zOp^W4ut*WoEPj9FZ8tIcC+A5I&4JXNZ;-$q1P=L)-)LH>V5AoDZMU5yzQC^9nddSd z8|PUJ9y&sw&c5E4kJfRkH}_e<6oxEnSDOmVA^KBnEGk}pU0`9)laVez{@mppE(}p7 zbulCEj2lwuCd-i5vTbG%%g>}1pofZ=HY~7I{m|{r#Y#krw9b1hdWzxuZ+VD3B!ZZJ zH09wa2WuCaSU#2&*pA<2Fg9K|_L%5-D|;;+bf@wQ0m0a<`2XC^v42Ig&^YvcGhCI` zUK3Q6_pI#`{_rY%9_gV!?K*i^l055c#ybe76O$Gl?>~#?i)d+d%>zTsnS<6Oyl%1j zqCX+WFk+eGRCbzFE-Ob51KVEC08dlo0X*W5o^ znB&pnH^asd9uFAlg=R5JbhlyO;=K7(l*nN^Q;E-J@n7DMn7=c5D4M~-_}dA%XZ9Fx z+0b==U%)(TwWpGZ%yubXH9@JDTf}jeL1IB7SAs9K2b0`$Xa2%+55l-)4)5q6@yw7n z)QzTtzSd96W)BkrlO*b+S`Soxxr1*AbvR`X>o={cG9u?vg`S(*NGk^EVCiwhjk&Uye5$ zeh%!|hqzH9;gw%BMtC#kK30SE`ZKNyqk~TD>{809OqSror8qC}r?0}Aa5~CFAwx$e zk5-WCj?;Ye>y=+Vz&nCEZnS_v6gx=-xtYrZy+a?Q9cyyRb2vKAXdeCC+ zF2%jpj7G1F{er!sPdYkQOt{yNzi&H*l(1o_+Naeaf~2`}z#{lM`h=PmF!|!}%=4Ps zm&wR}y+QwK&Xb5PL&LtWFW(cAE>NtvW4&?x&?L6aO;uGjotv3Gzq_ek>{)ANtw=Fc zVGPa=H;tRq-tK#}%=d4Ng>-*ALa`DQJaQ*If7}Pk#-u=sA}?CWu=m`9l38DFGwmO) zRnd_*AqfAUHT%l&jsyyElb+i5g!&UYQpG-Dxz+uganl}dvGPRLLZP;M#d5lj>Du|2 z8ctVV*~ML|l7?s*4*qv*KmpIG+z!9ZlRk$Kq9__RbW32Ye@pH-(1YMJKGg4CaZk9D zb|3<2J$M7XW9GGw`aZS$_$=V4ybnoE9-_R~K!YpUw5S2d&oY1Q{B6YAf(7)q;6atv zgKh?b&-z6mMD;4a_)H#;&YkuhA~`?GS#13qnI07+P9By8kVC&yc5x90i93c)@_p=5 zTFqVzdG!0S4OCFAaHgqB9OhsF_i1ikA-wfrJ{vAjHBq*6vq;M7a}UB#g)G~6w~OIv zeky04`AU4l+@9PA?x0YU#in{X*wur$%L@C}38LUWc_KF}DEFA6$zv%p6gk+wGC0*5b$55i ztRnIfqoMr zi$g~xUBe_2RcvnIZMo-o$z>hL4p+_#Gl|{(E=m!ioXamrWW_a^AvFm5rj^g8#Upxp z(pf{-glKBuk7h)Dd**2}}M>eAO2THl!+F zb7;G+Ud&fh(cN&)-r{IfZIUp0Kx5YFkxj{Cn(s?wE>^YDLilm$Ch*tgydpIybvSZ9 z?+Q^Gcqe+JoY9yv4h<#qKd{cM{pDMlYe}(v_Kz2U_QUH8XFO~w9tng_g!h{;W_4D0un$|$JCTW_hl$3I}&l+y8|^n)6jCg`USg%c2*DDlI=*^*xwL#=w{qu7_f z%A5_GN(%9dGM(m9q_uQ=Q*K!FNfCRp zlAKHq-GfZqW%E}j7_Zudcb8smM&xnagFJbQvTD`=v^04$LUOWiw%%j4xMI9O+Nr`C zv22p^;>A>%HCKz(tv_FiN3#WgY|@}_y@|b&{lvrEl7=0dV`KxR2j6+q<{ub2_~a7P zhyBST!eScP7c5p|jx?Tc9UOaP=;M1F-D+sx#I4)$yfT(GEE&b`fs;u<(<^T`JyhSj z{_(LQ5hUoal+O+2Cj22Db)T>nER1%X1@s|3tq=3qCfmx4@;?7Q^A#{C98rjaG>gTu z6bE+193MDr3PWzj!}MN&8DoR6Ia7FMI0&7yL7g$q5C!I-oRBBI;PU`rnQ4ggfzF2G znY}5y|HaA2#g=&+W&R{TB2qNsT9;!!zkte;xN~80z)0jVSDLJ)PS0#KIiEuN=e% z#xP&(L_)?6Xj6A}y}X~-_waDecLs32#J%gJnZ5L~BY?jAbChvLm=eDzB&#o{MC{+0 zET9TZWM*R%l*tmacr^?Q(Hig)JvTC`H~5Y>b>!(KQ$>6<-0rP8o5xtOqcYts)6rFX z{tnkRV2mdAgF~28t}m9QzCExR43L3nTI@(+iyy+30M-z88|kc(#6eAYn>~_)TbxSc zG;H79pZ<`R_dXd6Kwee`rjOP3Ol6)nHR z+?fXs;``T6+HKtrD2Z!yRF^YeBYiXo!5oz|5*J9{Df({run(sJ2v!$C(~4A zi#hR?`7*u4t2;Ow(RId5OoW7orW?rqSDt|TwVM^T;8~%O3Fo&3OFZwj#!Q7?^x4|`=HEXte5Ynqs z*6y1z&pg%7q`1Szyn98A{tdiW*o^*gu(6@Isl0+{2D@6!dv={{J=wPgl5E_(%vrCw zE#ra1c`fl+2&1{k6Fo$<6;gkbU(}Hwx!8w1VH;R}1!&Oj;He{{32z3v+Q52ju`+m^ zDi#^)y?|*@=|NPIvb;d*qnYcZK^CF)yV$W40W$HlvgQLZ^+7KoVC zMv!e_2bV>2VNGcdX`M>y^b^UI)#ZKmdjNon3tAQYo6h*kXKzRKZSv>{u6yPBQ=KBc zmieyef{Tm2J>eQ7+e4=QV>;P_%xF5X7x|G+z-c|5<7InxeQQDuXC9wV+ce6neTvxa zB*c5f9S43eY9kajw|s%03v#6EQHmFu?uB5qecFe}Z^ttxIn9V$Z7D}qHxu-mB2fo3Z`98SSRE9n(_OC!|n@GJragE1DF&M>42N|!A17qRd)>*BhfaeOi<@yLwYzRQg{*6 z_~K8<94&O^TiT$=dBKIVj^W0%EKdEoUy9$xz`O&?+S}WZ^fcG6VoGPQW@(d*c2|(+ zdeZUVJH04%JX%;WJ492_j11zYHOnWjT1)u*BGqj&-p}XBJ&LzmwNoL1T&vI+wscXi zB?Y)xY&G_{Pb0x-{BoD3Y6`tKjl-IUnVt6Z9?<^`4)QC?jETX7bz0}TJuZHZxjVVs z-%o=C+|Tn2!)guGy`BY(V;F!8uF|l%>(R;!j&MTU>-$&#ry6;1t-P_RscGL+K|x0= zPe+4`GXEk+CuhQ4mbEo=)+JiAFWtt_%Ng-5UDPh!Q@4^ zUyXGb7sfH!zP}qhL~~Q)zogEJQXK&Te&-}Wt%fmxUE)CHYYlGIJ>jy7Zvc>;`UABLF>2hr6aw$ zD9!xT$;a>xHc(h&*=!g9=i=?ohv7@qo?70rYuMevDV=Sa{vgyvSC`yz4CoTfyC#GR zG+RIs6-o(xiBfMj6e5Sl3D^Nb$kJ&mv+8WocZi4jv-AEtu1KC{#FxEyeLORrs2%Z( zUngYK-ugl6_Y}bTJVlY0jzo~38$Y(;9>e>cr=2zP-LD_^?H0@dDS%w{ArKXtN<;SV z=-`^ZU^xa=#oKBX0!UseF<_c2ztRr^1o-nlbXhKtyP!SchTIFA48KDeFuA;)-4|W< zh|2ID0;fzXVoC$&@m_7sMc{+MMLu0x=I0>T*7 zYMl2VLEZYZ&Lpra9xE4k=j8>s{!Fh=J@}*uPotT^oCzAQo{#(&Zo6zC-gMMotQg~c zr5Mleh=|f0n-Mf|&-)T9Fl~qJS6}i=x_SNeDRhE5R!oBk5(z4f?>UgEy=yk~soAU5 zxJr@RuC_;0fH}e$@hyF<3n9Bvs(@6oVd~y{2r|I(RKc(q1FDP4_r8#E#F(2u4+!ko zLK^Avfx$j(W9$n%I@3`FkX45(k{vo+(gVn(q;K(w((hx-nX)`tR(ac>i7L;#0<6v= z4B+TExr*#-{JfPNuNlXxs#qGld;SML=o-FT={{aPzNH(FEd*?zOBIV{?vDvH9ANHK zJ*3($sfk*o{>3!-MrUA!_V|jl?=Y` zR8|Cy)VC{4-(624w#g8`n%MDQ9blsQlE{gT&d1Bi7y@ZBZ$F`J1J~o+*8AN#o`9q6 z?BVX|)Rl|v2j1sl27*yH|N* zC;N~zGCTNja+gpkjn5_E5I2*~lAetD*5I{tl5v8ix$;;o@yS&;Ik^h1E~I*f+ZJ=8 zC}sbjjxjZsaoGUh9)zsEQ}A_}cy#yk*RtnpwQ);Eg){HHqmr6MRm6+Rl{0^wSao@* z>xIPOe>(hAc^QY5pbUnS9d?TMp0gWR9lcZI7k~{udKh^}1huk0pC4G)yD@c)H)D4a zJMW-YBRwWzzx2vY4Q`}FG5OYL;1>+N}d8w}ktIZW2|$~dPyN~!juIoB{cCuP1OnQ#`_{fG!s zT6J&fW{IdT`bI4|)V`D-7Li>pru3ThiVdL_6LTbkNG}iAK@sxnO$ez0@KV0EUA%W= z%ukl0vY&4OH60+#mA3=zJly0&Uw1zvKUWV zKzP#V)M9>&FC|1zmr~>+dc9yLb~Ve~;wIcS~owoO_V< zG|PtV@+(F@vO10dO?^_yMv@H|rhI)|l9l&xO!kQd-zDp; zwGb``&zz!vaqRC?sFbYT`i{?L!!uvad#XbE^F)P7JOgFil{;lbRwPQB~$iH-yEKK z9mpJjs5AH^-1$kNhSAfo{r=F@zKf|nLslad4(Gw+L2{a2Jlp6yO19CJ*z(bxs8jKv z`@aOZe9kNEbl_{3*U5|Ct=MY$Ce)%UR~YrMUcNt6~lct!MnEs zJWh{2-K70EzIC9qlH9i0Jzv`PJ*o+jc5n|e0SIijhwlE{61a;&^(mJ0!68`?-ELkK zIr%SH1p;V>YZ@qfD(yRzQ0k%(GfGk)s#+4rTe)QI#@G5%4chbxHq>OjB!OLS`)j|? zMFDG|4)|%ulS8#`I{LNK`6!?i*3IODHf~;l}%6a!5=KQqwck3_}ARdj$mpYIY z%O}#Zl)6bA;g4sJ=EAoht22N<@#w$oo8a{rvspW?;ND!{Sra zcl*GZU6U#(OzL6)^7hx*OFU595h(A{s(;^|uWQqh?WeDLp+h$m$6RM^%A=M=xFUG} z4|aT@i3Ug_pWpLn*PFih(pF7gD3pSmB?e@z{}BFQ3@WH`j5JZ|r#@0i<@IDv6ZLrK zJwgp3r)<*}GhfqgeRDNd;EbN+V=vdz;1e1iscWnP<^0HnM6&4hOBU-&Ry9~pAOh8F ziBAfY%q(21)G#@%bNA#S%^&^E_aYE|wPS^Cc4e$Qyo|ZQ_SLit&k}+slWF`*$6Grb zx5fr91rf;G7B@{MJ)1Pd4>H1a#K$b_gsFl^Hm-6gYjqoGI;nlDpvOr`#(aop5;3#K zD$h60G2=9(x<|%)&9v8J`(LQ^(Kwen9wJ%HLOS+ACGps*eHDvG`>z7Aj!nA{6ov_# zNR)cIx||$s?sud*#aJOZ^x>SN%U8zKq2ZDq_X2Q<-zg!&!UD>dO>*vc(-J~>59Q!W zpl@U*z3r$m^w6(RoxMP;^xXYb>W?fMrS<$k!!Yi^e`EeCzrT<_<0Z9{p$@;0;G502 ziYG3s8kF!FBGzhjPCYiIhv(GP8Q=!5YqDH`>riGA`y%`<|=Qq^i5x415t>{rL1|DL{-e3vQ?@j{r|k;G>6!Soib zMJQMGDi)dYfRG-9+1;C0xgSzJOX#U%j@Q?zs~p3OMtimb4?petwP>#hTUC6iR$ABi=J zagMa&vtofolmS6lZwUz+hS61k&7UsmU|2Yq#NBQ3`c@=e50@y79hah$=fOZl))=5f zAZ0LkAa8ohocxc{tMKUDENP0JFTB|9qi@)>)?gnHKjCl|2zR~%s~+n$rvzx;f{Bda z*U9>KRbor}O-4XqGU0$Zn4+;5mwOCQaiA&o>2)dfASNWt-&twb%D_urUhL|Al>4}< zur_?AW@wT10;RsnOT4)B3-&EXCKH-J?|6qR;*O!lKM{_q=2%%lL3D%GkgsKSo8i2k zTSv9C>r?l^@JAuw0zf6<@_FJN?LfR+nX{ukXX_#3HG1;HEIpVFJFynJKXG>LiPUk7 z6=6Tl2;PkCPlb)KmD~a`^rr}B)k|jzXZg4pp_WC%RLy`~W5%(UV1x_aXxjbY$RYv( z$a{y)WJhrMra{4bg?yirlg8;M5?`W9C_ z9(|4?2Lga?O&^&*zBbivi{V7~?7au#Cl!48Ie3yLm(9(usz3M|P$VO$~hP1k!i#175b1@ytTuhQ_}@Nm!3#WrhKvp*`!q-Bt&AT5(X zS7g)9y}#Z@lQQFY?LZ6d^=r3|YQM*agxrrP?<*1uXy=GBCOn@&oZg{x^+#*UWwy^c zuuR*1!2Q`{NYjh}#sU8CqHg}(#3fJE+Hyytwx+uacMcvtX_xs@e|ss#QdZr9>^nH| zkqc1+esRQ;7aiSoCF!Eyffj5%i~Lt;0HQG1j6T3nNTxH%IuH5uApHH_c)pXAWb-Vj zDNI}*MOB)yaExUmUlxdSeS?4>CtZ~fQmKrGwvB>hZN~w|s4z~%HWM3zJkQq4r?+V@ znYr63rM9hohzF3T@L{Js2}b$=W!{H?`(sa&x?ZQsL?3?}fH0Id1&nTg`}S;DNgFKc*20 zr~UANfbI|Zor@^@^+6qMrEeDQrwXOqi1_A71?#%kT+gsqDJi_IR`reJCqw zw^B^iU(XsS00Qyw^FY2Jc0x{RKd$T^G17aG<}yIpk9a!^fT8~C+)(O{V?md9NZqVL zSG*u2RK=<-Oxir}@oU8oM-x`ccVn|~_ZN{F@#xQ$j79ESTk7jL>Me_HN-a63XS;8{ z5MNfHpe%ahA`68qYx3efyH$#hTW!r=9+KIIO?Zh4UC&FO$BzvwEPoSX%eL^KV^xz6 z)z-E?0`5sy^7_fKlC|2h93Al6P2unsTVVokPkN*Fbdb$r8~W{G&i~b0CE)fkUA^AF!8Dj;Y-bu3_lW7InSURkmJWxzgcyYH>Z zt)!pjl3$WQkG|BTLm{=;BLaX(O6P4KoUM4jF&H~wRKI->;_J?5lfVf$-e(itDf;V% zmjWtmJnXl3FiB3mfzgsWJX3$Dh(&k_?5p#DJYqY>fxWA-=|0_4-R2kk8{;Txa~a^} zsUP|V<6u|@YX*2~&iqN{gmo;k-y(^OZ!u4vdIn$rwGPQu{SI2oXW(Stog3yhRBhki z)hM;H_f-3LzIxUq1n1Pq)3N)rW6E)Z(8}66+0bUK>9mLb7L<6W0p zq(haj+5ESf?he8_Jq3{>t^AiNF{F+)c$ZABF;l{qpA4{sVxJH=Q>V~ec`sYyBN_W>Fh{)$TT`2Knc^FvJA#zbe=x6{#b&%2FNVS~CSl40dsDjSsbUrabFG1aT<7g%i*NW!KJz{2eb#_%X^(uZ z0lK&dFDw)AnS8prD9mc`jP%ANoi^ge}H=d5u6hqhc4!pEhQS=n~VC<7pbQXg;<-t zs}f?#WpRUoGsnK*TXq$sYFxarFgiv?LKB{q=Fcw$Ms)k~v7(bsd-KeoMykALBh0%q zIFwq^?XGoZeR3kj2)&VL&|-T!2oHHAK0ECNQ>`ox6IFp*2(M6>_g^}wwZ=NAyR4G} zFMg-PJ_Gg8c>s;T8$&`1Vm21P3qF@(|EA~kY|AyF0>yS`a%8!cwr)$L zKUIWMR!~9Q%U3{X*{;r`3Q2-6;;^4PQrNfqXqf?`@~{Unri{^?@f*0J3GY~R3_vT!Unf<wF7dTG&eU+C&p>(Qk6?|h7i1Rbm?v|lNd{ury*eml(5cSdz z+5cFQ2mkr{sK+y|Cxxt6&p0WAwzo6?hW#!cP*agW*6)#PCiy@7FSGWni5tTh)%j|x z_gx)@goJ1!IXxX+e5Xq_?rPTE7sXS*u^3$@dY_Sb*&@Sg-pw5I zku9MDc;Sf*tJq_oHF|Qo*|q_n^)Ez;#+sh^Nn8v}{|FdMqdX#o}Q?;FPG#4?f0xJFalvt68{YE#BylBIZ6 zN@g`oah3*~s2!e_TWN7*fsfjJ-FAf8q+zzH(HpZPG~I3A=2+14)mu3^0*eV??&BSn zPBa2Y^(KG;!#;iE8h&USath9@U)@xdpZ|^SGr41AmkZTAcEa@xT%FU0v$AfVVwulb zCwHRC8MOP=B|!Vgas+l1h$`uzr$_^gG!vRwvi>U%Qh%-Lu3oywGTWS z*}&&B{ZntN6*mTyAC1E-&)?x7Mpxz1^<1|W$L;BDYh4p;MT*m9Wv2J8P_<&-f0K$w z|Mb0)4RCTT`tC8BY1bF+FafX_C`ZSP@fnGg_dR-6{+b3n9W8K-C3LIT7ePK!zx3RQ zd1JhRYKdl03s>b$Ri~Ej*pLDmnZzOco$G$+$IH{QH{v{HV5%B42K)rvMxXOzglhyr7=9f`rp*hUF4lv&$z(<1xPjEgR8O1+{DU%L0H9 zo1!73n@g&kj4vb%E>O`Az_An?qeAzjNN_kQPgrh;7Jr^xV8C1xDVE42m@*iJIiy5$ z=41h~|DSu$3(bGu>oOB~EC1pU2-9`DUpA+$ZCx4A;4Ao_x~qaUhW}k-ET*WgmvlVf zcp`?LfaRAGyki*`MlDw3Sb?MBlnZ$CwDL#&zKBzI+&&w5!A2Vmm)P!N-lVE9Z^|Mm^xf2_2GxQBCbu9x0W zx{vV`nd3Ad9y=0LZWn2d%ibP;^jONPdi9ns==f3)nS_{W0hz zu4ngF2=eTB=EoHpl5c-tOd`N9$;R_8nH_kEHzz1S1nfqz!nApGixSKRe1Dk0BLM}; ze-Dw9pg%hEu$1-LNb3To;%O6NJD@^_>q&N*i#zq_6=e26@(T{b>R-x4skuNEx*1hI z7fRI}2_^<+^&!&A9=)9Y@XyI*1ci5@ka@4+#pcx6#8m6j5|=K~^&dvuK++T;b!s+L zQxGYB^%Z$(k9ZI!mw9gN@YLc!K_%QE_~Cv}O>8#e#dPB(%oWu*S`m0Et(Wzz{zPXz;)c1V$aa8 z+gC?>WC!pA<_x%+YJe(upEJqexb1)wk91iBea`GcBW#0Q^R1X9{-EeABSe5<*NuUCh% z`RYavMIaN>H~iYu>gJr|uq+0^YuK@wDI@=Y%}7g9$I?Fj%flgc)R#z*;Zro24SRoY zKD#|y8aC0WTKQd6F8q^E?&SeJ$LJnOUrF7uBKxNaq}K$V*(@R|T5xg59wOO9C8yv} z5~;N^HhZfAq$Y)tw>)WsG|cT1j8OWIFCjLs_QWspyI#^LJ!@(R5RXTbkj)s2XBjD> za8lk4?U#oTqq)I-(Cb2SY7`d+2xKXkbw;U4JherI3N%Rn3R=Lt_rBE6e%na1LX6gd z3cN-ZfY+ZSS$%7Zg0e}W@~w@e3e#fZB{Y~ou?!!yU%yB06(%RF^X*wShNpXw@dYaM zHdx*U8&~yeWov1FfBAmlo_=>mCLJ|%jPb|6C;^XM#Q=tY!K{oR?8%dr!j6=4Sm3OV#@rnl_(J7c49WjsFUD@?aS zzS#a`4wavIW?9JjuLb*>*p5{9S7hTiPN1cu!xFKw{m#+6GTfIP{Q@4)q4W9AjWS=l z&k_?bhnJF7C!>4fV?gyGhE)3Q>*sGaRfWZppIl*ju3-U2O5;j4R-Km#;}GC1M2#{j zP*Ve(Y#Hx|_UWUFmX{wr*_o!ya!=t#3y#8G5$zJbMXB>l-|u)6;;l;7lZhvzE3#X$ zr^#^NLdo6S3i|r{P*2TKC2C6hq#1Glw_TYPEwH10-`N;yUtkf6qYst81HQr96ZR5r z(Q$Ox%Fe!1OyiUO)yz<+unts1j7ej+RqdM=SYpHc3Tv^T!(q2|SFAL_NC^R2ungm$ zs&s{qeTw0@G%?cPQ6CUPvJMdxclXcRl?-}_nh`4D!&r+!b2#M$_c5ukl8xYhy14)@ zQ1@3+RW-WU%;W9VyszMZ4%(Gfgg=!Q?Alj&#s28FGyZI_C?seT`csw7aEkwTzF1}* z@hV6s1Ig=9uS;fWBkv>&Mn~AVtZs~vE=j;L1m|)Krq@Z;T6Jac`U0vfkpVv=1{5Hv zm&K3Bq}hlMvOhHlUqJ@25;)U2{H2$CP99+KD5IAZ;F}Dh zZN35i=~V7S4`Tiym99^{oztij+ycI)s7FiU@uJjyN;mZk(>~u&SlF8-4eWP>{Cq+% z4*k9k?~r&IZqQ`Wx=VdO?pufcr*CbbVQHH#!;;?2htOsL+&VmVVEEhj>)#WH1szv@ zwh<(cX#QWXIPqmv8>v~iH*#?jYo7S`P`%j~bB+b6O2M(%f&)gmy4KoW=LHEr^Wb<} z?T;28gAFdelkeieqhoCm@K6J?~1ST{I`+r;nj*0X}iZc(nsn_)=X~3>@d|&7u*>nGZMx85#Lm&4?ET#1H)B!CBD& zk=>aAc)o=pir^6HYc(zI42g(Bo~g`fWM_uZtq?+hXvpX3kp~R$no1&|;iyr>O9!A4 z(7l#tPTX{|GTe!~kq|0>m_Z|EnKS`{6PlGwl5f`#Dg(NF)`TlnlC`g+J%C)(FnePx zN(TtnzrRNv!)n7qbqcmYFM?CTchk}ToTZ7&vsAnKY_sZoD(QGIqe2eU(f?`d_#6GX zx|xO(9}r(Ko~xd5bbctpX$9b zG-~r(NBktoDT>F(11KZyL-6CG@n5%C??Ig9yqY_$YkL0e<8%jogc*1;jwhk^v765( z70UGR-=kL~y7KL2Et`~+#g;bk+!^UUG4E8h__gv%0D~`BzPp#Jhqv-vu^Kd^(Gsk{ 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

eoRfyhR$->8usC7K>mT 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 literal 0 HcmV?d00001 diff --git a/native/doc/aot_profile_thread_time_cost.png b/native/doc/aot_profile_thread_time_cost.png new file mode 100644 index 0000000000000000000000000000000000000000..878f96613f6d942c51f3e0d81372721bc2618a74 GIT binary patch literal 115268 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 +arguments are supported the same as `java`. + +```shell +java @aikars.flags -Dpaper.disableOldApiSupport=true -jar paper.jar nogui +``` +becomes: +```shell +./paperclip @aikars.flags -Dpaper.disableOldApiSupport=true -jar paper.jar nogui +``` + +The `paperclip` binary may be placed somewhere on the `PATH` to allow using it as a system-wide command, if you want. + +See `paperclip --help` for full usage instructions. + +#### AOT Management + +For technical details on what the AOT cache is, see the Ahead-of-Time Cache section below. This will just talk about +using AOT features in Paperclip. + +There are seven run modes: + +| **Mode** | **Argument** | **Behavior** | +|------------------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Default** | `` | Rusty Paperclip will record an AOT cache if it is missing or it does not match the current setup. If the cache file matches the current setup it will be used instead. This is the default, simply do not provide any of the following other arguments to use it. | +| **Check AOT** | `--check-aot` | Check the status of the current AOT cache file. If it matches, Paperclip will immediately return with exit code `0`. If it does not match (or does not exist), it will return with exit code `1`. This can be useful as a check in an automated script. | +| **Only Use AOT** | `--only-use-aot` | Paperclip will require a valid AOT cache file to run. If one is not present, or the existing file is incompatible, it will refuse to start the server and return with exit code `33` instead. | +| **No Record** | `--no-record` | Paperclip will use a valid AOT cache file if one is present. If one is not present, or the existing file is incompatible, it will skip using the AOT cache for this run. This can be useful if you want the server to startup normally (not incurring the startup time penalty of recording a new cache) if the cache becomes invalid. | +| **Only Record** | `--only-record` | Paperclip will record a new AOT cache file if one is missing or the existing cache file is invalid. If the existing cache file is valid Paperclip will immediately return with exist code `0`. If Paperclip does record a new AOT cache it will immediately shut the server down once it has fully started and finished writing the AOT cache. | +| **Force Record** | `--force-record` | This option behaves the same as `--only-record`, except that there is no AOT cache validity check. It will always record a new AOT cache file, and it will always immediately stop the server once the AOT cache file has been fully written. | +| **No AOT** | `--no-aot` | All AOT features will be completely disabled. This is essentially no different from running the Paperclip jar directly with `java`. | + +Only one of these options may be used at any given time. To use one of these arguments it **MUST** be the first argument +presented on the command line, right after `paperclip` (e.g. `paperclip --check-aot`). + +When using Paperclip with the default setting, on the first run Paperclip will initiate the AOT cache recording +automatically. Once the server has completed startup, it will write the cache to disk and write the associated metadata +file with it that allows for cache integrity checks. Any future server runs with the same configuration will use and +benefit from that AOT cache file. + +> [!CAUTION] +> We cannot verify AOT cache compatibility with plugins, as we have no control over plugin behavior. We have run into at +> least one instance of a plugin causing the AOT cache recording process to fail. We recommend recording the AOT cache +> file without any plugins, starting the server up standalone. You will still receive the benefits described here, as +> the core Minecraft server accounts for the vast majority of classes loaded during the startup process. The AOT cache +> generally isn't going to speed up heavy plugin initialization workloads anyways (it speeds up class loading, not +> class execution). + +> [!IMPORTANT] +> In order for Paperclip to use the AOT cache file the full run setup must be _identical_ to the run that recorded it. +> This includes: +> * The full classpath (including): +> * The server jar +> * All library jars +> * The SHA-256 hash of all classpath jars +> * The last modified timestamp of all classpath jars +> * The complete JVM argument list (order matters) +> * The complete application argument list (order matters) +> * The SHA-256 hash of the AOT cache file itself +> If any of these values don't match, the AOT cache will be marked invalid and will need to be re-recorded. + +### JRE Compatibility + +The minimum Java version you can run with Rusty Paperclip is strictly Java 25.0.4. Unfortunately the .4 is necessary, as +Rusty Papercilp uses a JRE API that was added in Java 26 and backported to Java 25.0.4. Any version of Java 26 and +higher, or of Java 25 after 25.0.4 will work as well. + +Paperclip finds the JRE using the standard Java locator mechanisms for each platform. The highest priority is always +given to wherever the `JAVA_HOME` environment variable points to. If that environment variable is not present, the +location of the `java` command on the `PATH` may also be used. Other platforms like Windows may also use standard +registry lookups where applicable. It's generally recommended to always set `JAVA_HOME` to be sure you're using the JRE +you expect. + +### Ahead-of-Time Cache + +The reason Rusty Paperclip exists is to provide a simple-to-use wrapper around +[Project Leyden](https://openjdk.org/projects/leyden/) Ahead-of-Time (or AOT, as it will be referred to from here on) +cache files. These caches provide a significant reduction in server startup time by recording and re-using class loading +data from previous server runs. The Paperclip binary provides utilities for easily managing and using AOT files with +Paper servers. **This is ideally used in applications where Paper servers are stopped and started frequently.** Examples +may include development environments or minigame servers. + +#### AOT: Why Rust? + +A common question we've gotten is "But why Rust? Couldn't you do this in Java?" or "Why Rust, why not X language +instead?" The answer to the second question is easy: Rust was chosen because it was a language that solved the problem +at hand. Other languages can also effectively solve the same issues; this really has nothing to do with programming +langauge flame wars. Any given project needs _some_ langauge, and Rust is what we picked for this one. + +

+Why Rust is a good fit + +As for _why_ Rust is a good fit here: we generally want to use as few system resources as possible for something like +this. CLI programs should ideally be small and fast, so a native application is usually the right call. + +Consider what Paperclip has to do: +1. Verify & download the original jar +2. Apply patches to the original jar and any library jars +3. Extract all library jars to build out the classpath +4. Load the classpath into the JVM, and start the server + +The Rust code does the exact same process, but by the time we get to step 4 in regular Paperclip, we have a big problem: +The JVM is already running! We can't modify JVM arguments to manage AOT cache files unless we then start +_another_ Java VM as a sub-process. While that is inefficient the real problem there is JVM arguments, when you start +Paperclip with `-Xmx` and other arguments configuring the heap and GC, those wouldn't apply to the sub process unless we +copied them down. That can cause other problems since `-Xms.. and -XX:+AlwaysPreTouch` are commonly recommended when +running Minecraft servers. This means now instead of the one JVM you expected to be running, possibly taking up all of +your system resources, now you have two of them. So copying down JVM arguments isn't a workable idea. + +By implementing this tool in any natively compiled language (which we happened to choose Rust in this case) works around +this issue. No JVM is started, and we can manage JVM arguments and other JVM settings directly without additional +overhead. We also get the added benefit of being able to the JNI API to interact with the JVM directly from our native +process, allowing us to inspect and control the AOT cache recording process. +
+ +#### AOT: What benefits does it provide? + +In general, the AOT cache will cut the server startup time in half. This has been remarkably consistent across a variety +of platforms, operating systems, and devices. The reasoning is straightforward: the Minecraft server needs to load a +_lot_ of classes. By pre-computing and saving information about these classes the JVM needs to do dramatically less work +on startup before the server is in a fully started state. + +Here are some charts to help visualize where the AOT cache helps. + +#### AOT: CPU Utilization +![JVM CPU Utilization](native/doc/aot_profile_cpu_util.png) + +CPU utilization drops off much quicker when using AOT. Since there is less work to do, the full boot process of the +server startup period finishes halfway through the regular startup time. Part of this is the JVM's built-in class +profiling information (which helps the JIT compiler make decisions about how to compile the bytecode) is re-used from +AOT cache, so that work doesn't need to be re-done. + +#### AOT: Thread-Time Cost +![Cumulative Thread-Time Cost (Boot Phase)](native/doc/aot_profile_thread_time_cost.png) + +To help put a finer point on the CPU utilization, this chart shows the dramatic reduction in both class loading and JIT +compilation. The primary benefit the AOT cache provides is during class loading, which you can see is almost entirely +eliminated with the AOT cache. But the JIT compilation improvements are significant too, with the AOT cache run doing +roughly 33% less JIT compilation work than the regular run. + +#### AOT: JIT Intensity +![JIT Compilation Intensity Over Time](native/doc/aot_profile_jit_intensity.png) + +Finally, to combine the findings of the two charts into one, this chart shows the amount of runtime the JVM is spending +towards JIT compilation of the classes during the class loading process. This may be the most dramatic of the three +charts, as the drop off of the orange AOT run almost perfectly drops to 0 halfway through the non-AOT run. From 5a18de81784e39d5a350f3fd719f1792b846ebfd Mon Sep 17 00:00:00 2001 From: Kyle Wood Date: Wed, 29 Jul 2026 21:32:31 -0500 Subject: [PATCH 14/14] Typo --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index ffcc069..8a4e3c3 100644 --- a/readme.md +++ b/readme.md @@ -136,8 +136,8 @@ your system resources, now you have two of them. So copying down JVM arguments i By implementing this tool in any natively compiled language (which we happened to choose Rust in this case) works around this issue. No JVM is started, and we can manage JVM arguments and other JVM settings directly without additional -overhead. We also get the added benefit of being able to the JNI API to interact with the JVM directly from our native -process, allowing us to inspect and control the AOT cache recording process. +overhead. We also get the added benefit of being able to use the JNI API to interact with the JVM directly from our +native code, allowing us to inspect and control the AOT cache recording process. #### AOT: What benefits does it provide?